Turinys:

ESP8266 tiesioginis duomenų perdavimas: 3 žingsniai
ESP8266 tiesioginis duomenų perdavimas: 3 žingsniai

Video: ESP8266 tiesioginis duomenų perdavimas: 3 žingsniai

Video: ESP8266 tiesioginis duomenų perdavimas: 3 žingsniai
Video: Как использовать SSD1306 128x32 OLED-дисплей I2C с кодом Arduino 2024, Lapkritis
Anonim
ESP8266 tiesioginis duomenų perdavimas
ESP8266 tiesioginis duomenų perdavimas

Įvadas

Atlikęs kai kuriuos projektus su „Arduinos“ir „nRF24l01“moduliais, man buvo įdomu, ar galėčiau sutaupyti šiek tiek pastangų, naudodamas ESP8266 modulį. ESP8266 modulio pranašumas yra tas, kad jame yra mikrovaldiklis, todėl papildomos „Arduino“plokštės nereikia. Be to, ESP8266 atminties dydis yra daug didesnis, o atsižvelgiant į greitį, ESP8266 veikia ne daugiau kaip 160 MHz, o ne „Arduino“16 MHz. Žinoma, yra ir neigiamų pusių.

ESP8266 veikia tik 3,3 V, turi mažiau kaiščių ir trūksta gražių analoginių įėjimų, kuriuos turi „Arduino“(jis turi vieną, bet tik 1,0 V, o ne 3,3 V). Be to, yra daug daugiau „Arduino + nRF24l01“kodo pavyzdžių, o ne ESP8266, ypač kai kalbama apie tiesioginį duomenų perdavimą.

Taigi, turėdamas omenyje projektą, pažvelgiau į greito ir lengvo duomenų perdavimo tarp dviejų ESP8266 temą be visų WWW ir HTTP dalykų.

Ieškodamas pavyzdžių internete (dauguma žemiau pateikto kodo buvo paimta iš tinklo įvairiose vietose) susidūriau su daugybe klausimų, kaip įgyvendinti tiesioginį duomenų perdavimą be gražių „daryk taip“pavyzdžių. Buvo tam tikras kodo pavyzdys, bet dažniausiai kyla klausimas, kodėl jis neveikė.

Taigi, šiek tiek perskaitęs ir bandęs suprasti, sukūriau žemiau pateiktus pavyzdžius, kurie leidžia greitai ir paprastai perduoti duomenis tarp dviejų ESP8266.

1 veiksmas: ribos ir pagrindai (TCP prieš UDP)

Norint ten patekti, reikia išsiaiškinti kai kurias ribas, palyginti su nRF24l01.

Jei norite naudoti ESP8266 „Arduino“aplinkoje, pagrindinė biblioteka yra ESP8266WiFi.h. Jie gali būti skirtingi, tačiau daugelyje pavyzdžių naudojami pirmiau minėti dalykai. Kai naudojate tai, turite pasiekti ryšį iki „WiFi“lygio.

Taigi, norint bendrauti, turi būti bent prieigos taškas (AP) / serveris ir klientas. AP nurodo tinklo pavadinimą ir IP adresus, o klientas prisijungs prie šio serverio.

Taigi, palyginus nRF24l01, kur kodas abiejuose galuose yra daugmaž vienodas (išskyrus perdavimo kanalus), ESP8266 kodas iš esmės skiriasi, nes vienas yra sukonfigūruotas kaip AP, o kitas - kaip klientas.

Kita tema yra ta, kad reikia ne tik siųsti kai kuriuos baitus į nRF24l01, bet ir laikytis ESP8266 perdavimo protokolų.

Yra du dažniausiai naudojami protokolai: TCP ir UDP.

TCP (perdavimo valdymo protokolas) yra protokolas, leidžiantis be nuostolių perduoti duomenis tarp serverio ir kliento. Į protokolą įeina „rankos paspaudimai“(daug vėliavų ir patvirtinimų, siunčiamų tarp abiejų šalių) ir paketų numeracija bei aptikimas, siekiant nustatyti ir pakartotinai perduoti prarastus paketus. Be to, naudojant visus šiuos rankų paspaudimus, protokolas apsaugo nuo duomenų praradimo dėl daugelio tuo pačiu metu tinkle siunčiamų paketų. Duomenų paketai laukia, kol juos bus galima gauti.

UDP (User Datagram Protocol) trūksta visų rankų paspaudimų, paketų numeracijos ir pakartotinio perdavimo. Todėl jo pridėtinės išlaidos yra mažesnės ir nereikia visų rankų paspaudimų palaikyti ryšį. UDP apima kai kuriuos pagrindinius klaidų aptikimo būdus, tačiau jų nepataiso (sugadintas paketas tiesiog numestas). Duomenys siunčiami nežinant, ar gaunančioji šalis gali laisvai gauti duomenis. Tuo pačiu metu gali susidurti keli paketai, nes kiekviena šalis siunčia duomenis, kai to reikia. Praleidus visus rankų paspaudimus, yra dar viena puiki UDP funkcija, vadinama „multicast“ir „broadcast“. „Multicast“atveju duomenų paketai siunčiami iš anksto apibrėžtai narių grupei, o „transliacijos“duomenų paketai siunčiami visiems prisijungusiems nariams. Tai žymiai sumažina duomenų perdavimą, jei srautus turi priimti keli nariai (pvz., Siunčiant vaizdo įrašą į kelis imtuvus arba siunčiant dabartinį laiką į kelis prijungtus įrenginius).

„Youtube“yra keletas gerų vaizdo įrašų, paaiškinančių tai dar geriau.

Taigi siunčiant duomenis svarbu žinoti savo poreikius:

  • nesugadinti duomenys, kelių bendraamžių valdymas rankos paspaudimais → TCP
  • realaus laiko duomenys, greitas ryšys → UDP

Pirmiausia pradėjau diegti TCP pagrįstą komunikaciją (tarp vieno serverio ir vieno kliento). Bandydamas jį turėjau stabdymo problemų perduodant. Iš pradžių buvo greitai keičiamasi duomenimis, o po kurio laiko greitis smarkiai sumažėjo. Aš padariau išvadą, kad tai buvo tipiška TCP metodo problema (kuri buvo neteisinga!), Todėl pakeičiau sprendimą, pagrįstą UDP. Pagaliau abu kreipiausi į darbą. Taigi abu sprendimai bus pateikti.

Toliau pateikti TCP ir UDP eskizai yra bendri:

  • yra nepriklausomi nuo esamo „WiFi“tinklo. Taigi jis veiks bet kur toli nuo interneto ir prijungtų maršrutizatorių.
  • siunčia ASCII duomenis spausdinti per nuoseklųjį monitorių.
  • siunčia duomenis, gautus naudojant milis () funkciją, analizuoti perdavimo greitį.
  • nėra išbandyti keliems klientams (dėl to, kad šiuo metu tinklui nustatyti reikia aparatūros)

2 žingsnis: Aparatūra

Techninė įranga
Techninė įranga
Techninė įranga
Techninė įranga
Techninė įranga
Techninė įranga
Techninė įranga
Techninė įranga

Norėdami išbandyti visą sąranką, naudoju du ESP8266 modulius. Vienas modulis yra ESP-01 + USB-UART adapteris. Kitas modulis yra ESP-12 pagrįstas modulis, kuriame yra USB jungtis, įtampos reguliatorius ir keletas įdomių dalykų, tokių kaip jungikliai, LDR ir daugiaspalvis šviesos diodas.

ESP-01 USB-UART modulį reikėjo šiek tiek modifikuoti, kad būtų galima jį naudoti kaip programuotoją (dar kartą „Csongor Varga“„Youtube“).

Norėdami paleisti eskizus, turite įdiegti ESP8266 bibliotekas (kaip aprašyta daugelyje interneto vietų). Abiem atvejais (TCP ir UDP) yra serverio ir kliento eskizas. Kuris eskizas įkeliamas į kurį modulį, nesvarbu.

Padėkos

Kaip minėta, eskizai yra pagrįsti daugybe bitų, kuriuos radau internete. Jau nebeprisimenu, kur ką radau, kas yra originalus kodas ar ką pakeičiau. Taigi aš tiesiog norėjau padėkoti didelei bendruomenei apskritai už puikių pavyzdžių paskelbimą.

3 žingsnis: eskizai

Kodą sudaro du eskizai (kaip paaiškinta), serverio eskizas ir kliento eskizas, skirti kiekvienam TCP ir UDP.

Rekomenduojamas: