Arduino-ESP8266 NodeMCU的UDP通信
1.环境准备
- 1.安装Arduino IDE开发工具
Arduino IDE(集成开发环境)下载及安装链接 - 2.在Arduino IDE搭建ESP8266 NodeMCU的环境
ESP8266与NodeMCU开发环境搭建链接
若用以上链接安装特别慢或失败,那就试试这个链接,里面提供了安装包放在百度网盘NodeMcu arduino编程环境安装与搭建
,配置好后重启下Arduino即可。
- 3.arduino怎么烧录程序
arduino怎么烧录程序链接
开发板那选择开发板为NodeMCU,型号根据自己的开发板选择,后选择端口,烧入程序。
2.代码编写
- 将以下代码下载至ESP8266 NodeMCU,即可完成硬件端的udp通信。
- 代码大致过程:初始化串口通信,将开发板配入有网的WIFI或热点,开始监听udp端口8888,将连接DHT11温湿度传感器的那个引脚设为输出模式。后无限循环采集温湿度湿度,与监听端口是否有收到请求信息的命令,若收到请求信息,则返回温湿度信息给发送请求信息命令端。
#include <ESP8266WiFi.h>
#include <WiFiUDP.h>
#include <SPI.h>
#include <Wire.h>
#include<stdlib.h>
#include <dht11.h> //DHT11的头文件
//连入自己的家里的WIFI、热点
const char *ssid = "111";//WIFI名
const char *password =
"wubaoshi";//密码
unsigned int UDPPort = 8888; //本地端口号
char packetBuffer1[255]; //buffer to hold
incoming packet
char packetBuffer2[255];
char
ReplyBuffer1[] = "";
// a string to send back
char
ReplyBuffer2[] = "";
WiFiUDP Udp;
//温度传感器加载
dht11 DHT11;
#define DHT11_PIN 2 //DHT11引脚,实际接线接入开发板的D4
int temperature=0; //存放温度的变量
int humidity=0; //存放湿度的变量
// 复位或上电后运行一次:
void setup() {
//在这里加入初始化相关代码,只运行一次:
Serial.begin(115200); //初始化串口通信,并将波特率设置为115200
WiFi.mode ( WIFI_AP );//WIFI设为AP模式
WiFi.begin ( ssid, password );//连接WIFI热点
//
Wait for connection
while ( WiFi.status() != WL_CONNECTED ) { //WIFI的连接状态
delay ( 500 );
Serial.print ( "." );//如果没有连通向串口发送.....
}
Serial.println ( "" );
Serial.print ( "Connected to " );
Serial.println ( ssid );
Serial.print ( "IP address: " );
Serial.println ( WiFi.localIP() );//返回获得的本机ip地址
Udp.begin(UDPPort);// 开始UDP端口侦听
pinMode(DHT11_PIN,OUTPUT);
Serial.println();
Serial.println("本地IP地址: " + WiFi.localIP().toString());//串口打印本地IP地址
}
//一直循环执行:
void loop() {
// 在这里加入主要程序代码,重复执行:
int packetSize = Udp.parsePacket();
/**获取温湿度,后在串口打印出数据**/
/**一定要有chk,不然不显示内容**/
int chk1 = DHT11.read(DHT11_PIN); //将读取到的值赋给chk
temperature=DHT11.temperature;
humidity=DHT11.humidity;
Serial.print("Temperature: ");
Serial.println(temperature);//串口打印温度
Serial.print("humidity: ");
Serial.println(humidity); //串口打印湿度
itoa(temperature, ReplyBuffer1, 10);
itoa(humidity, ReplyBuffer2, 10);
delay(100);
Serial.println("本地IP地址: " + WiFi.localIP().toString()); //串口打印本地IP地址
Serial.println("端口号: " + UDPPort); //串口打印端口号
/**如果接收到上位机发来的信息,就返回采集到温湿度数据给上位机**/
//
UDP广播数据到达处理
if (packetSize) {
Serial.print("Received
packet of size ");
Serial.println(packetSize);
Serial.print("From
");
IPAddress remoteIp =
Udp.remoteIP();//获取远程广播包发送IP
Serial.print(remoteIp);
Serial.print(", port
");
Serial.println(Udp.remotePort());
// 将到达的数据包读入packetBufffer1,packetBufffer2
int len1 =
Udp.read(packetBuffer1, 255);
int len2 = Udp.read(packetBuffer2, 255);
if (len1 > 0) {
packetBuffer1[len1] =
0;
}
if (len2 > 0) {
packetBuffer2[len2] =
0;
}
Serial.println("Contents:");
Serial.println(packetBuffer1);
Serial.println(packetBuffer2);
// 回复信息给广播发送IP
Udp.beginPacket(Udp.remoteIP(),
Udp.remotePort());
Udp.write(ReplyBuffer1);
Udp.write(ReplyBuffer2);
Udp.endPacket();
}
}
3.串口及网络调试助手验证
- 串口调试助手
- 网络调试助手
注:开发板和单片机要在一个局域网内,即连同一个WIFI或热点
电脑本机IP地址在WIN+R——cmd——输入ipconfig查看
开发板的IP地址我在串口那打印出来了,在Arduino——工具——串口监视器即可查看