Deze bron kan de toestand van een led veranderen via "POST coap://.../esp8266/led_gpio12″.
[code lang="c" highlight="12-17″]
static void SetLedstatePayload(CoAP_Message_t* pReq, CoAP_Message_t* pResp){
if(LedState) CoAP_SetPayload(pReq, pResp, "Led is aan!", coap_strlen("Led is aan!"), true);
anders CoAP_SetPayload(pReq, pResp, "Led is uit!", coap_strlen("Led is uit!"), true);
}
statische CoAP_HandlerResult_t Res_ReqHandler(CoAP_Message_t* pReq, CoAP_Message_t* pResp) {
if(pReq->Code == REQ_POST) {
CoAP_option_t* pOpt;
bool Found = false;
for(pOpt =pReq->pOptionsList ; pOpt != NULL; pOpt = pOpt->next) {
switch(CoAP_FindUriQueryVal(pOpt,"",3, "on", "off", "tgl")) { // geen voorvoegsel gebruikt
geval 0: break; //niet gevonden
case 1: led(true); Found=true; break; //found "on".
geval 2: led(false); Found=true; break; //found "off".
case 3: led(!LedState); Gevonden=true; break; //gevonden "tgl"
}
if(Found) {
SetLedstatePayload(pReq, pResp);
pauze;
}
}
if(!Found){
char info[] = {"gebruik: coap://.../led_gpio12?on (of "off", "tgl")"};
CoAP_SetPayload(pReq, pResp, info, coap_strlen(info), true);
pResp->Code=RESP_ERROR_BAD_REQUEST_4_00;
}
}se if(pReq->Code == REQ_GET){
SetLedstatePayload(pReq, pResp);
}
return HANDLER_OK;
}
statische CoAP_HandlerResult_t Res_NotifyHandler(CoAP_Observer_t* pObserver, CoAP_Message_t* pResp) {
SetLedstatePayload(NULL, pResp);
return HANDLER_OK;
}
CoAP_Res_t* Create_Led_Resource() {
CoAP_ResOpts_t Options = {.Cf = COAP_CF_TEXT_PLAIN, .Flags = RES_OPT_POST | RES_OPT_GET};
return (pLed_Res=CoAP_CreateResource("esp8266/led_gpio12", "LED at GPIO12",Options, Res_ReqHandler, Res_NotifyHandler));
}
[/code]