Arduino-ESP8266 NodeMCU的UDP通信

1.环境准备

若用以上链接安装特别慢或失败,那就试试这个链接,里面提供了安装包放在百度网盘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——工具——串口监视器即可查看
    在这里插入图片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章