Sisällysluettelo:

ESP8266 Suora tiedonsiirto: 3 vaihetta
ESP8266 Suora tiedonsiirto: 3 vaihetta

Video: ESP8266 Suora tiedonsiirto: 3 vaihetta

Video: ESP8266 Suora tiedonsiirto: 3 vaihetta
Video: Генератор || ESP8266 Лестничная логика FLProg 2024, Heinäkuu
Anonim
ESP8266 Suora tiedonsiirto
ESP8266 Suora tiedonsiirto

Johdanto

Tehtyäni joitain projekteja Arduinos- ja nRF24l01 -moduuleilla mietin, voisinko säästää vaivaa käyttämällä ESP8266 -moduulia. ESP8266 -moduulin etuna on, että siinä on mikro -ohjain, joten Arduino -korttia ei tarvita. Lisäksi ESP8266: n muistikoko on paljon suurempi ja nopeuden suhteen ESP8266 toimii enintään 160 MHz: llä Arduinon 16 MHz: n sijasta. Toki negatiivisiakin puolia on.

ESP8266 toimii vain 3,3 V: lla, siinä on vähemmän nastoja ja siitä puuttuu Arduinon mukavat analogiset tulot (siinä on yksi, mutta vain 1,0 V eikä 3,3 V). Lisäksi Arduino + nRF24l01: lle on paljon enemmän koodiesimerkkejä kuin ESP8266: lle, varsinkin kun kyse on suorasta tiedonsiirrosta.

Joten projektia ajatellen tutkin aihetta nopeasta ja kevyestä tiedonsiirrosta kahden ESP8266: n välillä ilman kaikkea WWW- ja HTTP -tavaraa.

Etsiessäni esimerkkejä Internetistä (suurin osa alla olevasta koodista on poimittu verkosta eri paikoista) törmäsin moniin kysymyksiin, kuinka suora tiedonsiirto voidaan toteuttaa ilman hienoja "tee se näin" -esimerkkejä. Siinä oli esimerkki koodi, mutta enimmäkseen kysymys, miksi se ei toiminut.

Joten lukemisen ja ymmärtämisen yrittämisen jälkeen loin alla olevat esimerkit, jotka mahdollistavat nopean ja yksinkertaisen tiedonsiirron kahden ESP8266: n välillä.

Vaihe 1: Rajat ja taustat (TCP vs. UDP)

Sinne pääsemiseksi joitakin rajoja on selvennettävä verrattuna nRF24l01: een.

ESP8266: n käyttämiseksi Arduino -ympäristössä peruskirjasto on ESP8266WiFi.h. Ne voivat olla erilaisia, mutta useimmat esimerkit käyttävät edellä mainittuja. Kun käytät tätä, sinun on saatava viestintä WiFi -tasolle.

Joten kommunikointiin tarvitaan ainakin tukiasema (AP) / palvelin ja asiakas. Tukiasema antaa verkon nimen ja IP -osoitteet, ja asiakas muodostaa yhteyden tähän palvelimeen.

Joten verrattuna nRF24l01: een, jossa koodi molemmissa päissä on suunnilleen sama (lähetyskanavia lukuun ottamatta), ESP8266: n koodi on pohjimmiltaan erilainen, koska toinen on määritetty AP: ksi ja toinen asiakkaaksi.

Seuraava aihe on, että sen sijaan, että lähetettäisiin vain joitain tavuja nRF24l01: lle, ESP8266 -siirtoprotokollia on noudatettava.

Yleisesti käytettyjä protokollia on kaksi: TCP ja UDP.

TCP (Transmission Control Protocol) on protokolla, joka mahdollistaa häviöttömän siirron palvelimen ja asiakkaan välillä. Protokolla sisältää "kädenpuristukset" (paljon lippuja ja korotuksia molempien osapuolten välillä) ja pakettien numeroinnin ja havaitsemisen kadonneiden pakettien tunnistamiseksi ja uudelleenlähettämiseksi. Lisäksi käyttämällä kaikkia näitä kättelyjä protokolla estää tietoja, jotka menetetään useiden samanaikaisesti verkossa lähetettävien pakettien vuoksi. Datapaketit odottavat, kunnes ne voidaan vastaanottaa.

UDP: stä (User Datagram Protocol) puuttuu kaikki kädenpuristukset, pakettien numerointi ja uudelleenlähetys. Sen yleiskustannukset ovat siksi pienemmät, eikä kaikkien kädenpuristusten tarvitse ylläpitää yhteyttä. UDP sisältää joitakin perusvirheentunnistuksia, mutta ei korjausta (vioittunut paketti pudotetaan juuri). Tiedot lähetetään tietämättä, onko vastaanottava osapuoli vapaa vastaanottamaan tiedot. Samaan aikaan useat paketit voivat törmätä, koska kukin osapuoli lähettää tiedot aina tarvittaessa. Kun kaikki kädenpuristukset jätetään pois, UDP: ssä on yksi mukava lisäominaisuus, nimeltään "multicast" ja "broadcast". "Multicast" -tapauksessa datapaketit lähetetään ennalta määrätylle jäsenryhmälle, "broadcast" -datapaketit lähetetään kaikille yhdistetyille jäsenille. Tämä vähentää tiedonsiirtoa huomattavasti, jos useat jäsenet vastaanottavat virtoja (esim. Lähettämällä videosyötteen useille vastaanottimille tai lähettämällä nykyisen ajan useille yhdistetyille laitteille).

Youtubessa on hyviä videoita, jotka selittävät sen vielä paremmin.

Joten tietoja lähetettäessä on tärkeää tietää tarpeesi:

  • vioittumaton data, useiden vertaisten hallinta kättelyillä → TCP
  • reaaliaikainen data, nopea yhteys → UDP

Aloitin ensin TCP -pohjaisen viestinnän toteuttamisen (yhden palvelimen ja yhden asiakkaan välillä). Testauksen aikana minulla oli siirto -ongelmia. Alussa tietoja vaihdettiin nopeasti, sitten jonkin ajan kuluttua nopeus laski dramaattisesti. Päätin, että tämä oli tyypillinen TCP -lähestymistavan ongelma (mikä oli väärin!), Joten muutin sitten ratkaisuksi, joka perustuu UDP: hen. Lopulta lähestyin molempia toimimaan. Joten molemmat ratkaisut tarjotaan.

Alla olevilla luonnoksilla on yhteistä TCP: lle ja UDP: lle:

  • ovat riippumattomia olemassa olevasta WiFi -verkosta. Joten se toimii missä tahansa kaukana Internetistä ja yhdistetyistä reitittimistä.
  • lähettävät ASCII -tietoja tulostettavaksi sarjamonitorin kautta.
  • lähettävät millis ()-funktion keräämiä tietoja lähetyksen nopeuden analysoimiseksi.
  • ei ole testattu useille asiakkaille (koska verkon asentamiseen tarvittava laitteisto on juuri nyt)

Vaihe 2: Laitteisto

Laitteisto
Laitteisto
Laitteisto
Laitteisto
Laitteisto
Laitteisto
Laitteisto
Laitteisto

Koko kokoonpanon testaamiseen käytin kahta ESP8266 -moduulia. Yksi moduuli on ESP-01 + USB-UART-sovitin. Toinen moduuli on ESP-12-pohjainen moduuli, joka sisältää USB-liitännän, jännitesäätimen ja joitain hauskoja juttuja, kuten kytkimet, LDR ja monivärinen LED.

ESP-01: n USB-UART-moduulia oli muutettava hieman, jotta sitä voitaisiin käyttää ohjelmoijana (jälleen Youtube, Csongor Varga).

Luonnosten suorittamiseksi sinun on asennettava ESP8266 -kirjastot (kuten on kuvattu monissa paikoissa Internetissä). Molemmissa tapauksissa (TCP ja UDP) on palvelin- ja asiakasluonnos. Mikä luonnos ladataan mihin moduuliin, ei ole väliä.

Kiitokset

Kuten mainittiin, luonnokset perustuvat moniin bitteihin, jotka löysin verkosta. En muista enää mistä löysin mitä, ja mikä on alkuperäinen koodi tai mitä muutin. Joten halusin vain kiittää suurta yhteisöä yleensä kaikkien hienojen esimerkkien julkaisemisesta.

Vaihe 3: Luonnokset

Koodi koostuu kahdesta luonnoksesta (kuten selitetty), palvelinpiirustuksesta ja asiakasluonnoksesta, kumpikin TCP: lle ja UDP: lle.

Suositeltava: