ESP8266 sockety przykład w arduino
1.1 Gniazdo (socket) = para (IP, port) wykorzystywana do dwukierunkowej komunikacji w sieciach TCP/IP.
1.2 ESP8266–Arduino udostępnia trzy główne klasy:
ESPAsyncTCP
, ESPAsyncWebServer
, arduinoWebSockets
).ESPAsyncTCP
, ESPAsyncWebServer
(dla WebSocket) – wersje z 2024-02 gwarantują kompatybilność z core 3.1.2. #include <ESP8266WiFi.h>
const char* ssid="SSID"; const char* pass="PASS";
WiFiServer server(8888);
void setup(){
Serial.begin(115200); WiFi.begin(ssid,pass);
while(WiFi.status()!=WL_CONNECTED){delay(250);Serial.print('.');}
Serial.printf("\nIP: %s\n", WiFi.localIP().toString().c_str());
server.begin();
}
void loop(){
WiFiClient client = server.available();
if (!client) return;
Serial.printf("Nowy klient: %s\n", client.remoteIP().toString().c_str());
while (client.connected()){
while (client.available()){
char c = client.read();
client.write(c); // echo
Serial.write(c);
}
yield(); // zapobiega watchdogowi
}
client.stop();
Serial.println("Klient rozłączony");
}
• Test: nc <IP> 8888
.
#include <ESP8266WiFi.h>
const char* ssid="SSID"; const char* pass="PASS";
const char* host="example.com"; const uint16_t port=80;
void setup(){
Serial.begin(115200); WiFi.begin(ssid,pass);
while(WiFi.status()!=WL_CONNECTED) {delay(500);}
}
void loop(){
WiFiClient cli;
if (cli.connect(host,port)){
cli.print("GET / HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n");
while(cli.connected() || cli.available()){
if(cli.available()) Serial.write(cli.read());
}
cli.stop();
} else Serial.println("Błąd połączenia");
delay(10000);
}
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
const char* ssid="SSID"; const char* pass="PASS";
WiFiUDP U; uint16_t localPort=4210; char buf[255];
void setup(){
Serial.begin(115200); WiFi.begin(ssid,pass);
while(WiFi.status()!=WL_CONNECTED) delay(200);
U.begin(localPort);
Serial.printf("UDP na %u\n", localPort);
}
void loop(){
int len = U.parsePacket();
if(len){
IPAddress rIP = U.remoteIP(); uint16_t rPort = U.remotePort();
len = U.read(buf, sizeof(buf)-1); buf[len]=0;
Serial.printf("UDP od %s:%u -> %s\n", rIP.toString().c_str(), rPort, buf);
U.beginPacket(rIP,rPort); U.write("ACK"); U.endPacket();
}
}
#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
const char* ssid="SSID"; const char* pass="PASS";
AsyncWebServer srv(80);
AsyncWebSocket ws("/ws");
void onEvent(AsyncWebSocket *s, AsyncWebSocketClient *c,
AwsEventType t, void *, uint8_t *data, size_t len){
if(t==WS_EVT_CONNECT) Serial.printf("WS id %u połączony\n", c->id());
if(t==WS_EVT_DATA){ data[len]=0; c->text("echo:"+String((char*)data)); }
}
void setup(){
Serial.begin(115200); WiFi.begin(ssid,pass);
while(WiFi.status()!=WL_CONNECTED) delay(200);
ws.onEvent(onEvent);
srv.addHandler(&ws);
srv.serveStatic("/", SPIFFS, "/").setDefaultFile("index.html");
srv.begin(); Serial.println("WebSocket on /ws");
}
void loop(){ ws.cleanupClients(); }
Minimalny klient w przeglądarce:
<script>
let ws=new WebSocket("ws://IP_ESP/ws");
ws.onopen = ()=>ws.send("Hello");
ws.onmessage = e=>console.log("RX:",e.data);
</script>
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
const char* ssid="SSID"; const char* pass="PASS";
void setup(){
Serial.begin(115200); WiFi.begin(ssid,pass);
while(WiFi.status()!=WL_CONNECTED) delay(200);
}
void loop(){
WiFiClientSecure cli; cli.setInsecure(); // testowe! w produkcji użyj certyfikatu
if(cli.connect("api.ipify.org",443)){
cli.print("GET /?format=json HTTP/1.1\r\nHost: api.ipify.org\r\nConnection: close\r\n\r\n");
while(cli.connected()||cli.available()) if(cli.available()) Serial.write(cli.read());
cli.stop();
}
delay(30000);
}
WiFiClient
i iteracja w głównej pętli. 2023 pojawił się core 3.x z lepszą obsługą
LWIP v2 Higher Performance
. Zaleca się ustawienie wTools → lwIP Variant → v2 Higher Performance
.
client.setTimeout(5000);
yield();
lub delay(0);
. client.setFingerprint()
lub setTrustAnchors()
), bo setInsecure()
wyłącza weryfikację (ryzyko MITM). LittleFS
lub użyj WiFiManager.AsyncMqttClient
) dominują w nowych projektach IoT dzięki „push” i QoS. nc
, telnet
, mosquitto_pub/sub
, WebSocket King
(plugin Chrome), python -m websockets
. LittleFS
zamiast przestarzałego SPIFFS
(wsparcie od core 3.0). Serial.swap()
lub niższa prędkość) i kompresuj pliki systemu plików. PubSubClient
lub AsyncMqttClient
. Pokazano, jak na ESP8266 z Arduino IDE zbudować: