Основные понятия протокола UDP. Пример работы UDP с ESP32 и ESP8266.

Протокол UDP (User Datagram Protocol) – это простой протокол транспортного уровня в компьютерных сетях, который предоставляет возможность обмена независимыми пакетами данных (дейтаграммами) между устройствами. Протокол UDP является легковесным и обеспечивает минимальную надстройку над сетевым уровнем. В отличие от протокола TCP, UDP не гарантирует доставку пакетов в правильном порядке или проверку целостности данных. Он просто отправляет дейтаграммы на удаленное устройство и не ожидает подтверждения доставки или повторной передачи в случае потери пакета.

основные понятия протокола UDP и предоставим примеры кода работы с UDP на микроконтроллерах ESP32 и ESP8266.

В этом уроке мы рассмотрим основные понятия протокола UDP и предоставим примеры кода работы с UDP на микроконтроллерах ESP32 и ESP8266.

Особенности протокола UDP.

UDP работает на более низком уровне сетевой модели, чем протокол TCP (Transmission Control Protocol). В отличие от TCP, UDP не обеспечивает гарантированную доставку, установление соединения или контроль над порядком передачи пакетов. Вместо этого он предоставляет простую механизм отправки небольших пакетов данных между устройствами в сети.

UDP работает на более низком уровне сетевой модели, чем протокол TCP (Transmission Control Protocol).

Однако, из-за отсутствия механизмов контроля и обработки ошибок, пакеты UDP могут быть потеряны, дублированы или доставлены в неправильном порядке. Поэтому приложения, использующие UDP, должны самостоятельно решать проблемы надежности доставки и контроля целостности данных, если это необходимо для их работы.

Основные особенности протокола UDP:

  • Нестабильность: UDP не обеспечивает гарантии доставки пакетов или порядка их доставки. Это делает его более быстрым, чем TCP, но также менее надежным. При передаче данных через UDP следует учитывать возможность потери пакетов.
  • Без установления соединения: UDP не требует установления и разрыва соединения между отправителем и получателем. Каждый пакет рассматривается как отдельное сообщение.
  • Отсутствие заголовка UDP: В отличие от протокола TCP, который имеет сложный заголовок с различными управляющими флагами и метаданными, UDP не имеет отдельного заголовка. Вместо этого, каждая дейтаграмма содержит только минимальную информацию, необходимую для маршрутизации и доставки данных, такую как порты отправителя и получателя, длина пакета. Это делает UDP более простым и легковесным протоколом.
  • Применение: UDP широко используется во многих приложениях, где высокая скорость передачи данных важнее гарантированной доставки. Примеры включают видео- и аудиопотоки в реальном времени, онлайн-игры, протоколы потокового видео (например, UDP-based MPEG Transport Stream).

Отсутствие заголовка UDP: В отличие от протокола TCP, который имеет сложный заголовок

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

Подготовка Arduino IDE для работы с ESP32 и ESP8266.

Для работы с микроконтроллерами ESP32 и ESP8266 в среде разработки Arduino IDE, вам потребуется установить соответствующие платформы и библиотеки. Вот шаги по подготовке среды разработки Arduino IDE для работы с ESP32 и ESP8266:

Подготовка среды для работы с ESP32:

Установите Arduino IDE:

Добавьте платформу ESP32 в Arduino IDE:

  • Запустите Arduino IDE.
  • В меню "Файл (File)" выберите "Настройки (Preferences)".
  • В поле "Дополнительные ссылки для менеджера плат (Additional Boards Manager URLs)" добавьте следующую ссылку:
https://dl.espressif.com/dl/package_esp32_index.json
  • Нажмите "OK".

Дополнительные ссылки для менеджера платы

Установите платформу ESP32:

  • В меню "Инструменты (Tools)" выберите "Плата (Board)" > "Менеджер плат (Boards Manager)".
  • В поисковой строке введите "esp32".
  • Установите последнюю версию пакета "esp32" от Espressif Systems.

Выберите плату ESP32 в Arduino IDE:

  • В меню "Инструменты (Tools)" выберите "Плата (Board)" > "ESP32 Arduino" > выберите модель ESP32, которую вы используете (например, "ESP32 Dev Module").

Теперь ваша среда разработки Arduino IDE настроена для работы с микроконтроллерами ESP32.

Подготовка среды для работы с ESP8266:

Установите Arduino IDE:

Добавьте платформу ESP8266 в Arduino IDE:

  • Запустите Arduino IDE.
  • В меню "Файл (File)" выберите "Настройки (Preferences)".
  • В поле "Дополнительные ссылки для менеджера плат (Additional Boards Manager URLs)" добавьте следующую ссылку:
http://arduino.esp8266.com/stable/package_esp8266com_index.json

  • Нажмите "OK".

программировать NodeMCU в среде Arduino IDE

Установите платформу ESP8266:

  • В меню "Инструменты (Tools)" выберите "Плата (Board)" > "Менеджер плат (Boards Manager)".
  • В поисковой строке введите "esp8266".
  • Установите последнюю версию пакета "esp8266" от ESP8266 Community.

Выберите плату ESP8266 в Arduino IDE:

  • В меню "Инструменты (Tools)" выберите "Плата (Board)" > "Generic ESP8266 Module".

Теперь ваша среда разработки Arduino IDE настроена для работы с микроконтроллерами ESP8266.

После завершения этих шагов вы сможете разрабатывать и загружать программы на микроконтроллеры ESP32 и ESP8266 через Arduino IDE. Обратите внимание, что для каждого проекта вам также потребуется правильно подключить ESP32 или ESP8266 к компьютеру для прошивки.

Пример работы UDP на ESP32.

/*
   Сайт автора 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);
}


Пример работы UDP на 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 <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 определяет имя микроконтроллера и будет добавляться к отправляемому сообщению. Это позволит вам легко определить, с какого устройства было отправлено каждое сообщение.

Код для ESP32 и ESP8266 примерно одинаковый, так как оба микроконтроллера используют библиотеку WiFiUdp для работы с UDP.

Чтобы использовать эти примеры, замените "Ваш_SSID", "Ваш_пароль" и "IP_получателя" на соответствующие значения вашей сети и устройства. Вы также можете изменить порт udpServerPort на любой другой доступный порт, если требуется.

В этих примерах кода я добавил переменную deviceName, которая определяет имя микроконтроллера и будет добавляться к отправляемому сообщению.

Теперь код отправляет сообщение с указанием имени устройства, что позволяет идентифицировать отправителя каждого сообщения. Это делает работу с протоколом UDP на ESP32 и ESP8266 более удобной и понятной.

Это делает работу с протоколом UDP на ESP32 и ESP8266 более удобной и понятной.

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

В этой уроке мы рассмотрели основные понятия протокола UDP и предоставили примеры кода для работы с UDP на микроконтроллерах ESP32 и ESP8266. UDP представляет собой простой и эффективный способ передачи данных в приложениях, где быстродействие важнее надежности.


Мы рады объявить о нашем присутствии на Boosty! Arduino-Tex приглашает всех наших друзей и последователей поддержать нас на этой замечательной платформе. Здесь вы найдете эксклюзивный контент, уникальные проекты и возможность стать частью нашей творческой команды. Присоединяйтесь к нам на Boosty и вместе мы сделаем мир Arduino еще удивительнее!


Удачи в вашем эксперименте с протокола UDP!

Понравился урок. Основные понятия протокола UDP. Пример работы UDP с ESP32 и ESP8266? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

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

Технологии начинаются с простого!

Фотографии к статье

Файлы для скачивания

Пример кода UDP ESP32 Пример кода UDP ESP32.ino2 Kb 411 Скачать
Пример кода UDP ESP8266 Пример кода UDP ESP8266.ino2 Kb 379 Скачать

Комментарии

Ваше Имя*


Разработка проектов