Arduino:Примеры/Wifi101WiFiUdpSendReceiveString

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

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


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

Этот скетч прослушивает локальный порт, ожидая прихода UDP-пакета. Получив корректный пакет, он отсылает клиенту пакет с подтверждением через указанный исходящий порт. Он полагается на WiFi-подключение к LAN-сети, сделанное при помощи платы MKR1000 или комбинации из платы Arduino/Genuino Zero и модуля WiFi Shield 101.

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

  • Модуль Arduino WiFi Shield 101
  • Плата Arduino или Genuino Zero (или MKR1000)

Цепь

7-ой цифровой контакт используется в качестве контакта для «рукопожатия» между WiFi Shield 101 и платой, т.е. ни для каких других целей его использовать не следует.

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

ArduinoWiFi101.png

На картинке выше модуль WiFi Shield 101 установлен поверх платы Arduino/Genuino Zero.

Код

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

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

 Цепь:
 * WiFi-модуль, подключенный к плате Arduino

 Создан 30 декабря 2012 года пользователем dlf (Metodo2 srl)

 */


#include <SPI.h>
#include <WiFi101.h>
#include <WiFiUdp.h>

int status = WL_IDLE_STATUS;
char ssid[] = "yourNetwork"; //  ваш SSID (название точки доступа)
char pass[] = "secretPassword";    // пароль к точке доступа (пароль для WPA или ключ для WEP)
int keyIndex = 0;            // номер ключа (нужно только для WEP)

unsigned int localPort = 2390;      // локальный порт, который нужно прослушивать

char packetBuffer[255]; // буфер для хранения входящего пакета
char  ReplyBuffer[] = "acknowledged";       // "подтверждено" – строка, которая будет отправлена обратно

WiFiUDP Udp;

void setup() {
  // инициализируем последовательную коммуникацию и ждем открытия порта:
  Serial.begin(9600);
  while (!Serial) {
    ; // ждем подключения последовательного порта (нужно только для плат со штатным USB-портом)
  }

  // проверяем наличие WiFi-модуля:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");  // "WiFi-модуль не подключен"
    // дальше не продолжаем:
    while (true);
  }


  // пытаемся подключиться к WiFi-сети:
  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");  // "Пытаемся подключиться к SSID: "
    Serial.println(ssid);
    // подключаемся к WPA/WPA2 сети (при подключении к открытой сети и WEP-сети эту строчку нужно поменять):
    status = WiFi.begin(ssid);

    // 10 секунд ждем подключения:
    delay(10000);
  }
  Serial.println("Connected to wifi");  // "Подключились к WiFi"
  printWifiStatus();

  Serial.println("\nStarting connection to server...");   // "\n Начинаем подключаться к серверу..."
  // если подключились, сообщаем об этом через монитор порта:
  Udp.begin(localPort);
}

void loop() {

  // если есть какие-либо доступные данные, считываем пакет:
  int packetSize = Udp.parsePacket();
  if (packetSize) {
    Serial.print("Received packet of size ");  // "Получен пакет размером "
    Serial.println(packetSize);
    Serial.print("From ");  // "От "
    IPAddress remoteIp = Udp.remoteIP();
    Serial.print(remoteIp);
    Serial.print(", port ");  // ", порт "
    Serial.println(Udp.remotePort());

    // считываем пакет в packetBufffer:
    int len = Udp.read(packetBuffer, 255);
    if (len > 0) {
      packetBuffer[len] = 0;
    }
    Serial.println("Contents:");   // "Содержимое:"
    Serial.println(packetBuffer);

    // отправляет ответ на IP-адрес и порт, откуда был получен пакет:
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
    Udp.write(ReplyBuffer);
    Udp.endPacket();
  }
}

void printWifiStatus() {
  // показываем SSID сети, к которой подключились:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // показываем IP-адрес WiFi-модуля:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");  // "IP-адрес: "
  Serial.println(ip);

  // показываем мощность приемного сигнала:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");   // "Мощность сигнала (RSSI):"
  Serial.print(rssi);
  Serial.println(" dBm");  // "дБм"
}

См.также

  1. WiFi library – Your reference for the WiFi101 Library.
  2. WiFi Shield – Product details for the WiFi 101 Shield.
  3. MKR1000 – Product details for the MKR1000 board.
  4. Connect No Encryption - Demonstrates how to connect to an open network.
  5. Connect With WEP - Demonstrates how to connect to a network that is encrypted with WEP.
  6. Connect With WPA - Demonstrates how to connect to a network that is encrypted with WPA2 Personal.
  7. Scan Networks - Displays all WiFi networks in range.
  8. Simple Web Server WiFi – Turn on and off an LED accessing this simple Web Server.
  9. UDP NTP Client - Query a Network Time Protocol (NTP) server using UDP.
  10. WiFi Chat Server - Set up a simple chat server.
  11. WiFi Web Client - Connect to a remote webserver.
  12. WiFi Web Client Repeating - Repeatedly make HTTP calls to a server.
  13. WiFi Web Server - Serve a webpage from the WiFi shield with Analog Input values.

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