在开始本教程以前,请先完成以下准备工作。
1. 将ESP8266-NodeMCU开发板与电脑通过数据线连接好
2. 确保您已经安装好Arduino IDE的ESP8266开发插件,(如您不确定如何实现此项工作,请点击这里进入本操作说明教程页面。)
3. 本教程需要使用“TCP_UDP测试工具软件”,请点击这里下载该软件并确保您的电脑可以运行使用该软件。
完成了以上操作后,请继续以下各步操作。
第0步
请将以下示例程序下载并使用Arduino IDE打开。
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 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
/********************************************************************** 项目名称/Project : 零基础入门学用物联网 程序名称/Program name : ESP8266WiFiUdp 团队/Team : 太极创客团队 / Taichi-Maker (www.taichi-maker.com) 作者/Author : 小凯 日期/Date(YYYYMMDD) : 20200402 程序目的/Purpose : 用于演示使用ESP8266WiFiUdp控制LED ----------------------------------------------------------------------- 本示例程序为太极创客团队制作的《零基础入门学用物联网》中示例程序。 该教程为对物联网开发感兴趣的朋友所设计和制作。如需了解更多该教程的信息,请参考以下网页: http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/iot-c/esp8266-nodemcu-web-client/http-request/ ***********************************************************************/ #include <ESP8266WiFi.h> #include <WiFiUdp.h> #define ssid "xiaokai" //这里改成你的设备当前环境下WIFI名字 #define password "12345678k" //这里改成你的设备当前环境下WIFI密码 WiFiUDP Udp;//实例化WiFiUDP对象 unsigned int localUdpPort = 1234; // 自定义本地监听端口 unsigned int remoteUdpPort = 4321; // 自定义远程监听端口 char incomingPacket[255]; // 保存Udp工具发过来的消息 void setup() { pinMode(LED_BUILTIN,OUTPUT); digitalWrite(LED_BUILTIN, HIGH); // 熄灭LED Serial.begin(115200);//打开串口 Serial.println(); Serial.printf("正在连接 %s ", ssid); WiFi.begin(ssid, password);//连接到wifi while (WiFi.status() != WL_CONNECTED)//等待连接 { delay(500); Serial.print("."); } Serial.println("连接成功"); if(Udp.begin(localUdpPort)){//启动Udp监听服务 Serial.println("监听成功"); //打印本地的ip地址,在UDP工具中会使用到 //WiFi.localIP().toString().c_str()用于将获取的本地IP地址转化为字符串 Serial.printf("现在收听IP:%s, UDP端口:%d\n", WiFi.localIP().toString().c_str(), localUdpPort); }else{ Serial.println("监听失败"); } } void loop() { //解析Udp数据包 int packetSize = Udp.parsePacket();//获得解析包 if (packetSize)//解析包不为空 { //收到Udp数据包 //Udp.remoteIP().toString().c_str()用于将获取的远端IP地址转化为字符串 Serial.printf("收到来自远程IP:%s(远程端口:%d)的数据包字节数:%d\n", Udp.remoteIP().toString().c_str(), Udp.remotePort(), packetSize); // 读取Udp数据包并存放在incomingPacket int len = Udp.read(incomingPacket, 255);//返回数据包字节数 if (len > 0) { incomingPacket[len] = 0;//清空缓存 Serial.printf("UDP数据包内容为: %s\n", incomingPacket);//向串口打印信息 //strcmp函数是string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果返回整数。 //基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。 if (strcmp(incomingPacket, "LED_OFF") == 0) // 命令LED_OFF { digitalWrite(LED_BUILTIN, HIGH); // 熄灭LED sendCallBack("LED has been turn off\n"); } else if (strcmp(incomingPacket, "LED_ON") == 0) //如果收到LED_ON { digitalWrite(LED_BUILTIN, LOW); // 点亮LED sendCallBack("LED has been turn on\n"); } else // 如果指令错误,调用sendCallBack { sendCallBack("Command Error!"); } } } } //向udp工具发送消息 void sendCallBack(const char *buffer) { Udp.beginPacket(Udp.remoteIP(), remoteUdpPort);//配置远端ip地址和端口 Udp.write(buffer); //把数据写入发送缓冲区 Udp.endPacket(); //发送数据 } |
第一步
如下图所示,我们需要修改程序中接入的WiFi名称、密码。如有必要,也可以修改本地、远程端口号以适应您设备需要。(如不确定设备端口号,可保持程序内容不做修改)
完成之后上传程序到ESP8266开发板。
第二步
程序上传成功后,打开串口监视器,等待ESP8266开发板联网成功后,复制串口监视器显示的IP地址。(如下图所示)
第三步
如下图所示,打开UDP测试工具,点击UDP测试。
将之前复制的IP地址、端口号粘贴到对应位置
然后点击监听,再点击连接。
第四步
在发送区输入LED_ON,点击发送,可以看到接收区出现LED has been turn on
这说明ESP8266已经接收到消息,点亮了板载LED。
接下来您可以确认ESP8266开发板上的LED是否被点亮。同样,我们也可以发送LED_OFF,来熄灭板载LED