Mündəricat:

ESP8266 Birbaşa Məlumat Əlaqəsi: 3 addım
ESP8266 Birbaşa Məlumat Əlaqəsi: 3 addım

Video: ESP8266 Birbaşa Məlumat Əlaqəsi: 3 addım

Video: ESP8266 Birbaşa Məlumat Əlaqəsi: 3 addım
Video: Home Assistant - подключаем адресную ленту WS2812B через ESP8266 с прошивкой WLED 2024, Iyul
Anonim
ESP8266 Birbaşa Məlumat Əlaqəsi
ESP8266 Birbaşa Məlumat Əlaqəsi

Giriş

Arduinos və nRF24l01 modulları ilə bəzi layihələr həyata keçirərkən, bunun əvəzinə bir ESP8266 modulu istifadə edərək bir az səy göstərə biləcəyimi düşünürdüm. ESP8266 modulunun üstünlüyü, içərisində mikro nəzarətçi olmasıdır, buna görə əlavə Arduino lövhəsinə ehtiyac yoxdur. Əlavə olaraq, ESP8266 -nın yaddaş ölçüsü daha böyükdür və sürət baxımından ESP8266, Arduino 16MHz əvəzinə maksimum 160MHz -də işləyir. Təbii ki, bunun mənfi tərəfləri də var.

ESP8266 yalnız 3.3V -də işləyir, daha az sancağa malikdir və Arduinonun gözəl analoq girişləri yoxdur (bir var, ancaq 3.3V deyil, yalnız 1.0V üçün). Əlavə olaraq Arduino + nRF24l01 üçün daha çox kod nümunəsi var, xüsusən də birbaşa məlumat ötürülməsinə gəldikdə ESP8266 üçün var.

Bir layihəni nəzərə alaraq, bütün WWW və HTTP məhsulları olmadan iki ESP8266 arasında sürətli və yüngül məlumat ötürülməsi mövzusuna baxdım.

Nümunələr üçün internetdə axtarış apararkən (aşağıdakı kodun çoxu müxtəlif yerlərdə şəbəkədən seçilmişdi) "belə et" nümunələri olmadan gözəl bir məlumat ötürülməsinin necə həyata keçiriləcəyi ilə bağlı bir çox suallarla qarşılaşdım. Bir nümunə kod var idi, amma əsasən niyə işləmədiyini soruşurdum.

Bir az oxuduqdan və başa düşməyə çalışdıqdan sonra iki ESP8266 arasında məlumatların sürətli və sadə ötürülməsinə imkan verən aşağıdakı nümunələri yaratdım.

Addım 1: Sərhədlər və Arxa Planlar (TCP vs UDP)

Oraya çatmaq üçün nRF24l01 ilə müqayisədə bəzi sərhədləri aydınlaşdırmaq lazımdır.

ESP8266 -nı Arduino mühitində istifadə etmək üçün əsas kitabxana ESP8266WiFi.h -dir. Fərqli ola bilər, amma əksər nümunələrdə yuxarıda göstərilənlər istifadə olunur. Bunu istifadə edərkən, ünsiyyətinizi WiFi səviyyəsinə çatdırmalısınız.

Beləliklə, ünsiyyət qurmaq üçün ən azı bir giriş nöqtəsi (AP) / server və bir müştəri olmalıdır. AP şəbəkənin adını və IP ünvanlarını təqdim edir və müştəri bu serverə qoşulacaq.

NRF24l01 ilə müqayisədə, hər iki ucdakı kodun az -çox eyni olduğu (ötürmə kanalları istisna olmaqla), ESP8266 -nın kodu kökündən fərqlidir, çünki biri AP, digəri müştəri kimi konfiqurasiya olunur.

Növbəti mövzu, nRF24l01 -ə bir neçə bayt göndərmək əvəzinə, ESP8266 ötürmə protokollarına riayət edilməsidir.

İki ümumi istifadə olunan protokol var: TCP və UDP.

TCP (Transmission Control Protocol), serverlə müştəri arasında itkisiz ötürülməyə imkan verən bir protokoldur. Protokolda "əl sıxışmalar" (hər iki tərəf arasında göndərilən çoxlu bayraqlar və biliklər) və itirilmiş paketlərin müəyyən edilməsi və yenidən ötürülməsi üçün paket nömrələnməsi və aşkarlanması daxildir. Əlavə olaraq, bütün bu əl sıxışmalardan istifadə edərək, protokol şəbəkədə eyni vaxtda göndərilən bir çox paket səbəbiylə itirilən məlumatların qarşısını alır. Məlumat paketləri alınana qədər gözləyin.

UDP (İstifadəçi Datagram Protokolu) bütün əl sıxışmalarından, paket nömrələnməsindən və yenidən ötürülməsindən məhrumdur. Buna görə yükü daha kiçikdir və əlaqəni qorumaq üçün bütün əl sıxışmalarına ehtiyac yoxdur. UDP bir neçə əsas səhv aşkarlamasını ehtiva edir, lakin heç bir düzəliş etmir (zədələnmiş paket yenicə atılır). Qəbul edən tərəfin məlumatları əldə etməkdə sərbəst olması halında, məlumat göndərilmədən göndərilir. Eyni zamanda, hər bir tərəf lazım olduqda məlumat göndərdiyi üçün birdən çox paket toqquşa bilər. Bütün əl sıxışmaları ataraq, UDP -nin "multicast" və "yayım" adlı daha bir gözəl xüsusiyyəti var. "Çox nöqtəli" vəziyyətdə məlumat paketləri əvvəlcədən təyin edilmiş üzv qrupuna, "yayımda" isə bütün bağlı üzvlərə göndərilir. Bu, axınların birdən çox üzv tərəfindən alınması halında (məsələn, birdən çox alıcıya video axını göndərməklə və ya birdən çox bağlı cihaza cari vaxtı göndərməklə) məlumat ötürülməsini əhəmiyyətli dərəcədə azaldır.

Youtube -da bunu daha yaxşı izah edən yaxşı videolar var.

Məlumat göndərərkən ehtiyaclarınızı bilmək vacibdir:

  • zədələnməmiş məlumatlar, çoxsaylı həmyaşıdlarının əl sıxışması ilə idarə edilməsi → TCP
  • real vaxt məlumatları, sürətli əlaqə → UDP

İlk olaraq TCP əsaslı bir ünsiyyətin tətbiqi ilə başladım (bir Server ilə bir Müştəri arasında). Test edərkən, ötürmədə dayanma problemləri var idi. Başlanğıcda məlumatlar sürətlə mübadilə edildi, sonra bir müddət sonra sürət kəskin şəkildə aşağı düşdü. Bunun TCP yanaşmasının tipik bir problemi olduğu qənaətinə gəldim (səhv idi!), Sonra UDP -yə əsaslanan bir həllə keçdim. Nəhayət, hər ikisi işə yaxınlaşdı. Beləliklə, hər iki həll də təmin ediləcəkdir.

Aşağıdakı eskizlər TCP və UDP üçün ortaqdır:

  • mövcud WiFi şəbəkəsindən asılı deyil. Beləliklə, İnternetdən və bağlı marşrutlaşdırıcılardan uzaq bir yerdə işləyəcək.
  • ASCII məlumatlarını serial monitor vasitəsilə çap etmək üçün göndərirlər.
  • millis () funksiyası ilə əldə edilən məlumatları ötürmə sürətini təhlil etmək üçün göndərirlər.
  • birdən çox müştəri üçün sınaqdan keçirilmir (hazırda şəbəkəni qurmaq üçün aparatın olması səbəbindən)

Addım 2: Avadanlıq

Avadanlıq
Avadanlıq
Avadanlıq
Avadanlıq
Avadanlıq
Avadanlıq
Avadanlıq
Avadanlıq

Bütün quruluşu sınamaq üçün iki ESP8266 modulundan istifadə etdim. Bir modul ESP-01 + USB-UART adapteridir. Digər modul, USB bağlantısı, gərginlik tənzimləyicisi və açarlar, LDR və çox rəngli LED kimi əyləncəli şeyləri özündə birləşdirən ESP-12 əsaslı bir moduldur.

ESP-01 üçün USB-UART Modulunu proqramçı kimi istifadə etmək üçün bir qədər dəyişdirilməli idi (yenə Youtube tərəfindən Csongor Varga).

Eskizləri işə salmaq üçün ESP8266 kitabxanalarını (İnternetin bir çox yerində təsvir edildiyi kimi) quraşdırmalısınız. Hər iki halda (TCP və UDP) hər biri bir server və müştəri eskizi var. Hansı eskizin hansı modula yüklənməsinin əhəmiyyəti yoxdur.

Təşəkkürlər

Qeyd edildiyi kimi, eskizlər internetdə tapdığım bir çox hissəyə əsaslanır. Artıq harada nəyi tapdığımı, orijinal kodun nə olduğunu və ya nəyi dəyişdiyimi xatırlamıram. Buna görə də bütün böyük nümunələri dərc etdikləri üçün ümumiyyətlə böyük bir cəmiyyətə təşəkkür etmək istədim.

Addım 3: Eskizlər

Kod, hər biri (izah edildiyi kimi) iki eskizdən, hər biri TCP və UDP üçün bir server eskizindən və müştəri eskizindən ibarətdir.

Tövsiyə: