Съдържание:
Видео: ESP8266 Директна комуникация на данни: 3 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:53
Въведение
Докато направих някои проекти с модули 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.
Препоръчано:
Безжична комуникация LoRa от 3 до 8 км с ниска цена E32 (sx1278/sx1276) Устройство за Arduino, Esp8266 или Esp32: 15 стъпки
Безжична комуникация LoRa от 3 до 8 км с ниска цена E32 (sx1278/sx1276) Устройство за Arduino, Esp8266 или Esp32: Създавам библиотека за управление на EBYTE E32 въз основа на серия Semtech на устройство LoRa, много мощно, просто и евтино устройство. Можете да намерите 3Km версия тук, 8Km версия тук Те могат да работят на разстояние от 3000m до 8000m и имат много функции и
Как да направим рекордер за данни за влажност и температура в реално време с Arduino UNO и SD-карта - DHT11 регистратор на данни Симулация в Proteus: 5 стъпки
Как да направим рекордер за данни за влажност и температура в реално време с Arduino UNO и SD-карта | DHT11 симулация на регистратор на данни в Proteus: Въведение: Здравейте, това е Liono Maker, ето линк към YouTube. Ние правим творчески проект с Arduino и работим върху вградени системи. Data-Logger: Регистратор на данни (също регистратор на данни или запис на данни) е електронно устройство, което записва данни във времето с
ESP8266 и комуникация с Python за Noobs: 6 стъпки
ESP8266 и Python комуникация за Noobs: Това ръководство ви позволява да получавате всякакви данни от ESP8266 и да ги контролирате чрез python без AT команди. За начинаещите повечето ръководства за използването на ESP8266 са трудни, защото искат да мигате „AT COMMANDS”В чип, което е: Ненужен отпадък
Как да извлечете данни от база данни Firebase на NodeMCU: 7 стъпки
Как да извлечем данни от база данни Firebase на NodeMCU: За тази инструкция ще извличаме данни от база данни в Google Firebase и ще ги извличаме с помощта на NodeMCU за по-нататъшно разбор. акаунт за създаване на база данни на Firebase. 3) Изтеглете
Събиране на данни от EAL-Industri4.0-RFID до база данни: 10 стъпки (със снимки)
EAL-Industri4.0-RFID Актуализиране на данни към база данни: Dette projekt omhandler opsamling af v æ gtdata, регистриращ се за идентифициране във vha. RFID, изоставане на данни в MySQL база данни vha. node-RED, samt fremvisning и поведение на opsamlede данни в et C# програма, създадена от en Windows Form Application