#include <WiFi.h>
#include <WiFiUdp.h>
#include <coap-simple.h>
//const char* ssid = "WIFI_SSID"; // Replace with your WiFi name
//const char* password = "WIFI_PASSWORD"; // Replace with your WiFi password
const char* ssid = "Wokwi-GUEST";
const char* password = "";
//you can change to any GPIO port
#define LED 5
// CoAP server endpoint url callback
void callback_light(CoapPacket &packet, IPAddress ip, int port);
// UDP and CoAP class
WiFiUDP udp;
Coap coap(udp);
// LED STATE
bool LEDSTATE;
// CoAP server endpoint URL
void callback_light(CoapPacket &packet, IPAddress ip, int port) {
Serial.println("[Light] ON/OFF");
// send response
char p[packet.payloadlen + 1];
memcpy(p, packet.payload, packet.payloadlen);
p[packet.payloadlen] = NULL;
String message(p);
if (message.equals("0"))
LEDSTATE = false;
else if(message.equals("1"))
LEDSTATE = true;
if (LEDSTATE) {
digitalWrite(LED, HIGH) ;
coap.sendResponse(ip, port, packet.messageid, "ON", strlen("ON"), COAP_CONTENT, COAP_TEXT_PLAIN, packet.token, packet.tokenlen);
} else {
digitalWrite(LED, LOW) ;
coap.sendResponse(ip, port, packet.messageid, "OFF", strlen("OFF"), COAP_CONTENT, COAP_TEXT_PLAIN, packet.token, packet.tokenlen);
}
}
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// LED State
pinMode(LED, OUTPUT);
digitalWrite(LED, HIGH);
LEDSTATE = true;
// add server url endpoints. (can add multiple endpoint urls)
Serial.println("Setup Callback Light");
coap.server(callback_light, "light");
// start coap server/client
coap.start();
}
void loop() {
delay(1000);
coap.loop();
}
/*
if you change LED, req/res test with coap-client(libcoap), run following.
coap-client -m get coap://(arduino ip addr)/light
coap-client -e "1" -m put coap://(arduino ip addr)/light
coap-client -e "0" -m put coap://(arduino ip addr)/light
*/