Több ESP8266 modul közti kommunikáció

ESP8266, ESP32 chipek és az ESP-xx modulok. Programozási nyelvek, trükkök, hardware tippek.
Panhard
Újonc
Újonc
Hozzászólások: 11
Csatlakozott: 2016. július 17. vasárnap, 13:50

Több ESP8266 modul közti kommunikáció

Hozzászólás Szerző: Panhard »

Sziasztok! Meg lehet azt oldani, hogy 5 modul kommunikáljon egymással? Akár egy routeren keresztül, akár közvetlenül egymással?
A lényeg az lenne, hogy lenne egy master, ami adatokat küldene a többinek, a többi ezt feldolgozná, és végrehajtaná.
Van olyan firmware, ami alapból képes erre, vagy tudja a gyári is? Minden ESP modulon lenne egy ATMEGA328P, az küldené az AT parancsokat. A masternek lenne 5 bemenete, és 5 kimenete. A többi slave-en pedig 1-1 ki/bemenet. Reléket kellene kapcsolni távolról, és visszajelezni az állapotukat.
A WiFi both mód az jó lenne erre? Az olyan, hogy bárki csatlakozhat bárkire, és egymáson keresztül is képesek kommunikálni?
Előre is köszönöm a válaszokat!
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

Re: Több ESP8266 modul közti kommunikáció

Hozzászólás Szerző: SanyiSay »

Üdv!

Szerintem meg lehet oldani. Ez a jó hír, a rossz hogy eddig senki nem osztott meg efféle megoldást.

Egy sima relé kapcsolgatsához szerintem kár lenne az ESP mellé egyéb AVR-t kötni. Ennél jóval többre is képes önmagában, nem beszélve arról hogy komplett kész táppal, relével ellátott, dobozolt ESP Sonoff egységeket lehet kapni, mondhatni anyag áron. Programozni meg simán lehet arduinoval. Persze ez is egy újabb tanulni való.

Ha ragaszkodsz az AVR+ESP pároshoz AT parancsokat használva és nem érkezik jobb tipp akkor én elindulnék a szerver és kliens mintaprogramoktól.
itt is találsz ilyent.
http://www.tavir.hu/taxonomy/term/134
Én legalább is azokkal kezdetem, HTML oldal készítés a vezérléshez, aztán jött az ajax és hát onnan már csak egy lépés volt a két ESP közötti kommunikáció.

Arról nem tudok, hogy ha a routert egy ESP-vel helyettesíted akkor mennyi egység tud hozzá csatlakozni egyszerre.

Nálam is az általad felvázolt módon működnek az ESP-egységek, csak én nem használok AVR-t,(még az ESP képességeit sem használom ki lakásvezérlés közben) valamint kizárólag routeren keresztül kommunikálnak egyenlőre.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Több ESP8266 modul közti kommunikáció

Hozzászólás Szerző: Robert »

1 ESP-re egyidejűleg 4+1 socket lehet. De a Router egészségesebb.
http://www.tavir.hu - a gazda :)
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

Re: Több ESP8266 modul közti kommunikáció

Hozzászólás Szerző: SanyiSay »

Én a legkisebb helység foglaltság jelzőjét oldottam meg 2db esp-vel, annál fordulhat elő egyedül, hogy jó lenne ha kommunikálnának éjjel is amikor a router is pihen. Úgy hogy én is látok ebben az üzemmódban fantáziát. :)

Még a 4+1 be is simán beleférek, bármi is legyen az a +1.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Több ESP8266 modul közti kommunikáció

Hozzászólás Szerző: Robert »

Szerverként 4 klienst tudsz kiszolgálni, ha routeren át építetted ki a hálót. Ha access point alapú, akkor egyidejűleg 1 kapcsolatot tud kiszolgálni.
http://www.tavir.hu - a gazda :)
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

Re: Több ESP8266 modul közti kommunikáció

Hozzászólás Szerző: SanyiSay »

Köszönöm a pontosítást.

Websocket használatánál a 4-et olvastam, de hogy AP módban csak 1 készülék csatlakozhat, az bizony nem valami sok. Akkor ez a mód valóban csak arra van, hogy elvégezhessük a wifi csatlakozási beállításokat.
Panhard
Újonc
Újonc
Hozzászólások: 11
Csatlakozott: 2016. július 17. vasárnap, 13:50

Re: Több ESP8266 modul közti kommunikáció

Hozzászólás Szerző: Panhard »

Otthon én is használok már ilyen modulokat, 3-at, amikre BMP280 van rákötve. És még kettőt, amik az Openweathermap.com-ról töltik le az időjárás adatokat, amiket Arduino Due dolgoz fel, és kijelzőn megjelenít.
De azok mind a routerre csatlakoznak, és egy MySQL adatbázisba küldik az adatokat.
Azokra a modulokra EspEasy firmware-t töltöttem. Először Domoticz programba küldték az adatokat, de aztán rájöttem, hogy semmit nem ér. Akkor az EspEasy firmware-t módosítottam kicsit, hogy képes legyen SQL-be is feltölteni.Azóta oda küldöm. Ott azt csinálok az adatokkat amit akarok.
Visszatérve a témára jó az a megoldás is, hogy a routerre csatlakozik mind, attól DHCP-vel ugyanazt az IP-t meg tudják kapni.
De akkor is a modulokat servernek kell beállítani, és egyet kell kliensnek? A kliens létrehozza a kapcsolatot egyszerre csak eggyel, elküldi neki az utasítást, utána bontja a kapcsolatot. Ez így működhet?
Esetleg UDP kapcsolattal is működhet a dolog? Azt nem ismerem.
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

Re: Több ESP8266 modul közti kommunikáció

Hozzászólás Szerző: SanyiSay »

Igen nálam így működik ahogy írtad. Minden ESP szerverként működik, és az adatcsere idejére kliens is lesz. Aztán ha kész akkor kapcsolat bontás. Router DHCP nem feltétlen kell a fix IP hez mert be lehet állítani ezt az ESP-n is, legalább is ESP Arduino alatt.
UDP-ről semmit nem tudok.
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: Több ESP8266 modul közti kommunikáció

Hozzászólás Szerző: csabeszq »

Az Arduino el van fuserálva, amiatt van ez a hiper gányolás.

A normális módszer, hogy az ESP-1 a 10001-es porton hallgat, az ESP-2 a 10002-es porton hallgat,... az ESP-5 a 10005-as porton hallgat.
Amikor dumálnak, akkor a megfelelő porthoz kapcsolódnak.

Az ESP IOT SDK alatt annyi portot nyitsz, amennyit nem szégyelsz, egyszerre lehetsz kliens is és szerver is. Teljesen olyan, mint egy valódi számítógép.

Az Arduino meg olyan, amilyen. Nem lehetsz egyszerre kliens és szerver is, pedig a hardver egyáltalán nem korlátoz ebben az esetben.
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

Re: Több ESP8266 modul közti kommunikáció

Hozzászólás Szerző: SanyiSay »

Nem világos ám számomra mi a baj.
Az a probléma hogy egyszerre csak egy szerverrel tud kommunikálni az ESP Arduino, kliens módban?
Vagy az ESP-n futtatott szerver leáll arra az időre a még kliensként csatlakozol valamihez?

Ami viszont még érdekelne hogy nálam minden esp ugyanazon a porton van és így kommunikálgatnak egymással és egyéb netes szerverekkel. Miért jobb ha külön porton vannak?

Mondjuk olyant problémám van hogy első, vagy első pár üzenetküldésnél néha lassan veszik fel a kapcsolatot egymással, aztán a beáll a kapcsolat. Én arra gondoltam hogy megpingelem az összes modult mondjuk a kezelőkonzol feléledésekor, vagy bizonyos időközönként, nehogy lankadjon a figyelmük.
Lehet ostoba egy ötlet. :)
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

Re: Több ESP8266 modul közti kommunikáció

Hozzászólás Szerző: SanyiSay »

