Talaan ng mga Nilalaman:

ESP8266 Direktang Komunikasyon sa Data: 3 Mga Hakbang
ESP8266 Direktang Komunikasyon sa Data: 3 Mga Hakbang

Video: ESP8266 Direktang Komunikasyon sa Data: 3 Mga Hakbang

Video: ESP8266 Direktang Komunikasyon sa Data: 3 Mga Hakbang
Video: Сравнение протоколов TCP и UDP 2024, Hulyo
Anonim
ESP8266 Direktang Komunikasyon sa Data
ESP8266 Direktang Komunikasyon sa Data

Panimula

Habang nagawa ang ilang mga proyekto sa Arduinos at nRF24l01 modules iniisip ko kung makakatipid ako ng pagsisikap sa pamamagitan ng paggamit ng isang module na ESP8266 sa halip. Ang bentahe ng module na ESP8266 ay naglalaman ito ng isang micro controller sa board, kaya walang karagdagang Arduino board ang kinakailangan. Bilang karagdagan ang laki ng memorya ng ESP8266 ay mas malaki at patungkol sa bilis na ang ESP8266 ay tumatakbo sa max 160MHz sa halip na 16MHz ng Arduino. Siyempre mayroong ilang mga negatibong panig.

Ang ESP8266 ay tumatakbo sa 3.3V lamang, mayroong mas kaunting mga pin at nawawala ang magagandang mga analog input na mayroon ang Arduino (mayroon itong isa, ngunit para lamang sa 1.0V at hindi 3.3V). Bilang karagdagan maraming iba pang mga halimbawa ng code para sa Arduino + nRF24l01 pagkatapos ay mayroong para sa ESP8266 lalo na pagdating sa direktang paglipat ng data.

Kaya't may naisip na isang proyekto, tiningnan ko ang paksa ng mabilis at magaan na paglipat ng data sa pagitan ng dalawang ESP8266 nang walang lahat ng bagay sa WWW at

Habang naghahanap sa internet ng mga halimbawa (karamihan sa mga nasa ibaba na code ay kinuha mula sa net sa iba't ibang mga lugar) Natagpuan ko ang maraming mga katanungan kung paano ipatupad ang isang direktang paglipat ng data nang walang magandang "gawin ito tulad ng" mga halimbawa. Mayroong ilang halimbawa ng code, ngunit karamihan ay may tanong kung bakit hindi ito gumana.

Kaya pagkatapos ng ilang pagbabasa at pagsubok na maunawaan, nilikha ko ang mga halimbawa sa ibaba na nagpapahintulot sa mabilis at simpleng paglipat ng data sa pagitan ng dalawang ESP8266.

Hakbang 1: Mga Hangganan at Mga Background (TCP Vs. UDP)

Upang makarating doon, ang ilang mga hangganan ay kailangang linawin kumpara sa nRF24l01.

Upang magamit ang ESP8266 sa loob ng Arduino na kapaligiran, ang pangunahing silid aklatan na gagamitin ay ang ESP8266WiFi.h. Maaaring magkakaiba ang, ngunit karamihan sa mga halimbawa ay gumagamit ng nabanggit sa. Kapag ginagamit ito, kailangan mong makuha ang iyong komunikasyon sa antas ng WiFi.

Kaya, upang makipag-usap doon kailangang mayroong hindi bababa sa isang access point (AP) / server at isang kliyente. Nagbibigay ang AP ng pangalan ng network at mga IP address at makokonekta ang client sa server na ito.

Kaya't inihambing ang nRF24l01, kung saan ang code sa magkabilang dulo ay mas marami o mas kaunti (maliban sa mga channel ng paghahatid) ang code ng ESP8266 ay magkakaiba sa panimula, dahil ang isa ay na-configure bilang AP at ang iba pa bilang kliyente.

Ang susunod na paksa ay, na sa halip na magpadala lamang ng ilang mga byte sa nRF24l01, para sa mga ESP8266 transfer protocol ay kailangang sundin.

Mayroong dalawang karaniwang ginagamit na mga protokol: TCP at UDP.

Ang TCP (Transmission Control Protocol) ay isang proteksyon na nagbibigay-daan sa isang walang pagkawala na paghahatid sa pagitan ng isang server at isang kliyente. Ang protokol ay nagsasama ng "handshakes" (maraming mga flag at acknoledges na ipinadala sa pagitan ng parehong partido) at pag-number at packet na pagtukoy upang makilala at muling maihatid ang mga nawalang packet. Bilang karagdagan, sa pamamagitan ng paggamit ng lahat ng mga handshake na ito pinipigilan ng protokol ang data na nawala dahil sa maraming mga packet na ipinapadala nang sabay sa network. Naghihintay ang mga packet ng data hanggang sa matanggap sila.

Ang UDP (User Datagram Protocol) ay kulang sa lahat ng mga handshake, pag-number ng packet at muling paghahatid. Ang overhead nito samakatuwid ay mas maliit at hindi na kailangan para sa lahat ng mga handshake upang mapanatili ang isang koneksyon. Isinasama ng UDP ang ilang pangunahing pagtuklas ng error, ngunit walang pagwawasto (ang nawasak na package ay nahulog lamang). Ipinapadala ang data, nang walang kaalaman kung ang tumatanggap na partido ay malayang makatanggap ng data. Sa parehong oras, maraming mga packet ang maaaring mabangga, dahil ang bawat partido ay nagpapadala ng data tuwing kinakailangan ito. Sa pamamagitan ng pagtanggal sa lahat ng mga handshake, mayroong isang karagdagang magagandang tampok ng UDP na tinatawag na "multicast" at "broadcast". Sa "multicast" na mga packet ng data ay ipinadala sa isang paunang natukoy na pangkat ng mga kasapi, sa isang "broadcast" na mga packet ng data ay ipinadala sa lahat ng mga konektadong miyembro. Mabawasan nito ang paglilipat ng data kung sakaling may mga stream na matatanggap ng maraming miyembro (hal. Sa pamamagitan ng pagpapadala ng isang video feed sa maraming mga tatanggap o sa pamamagitan ng pagpapadala ng kasalukuyang oras sa maraming mga konektadong aparato).

Mayroong ilang magagandang video sa Youtube na nagpapaliwanag na mas mabuti ito.

Kaya't kapag nagpapadala ng data, mahalagang malaman ang iyong mga pangangailangan:

  • hindi napinsalang data, pamamahala ng maraming mga kapantay sa pamamagitan ng pag-handshake → TCP
  • data ng real time, mabilis na koneksyon → UDP

Una akong nagsimula sa pagpapatupad ng isang komunikasyon na batay sa TCP (sa pagitan ng isang Server at isang Client). Habang sinusubukan ito, nagkakaroon ako ng mga problema sa paghahatid. Sa simula ang data ay mabilis na ipinagpapalit, pagkatapos ay ilang sandali ang bilis ay bumaba nang malaki. Napagpasyahan ko na ito ay isang tipikal na problema ng diskarte ng TCP (na mali!), Kaya't binago sa isang solusyon batay sa UDP. Sa wakas napalapit ako sa pagtatrabaho. Kaya't ang parehong solusyon ay ibibigay.

Ang mga sketch sa ibaba ay mayroon para sa TCP at UDP na pareho na:

  • ay malaya sa anumang umiiral na WiFi network. Kaya gagana ito kahit saan malayo sa internet at mga konektadong mga router.
  • ay nagpapadala ng data ng ASCII upang mai-print sa pamamagitan ng serial monitor.
  • ay nagpapadala ng data na nakuha ng millis () - function, upang pag-aralan ang bilis ng paghahatid.
  • ay hindi nasubok para sa maraming mga kliyente (dahil sa pagkakaroon ng hardware upang i-set up ang network ngayon)

Hakbang 2: Hardware

Hardware
Hardware
Hardware
Hardware
Hardware
Hardware
Hardware
Hardware

Upang subukan ang buong pag-set up Gumamit ako ng dalawang mga module ng ESP8266. Ang isang module ay isang adapter ng ESP-01 + USB-to-UART. Ang iba pang modyul ay isang module na batay sa ESP-12 na nagsasama ng koneksyon sa USB, regulator ng Boltahe at ilang mga nakakatuwang bagay tulad ng mga switch, LDR at multi-color LED.

Ang Module ng USB-to-UART para sa ESP-01 ay kailangang mabago nang kaunti upang magamit ito bilang isang programmer (muli ang Youtube ni Csongor Varga).

Upang mapatakbo ang mga sketch, kailangan mong i-install ang mga aklatan ng ESP8266 (tulad ng inilarawan sa maraming mga lugar sa internet). Sa parehong mga kaso (TCP at UDP) mayroong bawat server at sketch ng client. Aling sketch ang na-load sa kung aling module ang hindi mahalaga.

Mga Pasasalamat

Tulad ng nabanggit, ang mga sketch ay batay sa maraming mga piraso at piraso na nakita ko sa web. Hindi ko na naaalala kung saan ko nahanap kung ano, at ano ang orihinal na code o kung ano ang aking binago. Kaya't nais ko lamang pasalamatan ang malaking pamayanan sa pangkalahatan doon para sa pag-publish ng lahat ng magagaling na mga halimbawa.

Hakbang 3: Ang Mga Sketch

Ang Code ay binubuo ng dalawang sketch bawat isa (tulad ng ipinaliwanag), isang server sketch at client sketch, para sa TCP at UDP bawat isa.

Inirerekumendang: