- 【丁丁历险记】全篇索引
- 本节使用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地址更给为服务器地址