Оглавление:

ESP8266 Прямая передача данных: 3 шага
ESP8266 Прямая передача данных: 3 шага

Видео: ESP8266 Прямая передача данных: 3 шага

Видео: ESP8266 Прямая передача данных: 3 шага
Видео: Шаг №5 - Передача данных на Web страницу - ESP8266 2024, Июль
Anonim
ESP8266 Прямая передача данных
ESP8266 Прямая передача данных

Вступление

Выполнив несколько проектов с модулями Arduinos и nRF24l01, я задавался вопросом, смогу ли я сэкономить усилия, используя вместо этого модуль ESP8266. Преимущество модуля ESP8266 заключается в том, что он содержит микроконтроллер на плате, поэтому дополнительная плата Arduino не требуется. Кроме того, объем памяти ESP8266 намного больше, и что касается скорости, ESP8266 работает на максимальной частоте 160 МГц вместо 16 МГц Arduino. Конечно, есть и отрицательные стороны.

ESP8266 работает только от 3,3 В, имеет меньше контактов и не имеет хороших аналоговых входов, которые есть у Arduino (он есть, но только для 1,0 В, а не 3,3 В). Кроме того, существует гораздо больше примеров кода для Arduino + nRF24l01, чем для ESP8266, особенно когда речь идет о прямой передаче данных.

Итак, имея в виду проект, я рассмотрел тему быстрой и легкой передачи данных между двумя ESP8266 без использования всего WWW и

Во время поиска в Интернете примеров (большая часть приведенного ниже кода была взята из сети в разных местах) я столкнулся с множеством вопросов, как реализовать прямую передачу данных без хороших примеров «сделай так». Был пример кода, но в основном с вопросом, почему он не работал.

Итак, после некоторого чтения и попыток понять, я создал нижеприведенные примеры, которые позволяют быстро и просто передавать данные между двумя ESP8266.

Шаг 1. Границы и фон (TCP против UDP)

Для этого необходимо уточнить некоторые границы по сравнению с nRF24l01.

Чтобы использовать ESP8266 в среде Arduino, необходимо использовать базовую библиотеку ESP8266WiFi.h. Они могут быть разными, но в большинстве примеров используются указанные на. При использовании вам необходимо установить связь на уровне Wi-Fi.

Итак, для связи должны быть как минимум точка доступа (AP) / сервер и клиент. Точка доступа предоставляет имя сети и IP-адреса, и клиент будет подключаться к этому серверу.

Итак, по сравнению с nRF24l01, где код на обоих концах более или менее одинаков (за исключением каналов передачи), код ESP8266 принципиально отличается, так как один настроен как AP, а другой как клиент.

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

Обычно используются два протокола: TCP и UDP.

TCP (протокол управления передачей) - это протокол, который обеспечивает передачу без потерь между сервером и клиентом. Протокол включает в себя «рукопожатия» (множество флагов и подтверждений, передаваемых между обеими сторонами), а также нумерацию и обнаружение пакетов для идентификации и повторной передачи потерянных пакетов. Кроме того, используя все эти рукопожатия, протокол предотвращает потерю данных из-за одновременной отправки множества пакетов в сети. Пакеты данных ждут, пока они не будут получены.

В UDP (протоколе дейтаграмм пользователя) отсутствуют все квитирования, нумерация пакетов и повторная передача. Таким образом, накладные расходы меньше, и нет необходимости во всех рукопожатиях для поддержания соединения. UDP включает в себя базовое обнаружение ошибок, но без исправлений (поврежденный пакет просто отбрасывается). Данные отправляются без ведома, свободна ли принимающая сторона для получения данных. В то же время несколько пакетов могут конфликтовать, поскольку каждая сторона отправляет данные всякий раз, когда это необходимо. Отсутствие всех рукопожатий дает еще одну приятную особенность UDP, называемую «многоадресная рассылка» и «широковещательная рассылка». В случае «многоадресной рассылки» пакеты данных отправляются заранее определенной группе участников, в «широковещательном» пакеты данных отправляются всем подключенным членам. Это значительно сокращает передачу данных в случае, если потоки принимаются несколькими участниками (например, путем отправки видеопотока на несколько приемников или путем отправки текущего времени на несколько подключенных устройств).

На Youtube есть несколько хороших видеороликов, объясняющих это еще лучше.

Поэтому при отправке данных важно знать свои потребности:

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

Сначала я начал с реализации связи на основе TCP (между одним сервером и одним клиентом). Во время тестирования у меня возникли проблемы с остановкой трансмиссии. Вначале обмен данными происходил быстро, затем через некоторое время скорость резко упала. Я пришел к выводу, что это типичная проблема подхода TCP (что было неверно!), Поэтому я перешел на решение, основанное на UDP. Наконец, оба подошли к работе. Так что оба решения будут предоставлены.

Рисунки, приведенные ниже, имеют для TCP и UDP то общее, что они:

  • независимы от любой существующей сети Wi-Fi. Таким образом, он будет работать где угодно, вдали от Интернета и подключенных маршрутизаторов.
  • отправляют данные ASCII для печати через монитор последовательного порта.
  • отправляют данные, полученные функцией millis (), для анализа скорости передачи.
  • не тестируются для нескольких клиентов (из-за наличия оборудования для настройки сети прямо сейчас)

Шаг 2: Оборудование

Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение

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

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

Чтобы запустить скетчи, вам необходимо установить библиотеки ESP8266 (как описано во многих местах в Интернете). В обоих случаях (TCP и UDP) есть скетч сервера и клиента. Какой скетч загружен в какой модуль не имеет значения.

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

Как уже упоминалось, эскизы основаны на многих фрагментах, которые я нашел в Интернете. Я уже не помню, где я что нашел, что это за исходный код или что я изменил. Так что я просто хотел поблагодарить большое сообщество в целом за публикацию всех замечательных примеров.

Шаг 3: наброски

Код состоит из двух эскизов каждый (как объяснено), эскиза сервера и эскиза клиента, для TCP и UDP каждый.

Рекомендуемые: