Arduino:Примеры/WiFiSendReceiveUDPString

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

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Отправка и получение 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

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