Протокол UDP (User Datagram Protocol) – это простой протокол транспортного уровня в компьютерных сетях, который предоставляет возможность обмена независимыми пакетами данных (дейтаграммами) между устройствами. Протокол UDP является легковесным и обеспечивает минимальную надстройку над сетевым уровнем. В отличие от протокола TCP, UDP не гарантирует доставку пакетов в правильном порядке или проверку целостности данных. Он просто отправляет дейтаграммы на удаленное устройство и не ожидает подтверждения доставки или повторной передачи в случае потери пакета.
В этом уроке мы рассмотрим основные понятия протокола UDP и предоставим примеры кода работы с UDP на микроконтроллерах ESP32 и ESP8266.
UDP работает на более низком уровне сетевой модели, чем протокол TCP (Transmission Control Protocol). В отличие от TCP, UDP не обеспечивает гарантированную доставку, установление соединения или контроль над порядком передачи пакетов. Вместо этого он предоставляет простую механизм отправки небольших пакетов данных между устройствами в сети.
Однако, из-за отсутствия механизмов контроля и обработки ошибок, пакеты UDP могут быть потеряны, дублированы или доставлены в неправильном порядке. Поэтому приложения, использующие UDP, должны самостоятельно решать проблемы надежности доставки и контроля целостности данных, если это необходимо для их работы.
Хотя UDP не предоставляет некоторые важные функции, такие как гарантированная доставка и управление потоком, его простота и высокая производительность делают его полезным во множестве сценариев, где требуется быстрая передача данных или когда небольшие потери пакетов не являются критическими.
Для работы с микроконтроллерами ESP32 и ESP8266 в среде разработки Arduino IDE, вам потребуется установить соответствующие платформы и библиотеки. Вот шаги по подготовке среды разработки Arduino IDE для работы с ESP32 и ESP8266:
Установите Arduino IDE:
Добавьте платформу ESP32 в Arduino IDE:
https://dl.espressif.com/dl/package_esp32_index.json
Установите платформу ESP32:
Выберите плату ESP32 в Arduino IDE:
Теперь ваша среда разработки Arduino IDE настроена для работы с микроконтроллерами ESP32.
Установите Arduino IDE:
Добавьте платформу ESP8266 в Arduino IDE:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Установите платформу ESP8266:
Выберите плату ESP8266 в Arduino IDE:
Теперь ваша среда разработки Arduino IDE настроена для работы с микроконтроллерами ESP8266.
После завершения этих шагов вы сможете разрабатывать и загружать программы на микроконтроллеры ESP32 и ESP8266 через Arduino IDE. Обратите внимание, что для каждого проекта вам также потребуется правильно подключить ESP32 или ESP8266 к компьютеру для прошивки.
/* Сайт автора https://arduino-tex.ru/ Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html Проекты на ESP https://arduino-tex.ru/menu/10/11/proekty-na-esp8266-esp32.html Страница урока https://arduino-tex.ru/news/171/osnovnye-ponyatiya-protokola-udp-primer-raboty-udp-s-esp32-i.html */ #include <WiFi.h> #include <WiFiUdp.h> const char* ssid = "Ваш_SSID"; // Ваш SSID const char* password = "Ваш_пароль"; // Ваш пароль const char* udpServerIP = "IP_получателя"; // IP получателя const int udpServerPort = 8888; // Порт получателя WiFiUDP udp; String deviceName = "ESP32"; // Имя устройства, которое будет добавлено к отправляемому сообщению void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Подключение к WiFi..."); } Serial.println("Подключено к WiFi!"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); udp.begin(udpServerPort); // Инициализация UDP для приема данных } void loop() { if (WiFi.status() == WL_CONNECTED) { // Передача данных по UDP udp.beginPacket(udpServerIP, udpServerPort); udp.printf("[%s] Привет, это сообщение от %s!", deviceName.c_str(), deviceName.c_str()); udp.endPacket(); // Прием данных по UDP int packetSize = udp.parsePacket(); if (packetSize) { char incomingPacket[255]; int len = udp.read(incomingPacket, 255); if (len > 0) { incomingPacket[len] = 0; Serial.printf("Получено сообщение: %s\n", incomingPacket); } } } delay(1000); }
/* Сайт автора https://arduino-tex.ru/ Проекты на Arduino https://portal-pk.ru/page-17/proekty-na-arduino.html Проекты на ESP https://arduino-tex.ru/menu/10/11/proekty-na-esp8266-esp32.html Страница урока https://arduino-tex.ru/news/171/osnovnye-ponyatiya-protokola-udp-primer-raboty-udp-s-esp32-i.html */ #include <ESP8266WiFi.h> #include <WiFiUdp.h> const char* ssid = "Ваш_SSID"; // Ваш SSID const char* password = "Ваш_пароль"; // Ваш пароль const char* udpServerIP = "IP_получателя"; // IP получателя const int udpServerPort = 8888; // Порт получателя WiFiUDP udp; String deviceName = "ESP8266"; // Имя устройства, которое будет добавлено к отправляемому сообщению void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Подключение к WiFi..."); } Serial.println("Подключено к WiFi!"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); udp.begin(udpServerPort); // Инициализация UDP для приема данных } void loop() { if (WiFi.status() == WL_CONNECTED) { // Передача данных по UDP udp.beginPacket(udpServerIP, udpServerPort); udp.printf("[%s] Привет, это сообщение от %s!", deviceName.c_str(), deviceName.c_str()); udp.endPacket(); // Прием данных по UDP int packetSize = udp.parsePacket(); if (packetSize) { char incomingPacket[255]; int len = udp.read(incomingPacket, 255); if (len > 0) { incomingPacket[len] = 0; Serial.printf("Получено сообщение: %s\n", incomingPacket); } } } delay(1000); }
Код для ESP32 и ESP8266 примерно одинаковый, так как оба микроконтроллера используют библиотеку WiFiUdp для работы с UDP. В обоих примерах мы подключаемся к Wi-Fi, передаем сообщение по UDP и при необходимости получаем данные. В примерах кода переменная deviceName
определяет имя микроконтроллера и будет добавляться к
отправляемому сообщению. Это позволит вам легко определить, с какого
устройства было отправлено каждое сообщение.
Чтобы использовать эти примеры, замените "Ваш_SSID", "Ваш_пароль" и "IP_получателя" на соответствующие значения вашей сети и устройства. Вы также можете изменить порт udpServerPort
на любой другой доступный порт, если требуется.
Теперь код отправляет сообщение с указанием имени устройства, что позволяет идентифицировать отправителя каждого сообщения. Это делает работу с протоколом UDP на ESP32 и ESP8266 более удобной и понятной.
Обратите внимание, что UDP не обеспечивает проверку доставки или исправление ошибок, поэтому если надежность критична для вашего приложения, вы можете реализовать дополнительную логику для обработки потерянных пакетов или использовать протокол TCP, который обеспечивает устойчивое соединение и гарантированную доставку данных, но может быть менее быстрым.
В этой уроке мы рассмотрели основные понятия протокола UDP и предоставили примеры кода для работы с UDP на микроконтроллерах ESP32 и ESP8266. UDP представляет собой простой и эффективный способ передачи данных в приложениях, где быстродействие важнее надежности.
Мы рады объявить о нашем присутствии на Boosty! Arduino-Tex приглашает всех наших друзей и последователей поддержать нас на этой замечательной платформе. Здесь вы найдете эксклюзивный контент, уникальные проекты и возможность стать частью нашей творческой команды. Присоединяйтесь к нам на Boosty и вместе мы сделаем мир Arduino еще удивительнее!
Удачи в вашем эксперименте с протокола UDP!
Понравился урок. Основные понятия протокола UDP. Пример работы UDP с ESP32 и ESP8266? Не забудь поделиться с друзьями в соц. сетях.
А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.
Спасибо за внимание!
Технологии начинаются с простого!
Фотографии к статье
Файлы для скачивания
![]() |
Пример кода UDP ESP32.ino | 2 Kb | 601 | Скачать |
![]() |
Пример кода UDP ESP8266.ino | 2 Kb | 558 | Скачать |
Уроки ESP32 и ESP8266
19 июля , 2023
Комментариев:0
Файлов для скачивания:2
Фото:5
Понравилась статья? Нажми
Виджеты для Easy HMI
Читайте также
Мы в соц сетях
Комментарии