Mundarija:

ESP8266 to'g'ridan -to'g'ri ma'lumotlar bilan aloqa: 3 qadam
ESP8266 to'g'ridan -to'g'ri ma'lumotlar bilan aloqa: 3 qadam

Video: ESP8266 to'g'ridan -to'g'ri ma'lumotlar bilan aloqa: 3 qadam

Video: ESP8266 to'g'ridan -to'g'ri ma'lumotlar bilan aloqa: 3 qadam
Video: Using MAX6675 Thermocouple with LCD1602 and Arduino 2024, Noyabr
Anonim
ESP8266 to'g'ridan -to'g'ri ma'lumotlar bilan aloqa
ESP8266 to'g'ridan -to'g'ri ma'lumotlar bilan aloqa

Kirish

Arduinos va nRF24l01 modullari bilan bir qancha loyihalarni amalga oshirganimda, uning o'rniga ESP8266 moduli yordamida bir oz kuch sarflay olamanmi, deb o'ylardim. ESP8266 modulining afzalligi shundaki, uning bortida mikro -kontroller bor, shuning uchun qo'shimcha Arduino kartasi kerak emas. Bundan tashqari, ESP8266 xotira hajmi ancha katta va ESP8266 Arduino 16 MGts o'rniga 160 MGts tezlikda ishlaydi. Albatta, ba'zi salbiy tomonlari bor.

ESP8266 faqat 3.3V kuchlanish bilan ishlaydi, pinlari kamroq va Arduino -da mavjud bo'lgan analog analoglari yo'q (u faqat bitta, lekin faqat 3,3V emas, balki 1,0 V uchun). Bundan tashqari, Arduino + nRF24l01 uchun boshqa ko'plab misollar mavjud, keyin ESP8266 uchun, ayniqsa to'g'ridan -to'g'ri ma'lumotlarni uzatish haqida.

Shunday qilib, loyihani nazarda tutgan holda, men barcha WWW va HTTP ma'lumotisiz ikkita ESP8266 o'rtasida tez va engil ma'lumotlarni uzatish mavzusini ko'rib chiqdim.

Internetda misollar qidirayotganda (quyida keltirilgan kodning ko'p qismi tarmoqdan har xil joylardan tanlangan), men qanday qilib "shunday qil" misollarisiz to'g'ridan -to'g'ri ma'lumotlarni uzatishni amalga oshirish haqida ko'plab savollarga duch keldim. Misol kodi bor edi, lekin asosan nima uchun ishlamayotganligi bilan bog'liq.

Biroz o'qib, tushunishga harakat qilgandan so'ng, men ikkita ESP8266 o'rtasida ma'lumotlarni tez va sodda uzatishga imkon beradigan quyidagi misollarni yaratdim.

1 -qadam: Chegaralar va fon (TCP va UDP)

U erga borish uchun nRF24l01 bilan solishtirganda ba'zi chegaralarni aniqlashtirish kerak.

ESP8266 -ni Arduino muhitida ishlatish uchun asosiy kutubxona - ESP8266WiFi.h. Turli xil bo'lishi mumkin, lekin ko'pchilik misollarda yuqorida aytilganlardan foydalaniladi. Buni ishlatganda, siz Wi -Fi tarmog'iga ulanishingiz kerak.

Shunday qilib, muloqot qilish uchun hech bo'lmaganda kirish nuqtasi / server va mijoz bo'lishi kerak. AP tarmoq nomi va IP manzillarini beradi va mijoz bu serverga ulanadi.

Shunday qilib, nRF24l01 solishtirildi, bu erda har ikki uchining kodi ham deyarli bir xil (uzatish kanallaridan tashqari), ESP8266 kodi tubdan farq qiladi, chunki biri AP sifatida, ikkinchisi mijoz sifatida tuzilgan.

Keyingi mavzu shundaki, nRF24l01 ga bir necha bayt yuborishning o'rniga, ESP8266 uzatish protokollariga rioya qilish kerak.

Umumiy ishlatiladigan ikkita protokol mavjud: TCP va UDP.

TCP (uzatishni boshqarish protokoli)-bu server va mijoz o'rtasida uzluksiz uzatishni ta'minlaydigan protokol. Protokolda "qo'l siqish" (ikki tomon o'rtasida yuborilgan ko'plab bayroqlar va tasdiqlar) va yo'qolgan paketlarni aniqlash va qayta yuborish uchun paketlarni raqamlash va aniqlash kiradi. Bundan tashqari, barcha qo'l siqishlardan foydalangan holda, protokol tarmoqdagi bir vaqtning o'zida ko'plab paketlar yuborilishi tufayli ma'lumotlarni yo'qotilishini oldini oladi. Ma'lumotlar to'plami ularni qabul qilishini kutadi.

UDP (Foydalanuvchi Datagram Protokoli) barcha qo'l siqish, paketlarni raqamlash va qayta uzatishga ega emas. Shuning uchun uning ustki qismi kichikroq va aloqani saqlab qolish uchun barcha qo'l siqishlarga hojat yo'q. UDP ba'zi asosiy xatolarni aniqlashni o'z ichiga oladi, lekin hech qanday tuzatish yo'q (buzilgan paket o'chiriladi). Ma'lumotlar, agar qabul qiluvchi tomon ma'lumotni olish huquqiga ega bo'lsa, bilmasdan yuboriladi. Shu bilan birga, bir nechta paketlar to'qnashishi mumkin, chunki har bir tomon kerakli vaqtda ma'lumotlarni yuboradi. Barcha qo'l siqishlarni o'tkazib yubormasdan, UDP -ning "multicast" va "translyatsiya" deb nomlangan yana bir yaxshi xususiyati bor. "Multicast" holatida ma'lumotlar paketlari oldindan belgilangan a'zolar guruhiga yuboriladi, "translyatsiya" holatida ma'lumotlar paketlari barcha ulangan a'zolarga yuboriladi. Bu oqimlar bir nechta a'zo tomonidan qabul qilinsa (masalan, bir nechta qabul qiluvchilarga video tasmasini yuborish yoki bir nechta ulangan qurilmalarga joriy vaqtni yuborish orqali) ma'lumotlarni uzatishni sezilarli darajada kamaytiradi.

Youtube -da buni yaxshiroq tushuntiradigan yaxshi videolar bor.

Shunday qilib, ma'lumotlarni yuborishda sizning ehtiyojlaringizni bilish juda muhim:

  • buzilmagan ma'lumotlar, qo'l siqish orqali bir nechta tengdoshlarini boshqarish → TCP
  • real vaqtda ma'lumotlar, tezkor ulanish → UDP

Men birinchi bo'lib TCP -ga asoslangan aloqani amalga oshirishdan boshladim (bitta server va bitta mijoz o'rtasida). Sinov paytida men uzatishda to'xtab qoladigan muammolarga duch keldim. Avvaliga ma'lumotlar tez almashildi, keyin esa tezlik keskin pasayib ketdi. Men bu TCP yondashuvining odatiy muammosi (bu noto'g'ri!), Degan xulosaga keldim, keyin UDPga asoslangan echimga o'tdim. Oxir -oqibat men ikkalamiz ham ishga yaqinlashdik. Shunday qilib, ikkala echim ham ta'minlanadi.

Quyidagi eskizlar TCP va UDP uchun umumiydir:

  • har qanday mavjud Wi -Fi tarmog'idan mustaqil. Shunday qilib, u Internetdan va ulangan routerlardan uzoqda joylashgan joyda ishlaydi.
  • ketma -ket monitor orqali chop etish uchun ASCII ma'lumotlarini yuborishadi.
  • millis () funktsiyasidan olingan ma'lumotlarni uzatish tezligini tahlil qilish uchun yuboradi.
  • bir nechta mijozlar uchun sinovdan o'tkazilmagan (hozirda tarmoqni sozlash uchun uskunalar mavjudligi sababli)

2 -qadam: Uskuna

Uskuna
Uskuna
Uskuna
Uskuna
Uskuna
Uskuna
Uskuna
Uskuna

Butun sozlamani sinab ko'rish uchun ikkita ESP8266 moduli ishlatilgan. Bitta modul-ESP-01 + USB-UART adapteri. Boshqa modul-bu USB ulanishi, kuchlanish regulyatori va kalitlar, LDR va ko'p rangli LED kabi qiziqarli narsalarni o'z ichiga olgan ESP-12 moduli.

ESP-01 uchun USB-UART modulini dasturchi sifatida ishlatish uchun biroz o'zgartirish kerak edi (yana Youtube tomonidan Csongor Varga).

Eskizlarni ishga tushirish uchun siz ESP8266 kutubxonalarini o'rnatishingiz kerak (Internetning ko'p joylarida tasvirlanganidek). Ikkala holatda ham (TCP va UDP) har biri server va mijoz eskiziga ega. Qaysi eskiz qaysi modulga yuklanganligi muhim emas.

Rahmatlar

Yuqorida aytib o'tilganidek, eskizlar Internetda topilgan ko'plab qismlarga asoslangan. Qayerdan nimani topganimni, asl kod nima ekanligini yoki nimani o'zgartirganimni eslay olmayman. Shunday qilib, men barcha ajoyib misollarni nashr etgani uchun katta jamoaga minnatdorchilik bildirmoqchiman.

3 -qadam: Eskizlar

Kod har biri ikkita eskizdan (tushuntirilgandek), har biri TCP va UDP uchun server eskizidan va mijoz eskizidan iborat.

Tavsiya: