Arduino:Примеры/Wifi101WiFiUdpSendReceiveString
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Отправка и получение 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.
На картинке выше модуль 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"); // "дБм"
}
См.также
- WiFi library – Your reference for the WiFi101 Library.
- WiFi Shield – Product details for the WiFi 101 Shield.
- MKR1000 – Product details for the MKR1000 board.
- Connect No Encryption - Demonstrates how to connect to an open network.
- Connect With WEP - Demonstrates how to connect to a network that is encrypted with WEP.
- Connect With WPA - Demonstrates how to connect to a network that is encrypted with WPA2 Personal.
- Scan Networks - Displays all WiFi networks in range.
- Simple Web Server WiFi – Turn on and off an LED accessing this simple Web Server.
- UDP NTP Client - Query a Network Time Protocol (NTP) server using UDP.
- WiFi Chat Server - Set up a simple chat server.
- WiFi Web Client - Connect to a remote webserver.
- WiFi Web Client Repeating - Repeatedly make HTTP calls to a server.
- WiFi Web Server - Serve a webpage from the WiFi shield with Analog Input values.