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——工具——串口監視器即可查看