Съдържание:

ESP8266 Директна комуникация на данни: 3 стъпки
ESP8266 Директна комуникация на данни: 3 стъпки

Видео: ESP8266 Директна комуникация на данни: 3 стъпки

Видео: ESP8266 Директна комуникация на данни: 3 стъпки
Видео: Светильник на адресных LED, для подсветки, уведомлений и аварийного освещения. ESP32 и WLED 2024, Юли
Anonim
ESP8266 Директна комуникация на данни
ESP8266 Директна комуникация на данни

Въведение

Докато направих някои проекти с модули Arduinos и nRF24l01, се чудех дали мога да спестя малко усилия, като използвам вместо това модул ESP8266. Предимството на модула ESP8266 е, че той съдържа микро контролер на борда, така че не е необходима допълнителна платка Arduino. Освен това размерът на паметта на ESP8266 е много по -голям и по отношение на скоростта ESP8266 работи на макс 160MHz вместо на 16MHz на Arduino. Разбира се, има и отрицателни страни.

ESP8266 работи само на 3.3V, има по -малко щифтове и му липсват хубавите аналогови входове, които има Arduino (има такъв, но само за 1.0V, а не 3.3V). Освен това има много повече примери за код за Arduino + nRF24l01, отколкото за ESP8266, особено когато става въпрос за директен трансфер на данни.

И така, имайки предвид един проект, поразгледах темата за бърз и лек трансфер на данни между два ESP8266 без всички WWW и HTTP неща.

Докато търсих в интернет за примери (по -голямата част от кода по -долу беше избран от мрежата на различни места), срещнах много въпроси как да приложа директен трансфер на данни без хубавите примери „направи го така“. Имаше примерен код, но най -вече с въпрос защо не работи.

Така че, след като прочетох малко и се опитах да разбера, създадох примерите по -долу, които позволяват бързо и просто прехвърляне на данни между два ESP8266.

Стъпка 1: Граници и фонове (TCP срещу UDP)

За да стигнете дотам, някои граници трябва да бъдат изяснени в сравнение с nRF24l01.

За да използвате ESP8266 в средата на Arduino, основната библиотека за използване е ESP8266WiFi.h. Може да са различни, но повечето примери използват споменатото. Когато използвате това, трябва да получите комуникацията си до ниво WiFi.

Така че за комуникация трябва да има поне точка за достъп (AP) / сървър и клиент. AP предоставя името на мрежата и IP адресите и клиентът ще се свърже с този сървър.

Така в сравнение nRF24l01, където кодът в двата края е горе -долу еднакъв (с изключение на каналите за предаване), кодът на ESP8266 е коренно различен, тъй като единият е конфигуриран като AP, а другият като клиент.

Следващата тема е, че вместо просто да изпращате няколко байта към nRF24l01, за ESP8266 трябва да се спазват протоколите за прехвърляне.

Има два често използвани протокола: TCP и UDP.

TCP (Transmission Control Protocol) е протокол, който позволява предаване без загуби между сървър и клиент. Протоколът включва „ръкостискане“(много флагове и признания, изпратени между двете страни) и номериране и откриване на пакети за идентифициране и повторно предаване на изгубени пакети. Освен това, използвайки всички тези ръкостискания, протоколът предотвратява загубата на данни поради многото пакети, изпратени едновременно в мрежата. Пакетите с данни изчакват, докато могат да бъдат получени.

UDP (Протокол на потребителска датаграма) липсва всички ръкостискания, номериране на пакети и повторно предаване. Следователно неговите режийни разходи са по -малки и няма нужда всички ръкостискания да поддържат връзка. UDP включва някои основни откривания на грешки, но без корекция (повреденият пакет просто се изпуска). Данните се изпращат, без знанието, ако приемащата страна е свободна да получи данните. В същото време могат да се сблъскат множество пакети, тъй като всяка страна изпраща данните, когато е необходимо. Като пропускаме всички ръкостискания, има една допълнителна приятна функция на UDP, наречена „мултикаст“и „излъчване“. В случая „многоадресно“пакети данни се изпращат до предварително определена група членове, в „излъчване“пакети данни се изпращат до всички свързани членове. Това намалява значително прехвърлянето на данни в случай на потоци, които да бъдат получени от множество членове (например чрез изпращане на видео емисия към множество приемници или чрез изпращане на текущото време до множество свързани устройства).

В Youtube има няколко добри видеоклипа, които го обясняват още по -добре.

Така че, когато изпращате данни, е важно да знаете нуждите си:

  • неповредени данни, управление на множество партньори чрез ръкостискане → TCP
  • данни в реално време, бърза връзка → UDP

Първо започнах с внедряването на TCP базирана комуникация (между един сървър и един клиент). Докато го тествах, имах проблеми със спирането при предаването. В началото данните се обменяха бързо, а след известно време скоростта рязко спадна. Стигнах до заключението, че това е типичен проблем на TCP подхода (което беше грешно!), Така че след това се промени на решение, базирано на UDP. Най -накрая и двамата се насочих към работа. Така че и двете решения ще бъдат предоставени.

Скиците по -долу имат общо за TCP и UDP, че те:

  • са независими от всяка съществуваща WiFi мрежа. Така че ще работи навсякъде далеч от интернет и свързаните рутери.
  • изпращат ASCII данни за отпечатване чрез сериен монитор.
  • изпращат данни, получени от функцията millis (), за да анализират скоростта на предаване.
  • не са тествани за множество клиенти (поради наличието на хардуер за настройка на мрежата в момента)

Стъпка 2: Хардуер

Хардуер
Хардуер
Хардуер
Хардуер
Хардуер
Хардуер
Хардуер
Хардуер

За да тествам цялата настройка, използвах два модула ESP8266. Един модул е адаптер ESP-01 + USB към UART. Другият модул е базиран на ESP-12 модул, включващ USB връзка, регулатор на напрежението и някои забавни неща като ключове, LDR и многоцветен светодиод.

Модулът USB към UART за ESP-01 трябваше да бъде променен малко, за да може да се използва като програмист (отново Youtube от Csongor Varga).

За да стартирате скиците, трябва да инсталирате библиотеките ESP8266 (както е описано на много места в интернет). И в двата случая (TCP и UDP) има скица на сървър и клиент. Коя скица е заредена към кой модул няма значение.

Благодарности

Както бе споменато, скиците се основават на много битове, които намерих в мрежата. Вече не помня къде съм намерил какво и какъв е оригиналният код или какво съм променил. Затова просто исках да благодаря на голямата общност като цяло за публикуването на всички страхотни примери.

Стъпка 3: Скиците

Кодът се състои от две скици (както е обяснено), сървърна скица и скица на клиент, за всеки TCP и UDP.

Препоръчано: