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.
Код
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 <WiFi101.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
47 // пытаемся подключиться к WiFi-сети:
48 while ( status != WL_CONNECTED) {
49 Serial.print("Attempting to connect to SSID: "); // "Пытаемся подключиться к SSID: "
50 Serial.println(ssid);
51 // подключаемся к WPA/WPA2 сети (при подключении к открытой сети и WEP-сети эту строчку нужно поменять):
52 status = WiFi.begin(ssid);
53
54 // 10 секунд ждем подключения:
55 delay(10000);
56 }
57 Serial.println("Connected to wifi"); // "Подключились к WiFi"
58 printWifiStatus();
59
60 Serial.println("\nStarting connection to server..."); // "\n Начинаем подключаться к серверу..."
61 // если подключились, сообщаем об этом через монитор порта:
62 Udp.begin(localPort);
63 }
64
65 void loop() {
66
67 // если есть какие-либо доступные данные, считываем пакет:
68 int packetSize = Udp.parsePacket();
69 if (packetSize) {
70 Serial.print("Received packet of size "); // "Получен пакет размером "
71 Serial.println(packetSize);
72 Serial.print("From "); // "От "
73 IPAddress remoteIp = Udp.remoteIP();
74 Serial.print(remoteIp);
75 Serial.print(", port "); // ", порт "
76 Serial.println(Udp.remotePort());
77
78 // считываем пакет в packetBufffer:
79 int len = Udp.read(packetBuffer, 255);
80 if (len > 0) {
81 packetBuffer[len] = 0;
82 }
83 Serial.println("Contents:"); // "Содержимое:"
84 Serial.println(packetBuffer);
85
86 // отправляет ответ на IP-адрес и порт, откуда был получен пакет:
87 Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
88 Udp.write(ReplyBuffer);
89 Udp.endPacket();
90 }
91 }
92
93 void printWifiStatus() {
94 // показываем SSID сети, к которой подключились:
95 Serial.print("SSID: ");
96 Serial.println(WiFi.SSID());
97
98 // показываем IP-адрес WiFi-модуля:
99 IPAddress ip = WiFi.localIP();
100 Serial.print("IP Address: "); // "IP-адрес: "
101 Serial.println(ip);
102
103 // показываем мощность приемного сигнала:
104 long rssi = WiFi.RSSI();
105 Serial.print("signal strength (RSSI):"); // "Мощность сигнала (RSSI):"
106 Serial.print(rssi);
107 Serial.println(" dBm"); // "дБм"
108 }
См.также
- 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.
Внешние ссылки