Arduino网络编程实战-Ethernet篇-CoAP客户端 CoAP客户端 Arduino Ethernet Shield V1 允许 Arduino 板连接到互联网。 它基于 Wiznet W5100ethernet 芯片(数据表)。 Wiznet W5100 提供支持 TCP 和 UDP 的网络 (IP) 堆栈。 它最多支持四个同时套接字连接。
本次实例将演示如何实现一个简单的CoAP客户端。
1、硬件准备
Arduino Mega 2560
Arduino Ethernet Shield
路由器(推荐可以上网、开启DHCP)
网线一条
电脑一台
2、软件准备
3、代码实现 1)Arduino端的CoAP客户端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 #include <SPI.h> #include <Dhcp.h> #include <Dns.h> #include <Ethernet.h> #include <EthernetUdp.h> #include <coap-simple.h> #define USE\_STATIC 0 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; #if USE\_STATIC IPAddress ip(192, 168, 0, 177); #endif // CoAP 响应回调 void callback\_response(CoapPacket &packet, IPAddress ip, int port); 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); } EthernetUDP Udp; Coap coap(Udp); void setup() { Serial.begin(115200); Serial.println("Ethernet CoAP Client Example"); #if USE\_STATIC Ethernet.begin(mac,ip); #else Ethernet.begin(mac); #endif if (Ethernet.hardwareStatus() == EthernetNoHardware) { Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :("); while (true) { delay(1); } } if (Ethernet.linkStatus() == LinkOFF) { Serial.println("Ethernet cable is not connected."); while(true){ delay(1); } } Serial.print("IP:"); Serial.println(Ethernet.localIP()); Serial.print("Subnet Mask:"); Serial.println(Ethernet.subnetMask()); Serial.print("Gateway:"); Serial.println(Ethernet.gatewayIP()); Serial.print("DNS Server:"); Serial.println(Ethernet.dnsServerIP()); coap.response(callback_response); // start coap server/client coap.start(); } void loop() { Serial.println("Send Request:time"); int msgid = coap.get(IPAddress(192, 168, 0, 130), 5683, "time"); delay(1000); coap.loop(); }
2)Nodejs端的CoAP服务器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 const coap = require('coap') // or coap const server = coap.createServer() var datetime = require('node-datetime'); server.on('request', (req, res) => { var req_path = req.url.split('/')[1]; console.log('client request:' + req_path) if(req_path == 'time'){ var dt = datetime.create(); var formatted = dt.format('Y/m/d H:M:S'); res.end(formatted); console.log('[response]:' + formatted); }else{ res.end('[hello]\n') } }) server.listen(() => { console.log('server started') })
4、运行结果 Arduino端:
Nodejs服务器端
文章来源: https://iotsmart.blog.csdn.net/article/details/122774045
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!