Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/WiFiSendReceiveUDPString

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Отправка и получение UDP-пакетов через WiFi-модуль [1]

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

Необходимое оборудование

  • WiFi-модуль Arduino
  • Плата Arduino, совместимая с WiFi-модулем

Цепь

Чтобы выполнить SPI-соединение с модулем HDG104, WiFi-модуль использует 10-ый, 11-ый, 12-ый и 13-ый контакты. WiFi-модуль использует 10-ый, 11-ый, 12-ый и 13-ый контакты. Для управления SS-контактом SD-карты используется 4-ый цифровой контакт.

Кроме того, для этого скетча нужен доступ к беспроводной сети типа 802.11b/g, подключенной к интернету. Также в скетче нужно будет поменять сетевые настройки, чтобы они соответствовали настройкам вашей SSID.

WiFiShield bb.png

На картинке выше плата Arduino находится под WiFi-модулем Arduino.

Код

  1. /*
  2.  Отправка и получение UDP-пакетов через WiFi-модуль
  3.  
  4.  Этот скетч, используя WiFi-модуль, прослушивает localPort, ожидая
  5.  прихода UDP-пакета. Получив его, скетч отправляет клиенту ответный
  6.  пакет с подтверждением, делая это через порт remotePort.
  7.  
  8.  Цепь:
  9.  * WiFi-модуль, подключенный к плате Arduino
  10.  
  11.  Создан 30 декабря 2012 года пользователем dlf (Metodo2 srl)
  12.  
  13.  */
  14.  
  15.  
  16. #include <SPI.h>
  17. #include <WiFi.h>
  18. #include <WiFiUdp.h>
  19.  
  20. int status = WL_IDLE_STATUS;
  21. char ssid[] = "yourNetwork"; //  ваш SSID (название точки доступа)
  22. char pass[] = "secretPassword";    // пароль к точке доступа (пароль для WPA или ключ для WEP)
  23. int keyIndex = 0;            // номер ключа (нужно только для WEP)
  24.  
  25. unsigned int localPort = 2390;      // локальный порт, который нужно прослушивать
  26.  
  27. char packetBuffer[255]; // буфер для хранения входящего пакета
  28. char  ReplyBuffer[] = "acknowledged";       // "подтверждено" – строка, которая будет отправлена обратно
  29.  
  30. WiFiUDP Udp;
  31.  
  32. void setup() {
  33.   // инициализируем последовательную коммуникацию и ждем открытия порта:
  34.   Serial.begin(9600);
  35.   while (!Serial) {
  36.     ; // ждем подключения последовательного порта (нужно только для плат со штатным USB-портом)
  37.   }
  38.  
  39.   // проверяем наличие WiFi-модуля:
  40.   if (WiFi.status() == WL_NO_SHIELD) {
  41.     Serial.println("WiFi shield not present");  // "WiFi-модуль не подключен"
  42.     // дальше не продолжаем:
  43.     while (true);
  44.   }
  45.  
  46.   String fv = WiFi.firmwareVersion();
  47.   if (fv != "1.1.0") {
  48.     Serial.println("Please upgrade the firmware");  // "Пожалуйста, обновите прошивку"
  49.   }
  50.  
  51.   // пытаемся подключиться к WiFi-сети:
  52.   while (status != WL_CONNECTED) {
  53.     Serial.print("Attempting to connect to SSID: ");  // "Пытаемся подключиться к SSID: "
  54.     Serial.println(ssid);
  55.     // подключаемся к сети с шифрованием WPA/WPA2. Если используете открытую сеть или WEP, поменяйте эту строчку:
  56.     status = WiFi.begin(ssid);
  57.  
  58.     // 10 секунд ждем подключения:
  59.     delay(10000);
  60.   }
  61.   Serial.println("Connected to wifi");  // "Подключение к WiFi-точке установлено"
  62.   printWifiStatus();
  63.  
  64.   Serial.println("\nStarting connection to server...");   // "\nНачинаем подключаться к серверу..."
  65.   // если соединение установлено, сообщаем об этом через монитор порта:
  66.   Udp.begin(localPort);
  67. }
  68.  
  69. void loop() {
  70.  
  71.   // если есть какие-либо доступные данные, считываем пакет:
  72.   int packetSize = Udp.parsePacket();
  73.   if (packetSize) {
  74.     Serial.print("Received packet of size ");  // "Получен пакет размером "
  75.     Serial.println(packetSize);
  76.     Serial.print("From ");  // "От "
  77.     IPAddress remoteIp = Udp.remoteIP();
  78.     Serial.print(remoteIp);
  79.     Serial.print(", port ");  // ", порт "
  80.     Serial.println(Udp.remotePort());
  81.  
  82.     // считываем пакет в packetBufffer:
  83.     int len = Udp.read(packetBuffer, 255);
  84.     if (len > 0) {
  85.       packetBuffer[len] = 0;
  86.     }
  87.     Serial.println("Contents:");   // "Содержимое:"
  88.     Serial.println(packetBuffer);
  89.  
  90.     // отправляет ответ на IP-адрес и порт, откуда был получен пакет:
  91.     Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
  92.     Udp.write(ReplyBuffer);
  93.     Udp.endPacket();
  94.   }
  95. }
  96.  
  97.  
  98. void printWifiStatus() {
  99.   // показываем SSID сети, к которой подключились:
  100.   Serial.print("SSID: ");
  101.   Serial.println(WiFi.SSID());
  102.  
  103.   // показываем IP-адрес WiFi-модуля:
  104.   IPAddress ip = WiFi.localIP();
  105.   Serial.print("IP Address: ");  // "IP-адрес: "
  106.   Serial.println(ip);
  107.  
  108.   // показываем мощность приемного сигнала:
  109.   long rssi = WiFi.RSSI();
  110.   Serial.print("signal strength (RSSI):");   // "Мощность сигнала (RSSI):"
  111.   Serial.print(rssi);
  112.   Serial.println(" dBm");  // "дБм"
  113. }

См.также

  1. ConnectNoEncryption : Demonstrates how to connect to an open network
  2. ConnectWithWEP : Demonstrates how to connect to a network that is encrypted with WEP
  3. ConnectWithWPA : Demonstrates how to connect to a network that is encrypted with WPA2 Personal
  4. ScanNetworks : Displays all WiFi networks in range
  5. WiFiChatServer : Set up a simple chat server
  6. WiFiWebClient : Connect to a remote webserver
  7. WiFiWebClientRepeating: Repeatedly make HTTP calls to a server
  8. WiFiWebServer : Serve a webpage from the WiFi shield

Внешние ссылки

  1. Arduino.cc - WiFiSendReceiveUDPString