Sisukord:

ESP8266 otsene andmeside: 3 sammu
ESP8266 otsene andmeside: 3 sammu

Video: ESP8266 otsene andmeside: 3 sammu

Video: ESP8266 otsene andmeside: 3 sammu
Video: 5. М-оценки. Робастность. Эффективность 2024, November
Anonim
ESP8266 otsene andmeside
ESP8266 otsene andmeside

Sissejuhatus

Olles teinud mõningaid projekte Arduinose ja nRF24l01 moodulitega, mõtlesin, kas saaksin mõne vaeva kokku hoida, kasutades selle asemel ESP8266 moodulit. ESP8266 mooduli eeliseks on see, et see sisaldab pardal olevat mikrokontrollerit, seega pole vaja täiendavat Arduino plaati. Lisaks on ESP8266 mälumaht palju suurem ja kiiruse osas töötab ESP8266 maksimaalselt 160MHz Arduino 16MHz asemel. Muidugi on ka negatiivseid külgi.

ESP8266 töötab ainult 3,3 V toitel, sellel on vähem kontakte ja puuduvad Arduino toredad analoogsisendid (sellel on üks, kuid ainult 1,0 V ja mitte 3,3 V). Lisaks on Arduino + nRF24l01 jaoks palju rohkem koodinäiteid, siis ESP8266 puhul, eriti kui tegemist on otsese andmeedastusega.

Nii et projekti silmas pidades uurisin kiire ja kerge andmeedastuse teemat kahe ESP8266 vahel ilma igasuguse WWW- ja HTTP -kraamita.

Internetist näiteid otsides (suurem osa allolevast koodist valiti erinevatest kohtadest netist), tekkis mul palju küsimusi, kuidas rakendada otsest andmeedastust ilma toredate näideteta. Seal oli mõni näidiskood, kuid enamasti küsimusega, miks see ei töötanud.

Nii et pärast mõningast lugemist ja mõistmist püüdsin luua järgmised näited, mis võimaldavad kiiret ja lihtsat andmete edastamist kahe ESP8266 vahel.

1. samm: piirid ja taustad (TCP vs. UDP)

Sinna jõudmiseks tuleb nRF24l01 -ga võrreldes mõned piirid selgeks teha.

ESP8266 kasutamiseks Arduino keskkonnas on põhiteek ESP8266WiFi.h. Need võivad olla erinevad, kuid enamik näiteid kasutab ülalnimetatut. Seda kasutades peate oma suhtluse WiFi tasemele viima.

Seega peab suhtlemiseks olema vähemalt juurdepääsupunkt (AP) / server ja klient. AP annab võrgu nime ja IP -aadressid ning klient loob selle serveriga ühenduse.

Võrreldes nRF24l01, kus kood mõlemas otsas on enam -vähem sama (välja arvatud edastuskanalid), on ESP8266 kood põhimõtteliselt erinev, kuna üks on konfigureeritud AP -na ja teine kliendina.

Järgmine teema on see, et selle asemel, et lihtsalt saata mõni bait nRF24l01 -le, tuleb järgida ESP8266 edastusprotokolle.

Tavaliselt kasutatakse kahte protokolli: TCP ja UDP.

TCP (Transmission Control Protocol) on protokoll, mis võimaldab kadudeta edastamist serveri ja kliendi vahel. Protokoll sisaldab kadunud pakettide tuvastamiseks ja uuesti edastamiseks „käepigistusi” (palju lippe ja tunnustusi mõlema osapoole vahel) ning pakettide nummerdamist ja tuvastamist. Lisaks väldib kõigi nende käepigistuste kasutamine protokolli andmete kadumist paljude võrgus samaaegselt saadetavate pakettide tõttu. Andmepaketid ootavad, kuni neid saab vastu võtta.

