Arduino:Примеры/WiFiSendReceiveUDPString: различия между версиями
Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Myagkij (обсуждение | вклад) м (Замена текста — «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">» на «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">») |
Нет описания правки |
||
Строка 24: | Строка 24: | ||
==Код== | ==Код== | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
/* | /* | ||
Отправка и получение UDP-пакетов через WiFi-модуль | Отправка и получение UDP-пакетов через WiFi-модуль |
Версия от 12:35, 20 мая 2023
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.
Отправка и получение 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.
На картинке выше плата Arduino находится под WiFi-модулем Arduino.
Код
/*
Отправка и получение UDP-пакетов через WiFi-модуль
Этот скетч, используя WiFi-модуль, прослушивает localPort, ожидая
прихода UDP-пакета. Получив его, скетч отправляет клиенту ответный
пакет с подтверждением, делая это через порт remotePort.
Цепь:
* WiFi-модуль, подключенный к плате Arduino
Создан 30 декабря 2012 года пользователем dlf (Metodo2 srl)
*/
#include <SPI.h>
#include <WiFi.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);
}
String fv = WiFi.firmwareVersion();
if (fv != "1.1.0") {
Serial.println("Please upgrade the firmware"); // "Пожалуйста, обновите прошивку"
}
// пытаемся подключиться к 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"); // "дБм"
}
См.также
- ConnectNoEncryption : Demonstrates how to connect to an open network
- ConnectWithWEP : Demonstrates how to connect to a network that is encrypted with WEP
- ConnectWithWPA : Demonstrates how to connect to a network that is encrypted with WPA2 Personal
- ScanNetworks : Displays all WiFi networks in range
- WiFiChatServer : Set up a simple chat server
- WiFiWebClient : Connect to a remote webserver
- WiFiWebClientRepeating: Repeatedly make HTTP calls to a server
- WiFiWebServer : Serve a webpage from the WiFi shield