Sadržaj:

ESP8266 Izravna komunikacija podacima: 3 koraka
ESP8266 Izravna komunikacija podacima: 3 koraka

Video: ESP8266 Izravna komunikacija podacima: 3 koraka

Video: ESP8266 Izravna komunikacija podacima: 3 koraka
Video: ESP8266 ESP01 WI-FI-UART | Программирование LDmicro-Roboremo 2024, Studeni
Anonim
ESP8266 Izravna komunikacija podacima
ESP8266 Izravna komunikacija podacima

Uvod

Dok sam radio neke projekte s Arduinos i nRF24l01 modulima, pitao sam se mogu li uštedjeti malo truda koristeći umjesto toga ESP8266 modul. Prednost modula ESP8266 je u tome što sadrži mikro kontroler na ploči, pa nije potrebna dodatna Arduino ploča. Osim toga, veličina memorije ESP8266 je mnogo veća, a što se tiče brzine, ESP8266 radi na maksimalnih 160 MHz umjesto Arduinovih 16 MHz. Naravno, postoje i neke negativne strane.

ESP8266 radi samo na 3.3V, ima manje pinova i nedostaju mu lijepi analogni ulazi koje ima Arduino (ima jedan, ali samo za 1.0V, a ne za 3.3V). Osim toga, postoji još mnogo primjera koda za Arduino + nRF24l01 nego za ESP8266, posebno kada je u pitanju izravan prijenos podataka.

Pa sam s obzirom na projekt pogledao temu brzog i laganog prijenosa podataka između dva ESP8266 bez svih WWW i HTTP stvari.

Dok sam pretraživao internet za primjerima (većina donjeg koda odabrana je s interneta na raznim mjestima) naišao sam na mnoga pitanja kako implementirati izravan prijenos podataka bez lijepih primjera "uradi to tako". Postojao je neki primjer koda, ali uglavnom s pitanjem zašto ne radi.

Stoga sam nakon čitanja i pokušaja razumijevanja stvorio donje primjere koji omogućuju brz i jednostavan prijenos podataka između dva ESP8266.

Korak 1: Granice i pozadina (TCP vs. UDP)

Da bi se do tamo došlo, neke se granice moraju pojasniti u usporedbi s nRF24l01.

Za korištenje ESP8266 unutar Arduino okruženja, osnovna knjižnica za korištenje je ESP8266WiFi.h. Mogu biti različiti, ali većina primjera koristi spomenuto na. Kad koristite ovo, morate svoju komunikaciju dovesti na razinu WiFi.

Dakle, za komunikaciju moraju postojati barem pristupna točka (AP) / poslužitelj i klijent. AP pruža naziv mreže i IP adrese, a klijent će se povezati s ovim poslužiteljem.

U usporedbi s nRF24l01, gdje je kôd na oba kraja manje -više isti (osim kanala prijenosa), kod ESP8266 je bitno drugačiji, jer je jedan konfiguriran kao AP, a drugi kao klijent.

Sljedeća tema je da umjesto da samo pošaljete nekoliko bajtova na nRF24l01, za ESP8266 morate poštivati protokole prijenosa.

Postoje dva uobičajena protokola: TCP i UDP.

TCP (Transmission Control Protocol) je protokol koji omogućuje prijenos bez gubitka između poslužitelja i klijenta. Protokol uključuje „rukovanje“(puno zastavica i priznanja poslanih između obje strane) te numeriranje i otkrivanje paketa radi identifikacije i ponovnog prijenosa izgubljenih paketa. Osim toga, korištenjem svih ovih rukovanja protokol sprječava gubitak podataka zbog mnogih paketa poslanih istovremeno u mreži. Paketi podataka čekaju dok se ne prime.

UDP-u (User Datagram Protocol) nedostaju sva rukovanja, numeriranje paketa i ponovni prijenos. Njegovi su režijski troškovi stoga manji i nema potrebe za svim rukovanjima radi održavanja veze. UDP uključuje neke osnovne detekcije pogrešaka, ali bez ispravljanja (oštećeni paket se samo ispušta). Podaci se šalju, bez znanja, ako je primateljica slobodna primiti podatke. Istodobno se može sudariti više paketa jer svaka strana šalje podatke kad god je to potrebno. Izostavljanjem svih rukovanja, postoji jedna dodatna lijepa značajka UDP -a koja se naziva "multicast" i "broadcast". U slučaju "multicast" paketi podataka šalju se unaprijed definiranoj skupini članova, u "broadcast" paketima podataka šalju se svi povezani članovi. Time se znatno smanjuje prijenos podataka u slučaju tokova koje prima više članova (npr. Slanjem video feeda na više prijemnika ili slanjem trenutnog vremena na više povezanih uređaja).

Na Youtubeu ima dobrih videa koji to još bolje objašnjavaju.

Stoga je prilikom slanja podataka važno znati svoje potrebe:

  • neiskvareni podaci, upravljanje više kolega rukovanjem → TCP
  • podaci u stvarnom vremenu, brza veza → UDP

Prvo sam započeo s implementacijom TCP komunikacije (između jednog poslužitelja i jednog klijenta). Tijekom testiranja imao sam problema sa zastojem u prijenosu. U početku su se podaci razmjenjivali brzo, a zatim je nakon nekog vremena brzina dramatično pala. Zaključio sam da je to tipičan problem TCP pristupa (što je bilo pogrešno!), Pa sam promijenio rješenje na temelju UDP -a. Konačno sam oboje pristupila poslu. Tako će biti ponuđeno oba rješenja.

Skice u nastavku za TCP i UDP imaju zajedničko sljedeće:

  • neovisni su o bilo kojoj postojećoj WiFi mreži. Tako će raditi bilo gdje daleko od interneta i povezanih usmjerivača.
  • šalju ASCII podatke za ispis putem serijskog monitora.
  • šalju podatke dobivene funkcijom millis ()-za analizu brzine prijenosa.
  • nisu testirani za više klijenata (zbog toga što trenutno imaju hardver za postavljanje mreže)

Korak 2: Hardver

Hardver
Hardver
Hardver
Hardver
Hardver
Hardver
Hardver
Hardver

Za testiranje cijelog skupa koristio sam dva ESP8266 modula. Jedan modul je adapter ESP-01 + USB-to-UART. Drugi modul je modul temeljen na ESP-12 koji uključuje USB vezu, regulator napona i neke zabavne stvari poput prekidača, LDR-a i LED u više boja.

Modul USB-to-UART za ESP-01 morao je biti malo izmijenjen kako bi se mogao koristiti kao programer (opet Youtube autora Csongor Varga).

Da biste pokrenuli skice, morate instalirati knjižnice ESP8266 (kako je opisano na mnogim mjestima na internetu). U oba slučaja (TCP i UDP) postoji skica poslužitelja i klijenta. Koja skica je učitana na koji modul nije važno.

Zahvalnice

Kao što je spomenuto, skice se temelje na mnogim dijelovima koje sam pronašao na webu. Ne sjećam se više gdje sam što našao, što je izvorni kod ili što sam promijenio. Stoga sam samo želio zahvaliti velikoj zajednici općenito na objavljivanju svih sjajnih primjera.

Korak 3: Skice

Kôd se sastoji od dvije skice (kako je objašnjeno), skice poslužitelja i skice klijenta, za TCP i UDP.

Preporučeni: