- 【丁丁歷險記】全篇索引
- 本節使用esp8266或者esp32使用socket的連接方法進行通信
- 實現數據的互傳,也可以實現跨平臺的連接
一、esp8266/32進行socket連接
- 本節教大家如何使用wifi模塊去採集傳感器數據,並通過網絡協議發送到服務器。wifi模塊中使用網絡協議進行通信的方式較爲穩定。在連接時建立長連接的方式,可以保證數據在第一時間發送到接收端,並且也可以進行互傳。
-
//服務端 #include "ESP8266WiFi.h" const char* ssid = "YOUR SSID";//連接的WiFi名稱 const char* password = "PASSWD";//連接的wifi密碼 WiFiServer wifiServer(80);//使用80端口進行連接 void setup() { Serial.begin(115200); delay(1000); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting.."); } Serial.print("Connected to WiFi. IP:"); Serial.println(WiFi.localIP()); wifiServer.begin(); } void loop() { WiFiClient client = wifiServer.available(); String msgs = ""; if (client) { while (client.connected()) { while (client.available()>0) { char c = client.read(); Serial.write(c); msgs += c; } client.print(msgs);//將socket客戶端接收的數據發送回去 msgs = ""; delay(10); } client.stop(); Serial.println("Client disconnected"); } }
上述的代碼爲esp8266的socket服務端。如果使用esp32的時候將頭文件更改爲"WiFi.h"
-
//客戶端 #include <Arduino.h> #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <Ticker.h> #define WIFISSID "YOUR WIFI SSID" #define PASSWD "YOUR WIFI PASSWD" const char *host = "";//服務端的ip地址 Ticker flipper; WiFiClient client; //發送心跳包(隨意發送一次數據) 用於保持連接 void flip() { client.print("。"); } void setup() { Serial.begin(115200); Serial.println("Connecting...\n"); WiFi.mode(WIFI_STA); WiFi.begin(WIFISSID,PASSWD); // change it to your ussid and password while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } if (!client.connect("ip address", 80))//連接的IP地址和 { Serial.println("Connection to host failed"); delay(1000); return; } flipper.attach(180, flip);//每隔180秒執行一次回調函數 } void loop() { while (client.available() > 0) { char c = client.read(); Serial.write(c); } }
客戶端連接wifi,使用時將ip地址更給爲服務器地址