关于arduino:COAP协议-arduino-ESP32-M2M端对端通讯与代码详解
前言最近我在钻研 COAP 协定,在尝试应用 COAP 协定找了到了一个能在ESP32上用的coap-simple库,尽管库并不欠缺对于loop解决的局部应该是没写完,然而对于第一次接触COAP的敌人来说更容易了解,不便学习,须要的敌人能够去上面下载: https://github.com/hirotakast...我之前应用 IOT PI 的 COAP 能和 PC node coap 通信,然而因为 coap-simple 库不欠缺,失常的无奈与 node coap 通信,只能和同样应用这个库设施通信,这次就来尝试 ESP32 之间的 M2M 通信。 获取库应用 arduino IDE 就能下载到这个库:如果没有看到这个库,能够去首选项增加一下附加开发板管理器网址: https://github.com/espressif/...具体应用能够参考的我 arduino 超具体的开发入门领导 或者间接通过我下面发的 GitHub 网址下载。 代码解析以下代码为了不便解说,可能通过了调换了程序或者裁剪。 这个 demo 是客户端、服务端一体的,只须要注册对应的回调函数就行。 初始化局部这部分包含了设施初始化,协定初始化等局部,重点在服务器/客户端的回调函数局部。和 SDDC 官网demo相似,在这注册回调函数之后,通过对应的端点找到对应的回调函数。 #include <WiFi.h>#include <WiFiUdp.h>#include <coap-simple.h>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(9, OUTPUT); digitalWrite(9, HIGH); LEDSTATE = true; // 增加服务器url端点. // 能够增加多个端点url. // coap.server(callback_switch, "switch"); // coap.server(callback_env, "env/temp"); // coap.server(callback_env, "env/humidity"); Serial.println("Setup Callback Light"); // 其实就是注册服务器解决回调函数 // 将解决函数指针与url增加到 uri.add 中 coap.server(callback_light, "light"); // 注册客户端响应的回调函数。 // this endpoint is single callback. Serial.println("Setup Response Callback"); // 很下面一样,其实就是把回调函数指针注册到resp里 coap.response(callback_response); // 应用默认端口5683 启动 coap server/client coap.start();}void loop() { // 作为客户端时向coap服务器发送GET或PUT coap申请. // 能够发送给另外一个 ESP32 // msgid = coap.put(IPAddress(192, 168, 128, 101), 5683, "light", "0"); // msgid = coap.get(IPAddress(192, 168, 128, 101), 5683, "light"); delay(1000); coap.loop();}回调函数// CoAP 服务器端点 URL ,对客户端发过来的命令进行解决并且回应void callback_light(CoapPacket &packet, IPAddress ip, int port) { // 这是一个模仿控灯的回调函数,通过接管的命令 Serial.println("[Light] ON/OFF"); Serial.println(packet.messageid); // 发送响应 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) ; Serial.println("[Light] ON"); coap.sendResponse(ip, port, packet.messageid, "1"); } else { digitalWrite(9, LOW) ; Serial.println("[Light] OFF"); coap.sendResponse(ip, port, packet.messageid, "0"); }}// CoAP客户端响应回调void callback_response(CoapPacket &packet, IPAddress ip, int port) { Serial.println("[Coap Response got]"); char p[packet.payloadlen + 1]; memcpy(p, packet.payload, packet.payloadlen); p[packet.payloadlen] = NULL; Serial.println(p);}库代码报文构造定义: ...