#include <coap-simple.h>
//instance for coapclient
coapClient coap;
const int SenseAir-S8-LP_pin = 16;
//Configure the IP address and default port of coap server
IPAddress ip(129,132,15,80);//take ETH Zurich or coap.me server to run and check client
int port =5683;
// Sends a CoAP PUT request if methane exceeds threshold
void ForwardCoapRequest(int methaneValue) {
int methaneValue = analogRead(SenseAir-S8-LP_pin);
if (methaneValue > 1000) {
coap.put(ip, port, "gas/alert", "METHANE HIGH", strlen("METHANE HIGH")); }
// Monitor responses and maintain observations/CoAP stack (timeouts, retransmissions)
state = coap.loop();
delay(5000); // Sensor read interval (5 seconds)
// coap client response callback
void callback_response(coapPacket &packet, IPAddress ip, int port) {
char p[packet.payloadlen + 1];
memcpy(p, packet.payload, packet.payloadlen);
p[packet.payloadlen] = NULL;
//response from coap server
if(packet.type==3 && packet.code==0){
Serial.println("ping ok");
}
}
void setup() {
Serial.begin(115200);
// client response callback.
// this endpoint is single callback.
coap.response(callback_response);
// start coap client
coap.start();
//get request to server (arguments ip adrress of server,default port,resource(uri))
int msgid = coap.get(ip,port,"light");
//observe request (arguments ip adrress of server,deafult port,resource name,interger(0) )
//int msgid= coap.observe(ip,port,"light",0);
//reset observe cancel
//int msgid=coap.observecancel(ip,port,"resoucename");
}
//int i=0;
void loop() {
bool state;
// Requests
//get request
//int msgid = coap.get(ip,port,"hello");
//put request
//arguments server ip address,default port,resource name, payload,payloadlength
//int msgid =coap.put(ip,port,"resourcename","0",strlen("0"));
//post request
//arguments server ip address,default port,resource name, payload,payloadlength
//int msgid =coap.post(ip,port,"resourcename","0",strlen("0"));
//delete request
//int msgid = coap.delet(ip,port,"resourcename");
//ping
//int msgid=coap.ping(ip,port);
// int msgid=coap.observe(ip,port,"obs",0);
state= coap.loop();
// Serial.print("state=");
//Serial.println(state);
//if(state==true)
//i=i+1;
//Serial.print("i=");
//Serial.println(i);
//if(i==3)
//{
//Serial.println("cancel observe");
//coap.observeCancel(ip,port,"resourcename");
//}
//Serial.println(msgid);
delay(1000);
}
WiFiUDP udp;
Coap coap(udp);
// 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(9, HIGH) ;
coap.sendResponse(ip, port, packet.messageid, "1");
} else {
digitalWrite(9, LOW) ;
coap.sendResponse(ip, port, packet.messageid, "0");
}
}
// CoAP client response callback
void callback_response(CoapPacket &packet, IPAddress ip, int port) {
Serial.printf(" → Got %d.%02d:\n", packet.code >> 5, packet.code & 0b11111);
char p[packet.payloadlen + 1];
memcpy(p, packet.payload, packet.payloadlen);
p[packet.payloadlen] = NULL;
Serial.println(p);
}
void setup() {
Serial.begin(9600);
// server url endpoints (callback for each)
coap.server(callback_light, "light");
// client response (single) callback
coap.response(callback_response);
// start coap server/client
coap.start();
}
void loop() {
Serial.printf("\nGet %s:%d/%s\n", coap_server.toString().c_str(), coap_port, "time");
int msgid = coap.get(coap_server, coap_port, "time");
delay(2000);
coap.loop();
float temp = dht.getTemperature();
Serial.printf("\nPut %f at %s:%d/%s\n", temp, coap_server.toString().c_str(), coap_port, "temperature");
coap.put(coap_server, coap_port, "temperature", std::to_string(temp).c_str());
delay(2000);
coap.loop();
}