UDP-l (User Datagram Protocol) puuduvad kõik käepigistused, pakettide nummerdamine ja uuesti edastamine. Selle üldkulud on seega väiksemad ja ühenduse hoidmiseks pole vaja kõiki käepigistusi. UDP sisaldab põhivigade tuvastamist, kuid ei paranda (rikutud pakett on lihtsalt maha langenud). Andmeid saadetakse teadmata, kas vastuvõttev pool võib andmeid vabalt vastu võtta. Samal ajal võivad mitu paketti kokku põrgata, kuna iga osapool saadab andmed alati, kui seda vajatakse. Kui jätate kõik käepigistused tegemata, on UDP -l veel üks tore funktsioon, mida nimetatakse „multicast” ja „broadcast”. Multisaate puhul saadetakse andmepaketid eelmääratud liikmete rühmale, ringhäälingu andmepaketid saadetakse kõigile ühendatud liikmetele. See vähendab märkimisväärselt andmeedastust juhul, kui voogusid võtavad vastu mitmed liikmed (nt saates videovoo mitmele vastuvõtjale või saates praeguse aja mitmele ühendatud seadmele).

Youtube'is on häid videoid, mis selgitavad seda veelgi paremini.

Seega on andmete saatmisel oluline teada oma vajadusi:

  • rikutud andmed, mitme kaaslase haldamine käepigistustega → TCP
  • reaalajas andmed, kiire ühendus → UDP

Alustasin kõigepealt TCP -põhise kommunikatsiooni rakendamisega (ühe serveri ja ühe kliendi vahel). Seda katsetades tekkis mul ülekandega probleeme. Alguses vahetati andmeid kiiresti, siis mõne aja pärast kiirus langes järsult. Jõudsin järeldusele, et see oli tüüpiline TCP -lähenemise probleem (mis oli vale!), Nii et muutusin seejärel UDP -l põhinevaks lahenduseks. Lõpuks lähenesin mõlemale tööle. Seega pakutakse mõlemat lahendust.

Allpool toodud visandid on TCP ja UDP jaoks ühised:

  • on sõltumatud olemasolevast WiFi -võrgust. Nii et see töötab kõikjal kaugel Internetist ja ühendatud ruuteritest.
  • saadavad ASCII andmeid jadamonitori kaudu printimiseks.
  • saadavad millis ()-funktsiooniga saadud andmeid, et analüüsida edastuskiirust.
  • ei testita mitme kliendi jaoks (kuna võrgu seadistamiseks on praegu riistvara)

Samm: riistvara

Riistvara
Riistvara
Riistvara
Riistvara
Riistvara
Riistvara
Riistvara
Riistvara

Kogu seadistuse testimiseks kasutasin kahte ESP8266 moodulit. Üks moodul on ESP-01 + USB-UART-adapter. Teine moodul on ESP-12 põhinev moodul, mis sisaldab USB-ühendust, pingeregulaatorit ja mõningaid lõbusaid asju, nagu lülitid, LDR ja mitmevärviline LED.

ESP-01 USB-UART-moodulit tuli veidi muuta, et seda saaks programmeerijana kasutada (jällegi Youtube, autor Csongor Varga).

Visandite käitamiseks peate installima teegid ESP8266 (nagu on kirjeldatud paljudes Interneti kohtades). Mõlemal juhul (TCP ja UDP) on serveri ja kliendi visand. Milline visand millisele moodulile laaditakse, pole oluline.

Tänuavaldused

Nagu mainitud, põhinevad visandid paljudel juppidel, mille leidsin veebist. Ma ei mäleta enam, kust ma midagi leidsin ja mis on algne kood või mida ma muutsin. Nii et ma tahtsin lihtsalt tänada suurt kogukonda üldiselt kõigi suurepäraste näidete avaldamise eest.

3. samm: visandid

Kood koosneb kahest visandist (nagu on selgitatud), serveri visandist ja kliendi visandist, nii TCP kui ka UDP jaoks.

Soovitan: