Найти тему
narod stream

ESP32 Урок 20. Wi-Fi. STA. UDP Client. Передача данных

Продолжаем тему передачи данных по беспроводной сети. На данном уроке мы попробуем теперь передать какие-то осознанные данные. Для этого мы воспользуемся транспортным протоколом UDP, так как для этого в IDF всё имеется в наличии и нам не потребуется самостоятельно формировать наши пакеты. На данном уроке мы попытаемся сочинить простенький UDP-клиент, который будет передавать в сеть на определённый адрес и порт постоянно инкрементирующиеся 16-разрядные знаковые величины. Причём сочинить даже громко сказано, так как мы это уже проделывали с контроллером ESP8266 в уроке 24.

Для создания UDP-клиента мы будем использовать библиотеку LWIP, с которой мы также очень хорошо знакомы и которая также входит в состав IDF.

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

Схема у нас будет та же самая — отладочная плата, подключенная к USB компьютера

Проект мы создадим из проекта прошлого урока с именем WIFI_STA и назовём его WIFI_STA_UDP_CLIENT_TX.

Откроем наш проект в Espressif IDE и добавим в файл Kconfig.projbuild ещё три пункта, один для IP-адреса сервера, два других — для портов сервера и клиента

Добавим также ещё один модуль для работы с протоколом UDP, состоящий из двух файлов следующего содержания

udp.h

udp.c

Подключим нашу библиотеку в main.h

Не забываем про CMakeLists.txt

set(COMPONENT_SRCS "main.c wifi.c udp.c")

Сохраним все файлы и попробуем собрать проект.

Если всё нормально собралось, то объявим и проинициализируем глобальный символьный массив для имени лога и добавим функцию для задачи обмена по протоколу UDP в файле udp.c

Создадим для данной функции прототип и создадим такую задачу в функции app_main файла main.c

В конфигураторе проверим и при необходимости настроим адреса

-2

В файле udp.h подключим библиотеки для работы с стеком протоколов LWIP

Вернёмся в функцию udp_task файла udp.c и объявим несколько переменных, обычно используемых при работе с сокетами, а также переменную для работы с точной задержкой

Выведем соответствующее сообщение в лог и попытаемся создать сокет

Очистим память полей переменных типов структур и проинициализируем переменную для адреса клиента

Попытаемся связать сокет с адресом клиента

Заполним информацию о сервере

Запишем время в переменную для задержки

А далее в цикле, который получится бесконечным, мы отправляем пакет с числом на сервер раз в 10 милисекунд

А затем мы, как полагается, завершим наше соединение и уничтожим задачу, хотя мы вряд ли сюда когда-то попадём, но для порядка всё же добавим данный код

Вот и готов наш клиент.

Соберём наш код, прошьём контроллер и посмотрим, что у нас в терминале

-3

Судя по сообщениям, к точке доступа мы подключились, сокет создан и связан с клиентом. Также у нас успешно работает параллельная задача.

То, что пакеты сейчас из нашего клиента передаются вникуда, это вполне нормально для UDP, он же не требует соединения.

Проверим сначала, как наши пакеты приходят в приложение в смартфоне.

Для этого устанавливаем приложение (ссылка и QR-код для установки внизу страницы, возможно они могут не работать, тогда ищем в Play Market UDP TCP vlad_emb и приложение найдётся) на смартфон (или планшет), запускаем его и жмём единственную кнопку Start. Соответственно, наше мобильное устройство должно быть подключено к той же сети и его адрес должен быть конфигураторе.

Если всё нормально, то на дисплее мы увидим, как приходят и отображаются числа с клиента

-4

Можно нажать кнопку Stop, в которую превратилась кнопка Start и прекратить приём чисел.

Теперь давайте запустим приложение на компьютере (ссылка также внизу страницы), которое достаточно просто запустить, установка не требуется. Далее вместо IP-адреса мобильного устройства мы заносим в конфигуратор IP-адрес компьютера, собираем и прошиваем код, и также нажимаем кнопку Start

-5

Мы видим, что циферки наши тут таким же образом бегут со скоростью 100 пакетов в секунду.

Запустим анализатор пакетов WireShark, чтобы также убедиться, что пакеты наши безошибочные (контрольная сумма в порядке).

Для этого отфильтруем пакеты по IP-адресу нашего ESP32 (а его мы видели в терминальной программе в момент соединения с точкой доступа)

-6

Итак, на данном занятии нам удалось создать простой UDP-клиент с использованием библиотеки LWIP. Пусть этот клиент умеет пока только передавать данные, но самое главное, что мы с данного урока начали обмен данными по беспроводной сети с использованием контроллера ESP32.

Всем спасибо за внимание!

Оригинал статьи находится здесь.

<<Предыдущий урок | Следующий урок>>

Исходный код

TCP UDP client-server for Android

QR-код на скачивание приложения:

-7

UDP server for Windows

Недорогие отладочные платы ESP32 можно купить здесь: Недорогие отладочные платы ESP32

Видео в RuTube

Программирование МК ESP32. Урок 20. Wi-Fi. STA. UDP Client. Передача данных

Видео в Дзен

Видео в Youtube