Cuprins:

ESP8266 Comunicare directă a datelor: 3 pași
ESP8266 Comunicare directă a datelor: 3 pași

Video: ESP8266 Comunicare directă a datelor: 3 pași

Video: ESP8266 Comunicare directă a datelor: 3 pași
Video: #7 Programarea panoului HMI ESP8266 Modbus RTU și OP320 2024, Iulie
Anonim
ESP8266 Comunicare directă a datelor
ESP8266 Comunicare directă a datelor

Introducere

În timp ce am făcut câteva proiecte cu module Arduinos și nRF24l01, mă întrebam dacă aș putea economisi ceva efort folosind în schimb un modul ESP8266. Avantajul modulului ESP8266 este că acesta conține un microcontroler la bord, deci nu este necesară nicio placă Arduino suplimentară. În plus, dimensiunea memoriei ESP8266 este mult mai mare și, în ceea ce privește viteza, ESP8266 rulează la maxim 160 MHz în loc de 16 MHz Arduino. Desigur, există unele laturi negative.

ESP8266 funcționează numai pe 3.3V, are mai puțini pini și îi lipsesc intrările analogice frumoase pe care le are Arduino (are unul, dar numai pentru 1.0V și nu pentru 3.3V). În plus, există multe alte exemple de cod pentru Arduino + nRF24l01, apoi există pentru ESP8266, mai ales când vine vorba de transferul direct de date.

Așadar, având în vedere un proiect, m-am uitat la subiectul transferului de date rapid și ușor între două ESP8266, fără toate lucrurile WWW și

În timp ce căutam exemple pe internet (majoritatea codului de mai jos au fost alese de pe net în diferite locuri) am întâlnit multe întrebări despre cum să implementăm un transfer direct de date fără frumoasele exemple „do it like that”. A existat un exemplu de cod, dar mai ales cu întrebarea de ce nu a funcționat.

Așadar, după câteva lecturi și încercarea de a înțelege, am creat exemplele de mai jos care permit transferul rapid și simplu de date între două ESP8266.

Pasul 1: Limite și medii (TCP vs. UDP)

Pentru a ajunge acolo, unele limite trebuie clarificate în comparație cu nRF24l01.

Pentru a utiliza ESP8266 în mediul Arduino, biblioteca de bază de utilizat este ESP8266WiFi.h. Ar putea fi diferite, dar majoritatea exemplelor folosesc cele menționate mai sus. Când utilizați acest lucru, trebuie să vă comunicați la nivelul WiFi.

Deci, pentru a comunica trebuie să existe cel puțin un punct de acces (AP) / server și un client. AP furnizează numele rețelei și adresele IP, iar clientul se va conecta la acest server.

Deci, comparat cu nRF24l01, unde codul la ambele capete este mai mult sau mai puțin același (cu excepția canalelor de transmisie), codul ESP8266 este fundamental diferit, deoarece unul este configurat ca AP și celălalt ca client.

Următorul subiect este că, în loc să trimiți doar niște octeți către nRF24l01, trebuie să fie respectate protocoalele de transfer ESP8266.

Există două protocoale utilizate frecvent: TCP și UDP.

TCP (Transmission Control Protocol) este un protocol care permite o transmisie fără pierderi între un server și un client. Protocolul încorporează „strângeri de mână” (o mulțime de steaguri și acknoledges trimise între ambele părți) și numerotarea și detectarea pachetelor pentru a identifica și retransmite pachetele pierdute. În plus, prin utilizarea tuturor acestor strângeri de mână protocolul previne pierderea datelor din cauza multor pachete trimise în același timp în rețea. Pachetele de date așteaptă până când pot fi primite.

UDP (User Datagram Protocol) nu are toate strângerile de mână, numerotarea pachetelor și retransmiterea. Prin urmare, cheltuielile sale sunt mai mici și nu este nevoie ca toate strângerile de mână să mențină o conexiune. UDP încorporează câteva detecții de bază ale erorilor, dar nu există nicio corecție (pachetul corupt este abandonat). Datele sunt trimise, fără știrea dacă partea destinatară este liberă să primească datele. În același timp, mai multe pachete se pot ciocni, deoarece fiecare parte trimite datele ori de câte ori este nevoie. Prin omiterea tuturor strângerilor de mână, există o caracteristică suplimentară a UDP numită „multicast” și „broadcast”. În cazul „multicast” pachetele de date sunt trimise unui grup predefinit de membri, într-un „difuzat” pachetele de date sunt trimise tuturor membrilor conectați. Aceasta reduce considerabil transferul de date în cazul fluxurilor care urmează să fie primite de mai mulți membri (de exemplu, prin trimiterea unui flux video către mai multe receptoare sau prin trimiterea orei curente către mai multe dispozitive conectate).

Există câteva videoclipuri bune pe Youtube care o explică și mai bine.

Deci, atunci când trimiteți date, este important să vă cunoașteți nevoile:

  • date necorupte, gestionarea mai multor colegi prin strângeri de mână → TCP
  • date în timp real, conexiune rapidă → UDP

Am început mai întâi cu implementarea unei comunicații bazate pe TCP (între un server și un client). În timp ce îl testam, am avut probleme de blocare în transmisie. La început, datele au fost schimbate rapid, apoi după un timp viteza a scăzut dramatic. Am ajuns la concluzia că aceasta era o problemă tipică a abordării TCP (care era greșită!), Așa că apoi am trecut la o soluție bazată pe UDP. În cele din urmă, am primit amândoi abordarea lucrând. Deci ambele soluții vor fi furnizate.

Schițele de mai jos au în comun pentru TCP și UDP că:

  • sunt independente de orice rețea WiFi existentă. Deci, va funcționa oriunde departe de internet și de routerele conectate.
  • trimit date ASCII pentru a fi tipărite prin intermediul monitorului serial.
  • trimit date obținute de funcția millis (), pentru a analiza viteza transmisiei.
  • nu sunt testate pentru mai mulți clienți (datorită faptului că aveți hardware pentru a configura rețeaua chiar acum)

Pasul 2: Hardware

Hardware
Hardware
Hardware
Hardware
Hardware
Hardware
Hardware
Hardware

Pentru a testa întregul set, am folosit două module ESP8266. Un modul este un adaptor ESP-01 + USB-la-UART. Celălalt modul este un modul bazat pe ESP-12 care încorporează conexiunea USB, regulatorul de tensiune și câteva elemente distractive, cum ar fi comutatoarele, LDR și LED-ul multicolor.

Modulul USB-la-UART pentru ESP-01 trebuia modificat puțin pentru a putea fi folosit ca programator (din nou Youtube de Csongor Varga).

Pentru a rula schițele, trebuie să instalați bibliotecile ESP8266 (așa cum este descris în multe locuri din internet). În ambele cazuri (TCP și UDP) există câte o schiță de server și client. Ce schiță este încărcată în care modul nu contează.

Mulțumiri

Așa cum am menționat, schițele se bazează pe mulți biți pe care i-am găsit pe web. Nu-mi mai amintesc unde am găsit ce și ce este codul original sau ce am schimbat. Așa că am vrut doar să mulțumesc marilor comunități în general pentru publicarea tuturor exemplelor extraordinare.

Pasul 3: Schițele

Codul constă din două schițe fiecare (după cum se explică), o schiță de server și o schiță de client, pentru TCP și UDP fiecare.

Recomandat: