W zasadzie powinienem przeprosić za ten mój dzisiejszy wpis. Dlaczego? Bo to nie mój wpis tylko wygenerowany przez AI. Nie ma w nim nic odkrywczego i nie zawiera żadnych osobistych doświadczeń i wniosków choć trzeba przyznać wszystko jest prawdziwe i zgrabnie podane.
Ale to tylko taka próba co potrafi AI AD 2025. Za rok powtórzę dokładnie ten sam test by zobaczyć czy i jak rozwija się ta "inteligencja". Dla porównania dwa teksty wygenerowane przez chatgpt i GROKa.
[zadanie dla chatgpt:
napisz mi ładnego bloga o połączeniu dwóch ESP32 C3 websocket w stylu
https://100-x-arduino.blogspot.com/ ]
W dzisiejszym wpisie pokażę, jak w bardzo prosty sposób połączyć dwa moduły ESP32-C3 tak, aby mogły rozmawiać ze sobą w obie strony za pomocą WebSocketów.
Ten typ połączenia daje ogromne możliwości — błyskawiczną wymianę danych, stabilność, możliwość przesyłania tekstów, liczb, komend, a nawet struktur JSON.
A co najlepsze: działa to po zwykłym Wi-Fi, bez żadnych dodatkowych modułów.
Co będzie potrzebne
-
dwa moduły ESP32-C3
-
Arduino IDE z dodaną płytką ESP32
-
Wi-Fi w zasięgu
-
dwie otwarte karty Serial Monitora, aby obserwować oba ESP jednocześnie
Dlaczego WebSocket, a nie zwykły HTTP?
HTTP jest jak rozmowa listowna — wysyłasz, czekasz, odbierasz.
WebSocket to już rozmowa telefoniczna — połączenie trwa non stop i obie strony mogą mówić, kiedy chcą.
Dzięki temu:
-
ESP32-C3 A może wysłać wiadomość w dowolnym momencie
-
ESP32-C3 B może odpowiedzieć natychmiast
-
czas reakcji to zwykle ułamek milisekundy
-
połączenie jest stałe i bardzo stabilne
Doskonałe do robotów, sterowania, sensorów, telemetrycznych projektów, paneli dotykowych, a nawet prostych gier.
Schemat działania projektu
Połączenie zorganizujemy w najprostszej możliwej formie:
-
ESP32-C3 nr 1 → pełni rolę WebSocket Servera
-
ESP32-C3 nr 2 → łączy się jako WebSocket Client
Oba moduły wysyłają sobie naprzemiennie wiadomości typu String.
Kod dla ESP32-C3 — WebSocket Server
[zadanie dla AI
podaj kod pokolorowany ]
#include <WiFi.h> #include <AsyncTCP.h> #include <ESPAsyncWebServer.h> const char* ssid = "TwojeSSID"; const char* password = "TwojeHASLO"; AsyncWebServer server(80); AsyncWebSocket ws("/ws"); void onWsEvent( AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len) { if (type == WS_EVT_CONNECT) { Serial.println("Klient połączony"); client->text("Witaj kliencie!"); } else if (type == WS_EVT_DATA) { String msg = ""; for (size_t i = 0; i < len; i++) msg += (char)data[i]; Serial.print("Odebrano od klienta: "); Serial.println(msg); client->text("Serwer odebrał: " + msg); } } void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) delay(500); Serial.println(WiFi.localIP()); ws.onEvent(onWsEvent); server.addHandler(&ws); server.begin(); } void loop() { static unsigned long last = 0; if (millis() - last > 5000) { last = millis(); ws.textAll("Ping z serwera"); } }
Kod dla ESP32-C3 — WebSocket Client
[to zostawiłem w pierwotnym oryginale ]
Tutaj moduł łączy się do serwera po jego adresie IP.
Pierwsze uruchomienie
-
Wgraj serwer na pierwszy ESP32-C3.
-
Otwórz Serial Monitor i sprawdź wyświetlone IP.
-
Wpisz to IP w kodzie klienta (
SERVER_IP). -
Wgraj klienta na drugi ESP32-C3.
-
Otwórz dwa okna Serial Monitora – zobaczysz „rozmowę” urządzeń.
Efekt działania
Po uruchomieniu urządzenia wymieniają komunikaty automatycznie:
-
serwer wysyła „Ping z serwera”
-
klient wysyła „Ping od klienta”
-
oba zwracają komunikaty i odpowiadają
To wygląda jak mały czat pomiędzy dwoma mikrokontrolerami.
---------------------------------------------------------------------------
----------------------------------------------------------------------------
----------------------------------------------------------------------------
[zadanie dla grok'a:
napisz mi ładnego bloga o połączeniu dwóch ESP32 C3 websocket w stylu
https://100-x-arduino.blogspot.com/ ]
Oto gotowy, ładny i przyjemny wpis blogowy w stylu klasycznego polskiego bloga Arduino (z nutką nostalgii, dużą dawką praktyki i szczyptą humoru), dokładnie taki, jaki mógłby się pojawić na https://100-x-arduino.blogspot.com/
Tytuł: Dwa ESP32-C3 rozmawiają przez WebSocket – czyli jak zrobić bezprzewodowy „czat” w 20 minut
Cześć! ☕ Dzisiaj znowu siedzimy w piwnicy z lutownicą i kawą. Tym razem bierzemy dwa małe, ale wściekle fajne moduły ESP32-C3 (te z RISC-V i wbudowanym Wi-Fi/Bluetooth) i łączymy je ze sobą przez WebSocket. Po co? Bo możemy! A przy okazji wychodzi nam superszybka, dwukierunkowa komunikacja bez żadnego serwera pośredniczącego (no, prawie).
Po co to komu?
- Sterowanie jednym ESP drugim (np. robot + pilot)
- Synchronizacja danych między dwoma urządzeniami w sieci lokalnej
- Prosty „czat” do debugowania (wysyłasz z jednego – widzisz na drugim)
- Baza do bardziej zaawansowanych projektów typu mesh czy multiplayer w grach na ESP
Co będzie potrzebne?
- 2 × ESP32-C3 (ja używałem popularnych „mini” i „super mini”)
- Arduino IDE 2.x + płytka ESP32 by Espressif Systems
- Trochę cierpliwości i działające Wi-Fi
Krok 1 – Biblioteka Używamy genialnej biblioteki WebSockets autorstwa Gil Maimon (Links2004). W Arduino IDE: Szkic → Dołącz bibliotekę → Zarządzaj bibliotekami… → szukamy „WebSockets by Links2004” → instalujemy wersję 2.3.7 lub nowszą.
Krok 2 – Kod serwera (pierwszy ESP32-C3)
#include <WiFi.h>
#include <WebSocketsServer.h>
const char* ssid = "TwojaSiec";
const char* password = "TwojeHaslo";
WebSocketsServer webSocket = WebSocketsServer(81); // port 81, bo 80 czasem zajęty
void onWebSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length) {
switch(type) {
case WStype_DISCONNECTED:
Serial.printf("Klient %u rozłączony\n", num);
break;
case WStype_CONNECTED:
Serial.printf("Klient %u połączony!\n", num);
webSocket.sendTXT(num, "Witaj po drugiej stronie! 🌊");
break;
case WStype_TEXT:
String tekst = String((char*)payload);
Serial.printf("Odebrano od %u: %s\n", num, tekst.c_str());
// odbijamy wiadomość do wszystkich klientów
webSocket.broadcastTXT(tekst);
break;
}
}
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("IP serwera: ");
Serial.println(WiFi.localIP());
webSocket.begin();
webSocket.onEvent(onWebSocketEvent);
}
void loop() {
webSocket.loop();
// co 5 sekund wysyłamy coś dla zabawy
static unsigned long last = 0;
if (millis() - last > 5000) {
last = millis();
String msg = "Serwer żyje! Czas: " + String(millis()/1000) + "s";
webSocket.broadcastTXT(msg);
}
}Krok 3 – Kod klienta (drugi ESP32-C3)
#include <WiFi.h>
#include <WebSocketsClient.h>
const char* ssid = "TwojaSiec";
const char* password = "TwojeHaslo";
const char* serverIP = "192.168.1.100"; // <-- TU WPISZ IP SERWERA!
const uint16_t serverPort = 81;
WebSocketsClient webSocket;
void onWebSocketEvent(WStype_t type, uint8_t * payload, size_t length) {
switch(type) {
case WStype_DISCONNECTED:
Serial.println("Rozłączony z serwerem :(");
break;
case WStype_CONNECTED:
Serial.println("Połączony z serwerem!");
break;
case WStype_TEXT:
Serial.printf("Odebrano: %s\n", payload);
// Migamy diodą dla frajdy
digitalWrite(8, !digitalRead(8));
break;
}
}
void setup() {
pinMode(8, OUTPUT); // dioda na większości płytek C3
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nPołączony z Wi-Fi");
webSocket.begin(serverIP, serverPort, "/");
webSocket.onEvent(onWebSocketEvent);
webSocket.setReconnectInterval(5000); // próbuj ponownie co 5s
}
void loop() {
webSocket.loop();
// wysyłamy coś co 3 sekundy
static unsigned long last = 0;
if (millis() - last > 3000) {
last = millis();
String msg = "Cześć serwer! Tu klient nr " + String(random(1,100));
webSocket.sendTXT(msg);
}
}Krok 4 – Działanie!
- Wgrywasz kod serwera na pierwszą płytkę
- Odczytujesz jej IP z monitora szeregowego
- W kodzie klienta wpisujesz to IP
- Wgrywasz kod klienta na drugą płytkę
- Otwierasz dwa monitory szeregowe i… magia!
Na serwerze widzisz: Klient 0 połączony! Odebrano od 0: Cześć serwer! Tu klient nr 47
A na kliencie: Odebrano: Serwer żyje! Czas: 42s Odebrano: Cześć serwer! Tu klient nr 47 (odbita wiadomość!)
Bonusik – jak zrobić to jeszcze ładniej
- Zamiast broadcast możesz wysyłać konkretnemu num (webSocket.sendTXT(num, tekst))
- Dodaj JSON – super łatwo parsować dane (biblioteka ArduinoJson)
- Zrób prosty panel webowy i podłącz przeglądarkę jako trzeciego klienta – działa identycznie!
Podsumowanie WebSockety na ESP32-C3 to jak espresso – małe, mocne i działa natychmiast. Zero MQTT, zero brokerów, zero problemów. Idealne kiedy chcesz szybkiej, lokalnej komunikacji między dwoma (lub więcej) urządzeniami.
A teraz idź, wgrywaj i baw się dobrze! Jak coś nie działa – pisz w komentarzu, razem ogarniemy.
73 i do następnego!
Ale o tym zadecyduje nasz ulubiony ciąg dalszy.
[nie sądzę by tak to chciał kontynuować nasz ulubiony ciąg dalszy ale bez wątpienia GROK zrobił to ciekawiej i bardziej w "moim stylu" i to bez pytania
chatgpt coś namieszał z kodem serwera u groka wygląda to jasno i oczywiście]
Brak komentarzy:
Prześlij komentarz