Na volt egy kis időm. Átállítottam itthon 2 esp egységet. Saját portot kapott, meg persze vele együtt a vezérlő konzolokat is megdolgoztam, hogy elérjék az új porton az esp-ket. (ESP-Nextion, valamint HTML)
Nagy változást nem tapasztaltam, dolgozik mint eddig, esp-k is kommunikálnak ugyanúgy egymással, pont mindegy neki milyen porton van. Mondjuk ezt vártam is, ha már be lehet állítani kliensmódban szerverhez tartozó portot, akkor miért ne működne.
Annyiban mindenképp más hogy így már nem csak IP címet kell menteni, de a portal is foglalkozni kell.
Ebből következtetve futott át fejemen a gondolat, hogy....
,ha több FTP szerverem fut itthon, ESP8266FtpServer.h esetén ez nem ritka jelenség, akkor ott a 21 portal mi a helyzet?
Mondjuk az itthon lévő 2db rendes nagy háttértáras, fájltárolós, FTP szerver sem hisztizett még hogy mindketten 21-es prtot használják.

Tesztelgetem aztán kiderül hogy megéri e a macerát a külön port használata, minden ESP egységnél.
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

Re: Több ESP8266 modul közti kommunikáció

Hozzászólás Szerző: SanyiSay »

Lehet mégis csak jók ezek a külön portok. Minden esp külön portot kapott, és ritkábbra vettem a wifi ellenőrzési időzítést, végre azt érzem hogy gördülékeny az ESP kommunikáció. Mondjuk így már nem is annyira akarom lecserélni az ESP modulokat RTL-re. :)
Az még ugyan jó lenne hogy miközben vár mondjuk a Google szerver válaszára közben végezhetné a dolgát, de lehet itt jönnek elő a korlátai vagy az enyémek. :)
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: Több ESP8266 modul közti kommunikáció

Hozzászólás Szerző: csabeszq »

Nem az ESP korlátai jönnek elő, hanem az idióta Arduino-s implementációnak.

Balfékek, most írom újra a WiFi klienst, hogy ne blokkoljon.
Simán működnie kellene blokkolás nélkül a kliensnek, csak hát ahhoz IQ is kellett volna a fejlesztő részéről.

A szerver rendesen működik, nem blokkol. A WiFiClient kód egy az egyben mehet a kukába. Annyit ér.
Maga a chip képes párhuzamosan TCP-n kommunikálni. Az espconn API-t megnézheted (espconn.h).
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: Több ESP8266 modul közti kommunikáció

Hozzászólás Szerző: csabeszq »

Telepíted az ESPAsyncTCP-t.

Aszinkron kliens (összecsapva, valószínűleg át kell gyúrnod). A disconnect csak 5 perc után jön, szóval ha megjött minden adat close()-t hívhatsz.

Kód: Egész kijelölése

#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include "ESPAsyncTCP.h"

const char* ssid = "...";
const char* password = "...";

AsyncClient asyncClient;

void connectCallback(void*arg, AsyncClient * client)
{
  Serial.println("Connected!\n");

  if( client->write("GET / HTTP/1.1\r\nHost: www.google.com\r\n\r\n") <= 0 )
    Serial.println("Failed to send data!");
}

void dataCallback(void *arg, AsyncClient * client, void *data, size_t len)
{
  char buf[len+1];
  buf[len] = 0;
  memcpy(buf, data, len);
  Serial.print(buf);
}

void disconnectCallback(void*arg, AsyncClient * client)
{
  Serial.println("\n\nDisconnected!\n");
}

void setup(){
  Serial.begin(115200);
  Serial.println("\nStarted\n");
  
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  if (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.printf("WiFi Failed!\n");
    return;
  }

  asyncClient.onConnect(connectCallback);
  asyncClient.onData(dataCallback);
  asyncClient.onDisconnect(disconnectCallback);
  
  if(!asyncClient.connect("www.google.com", 80)){
    Serial.println("Connect Failed");
    return;
  }
}

void loop(){
}
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

Re: Több ESP8266 modul közti kommunikáció

Hozzászólás Szerző: SanyiSay »

Belenézni nem igen tudok a dolgok belsejébe mert ahhoz még suta vagyok, de az efféle kész megoldásokkal már el- elboldogulok.
Nekem a google felé az ssl kapcsolat kell, de ahogy nézem ez is megoldható.
Hétvégén nem fogok unatkozni. :)
Köszönöm a tippet.
Ha megy a dolog, beindul a fantázia és megint módosíthatom az összes ESP-t itthon. Még szerencse hogy nincs túl sok beépítve. :)
Válasz küldése