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——工具——串口監視器即可查看
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章