Arduino:Примеры/UDPSendReceiveString: различия между версиями
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">») |
Нет описания правки |
||
Строка 28: | Строка 28: | ||
==Код к Arduino== | ==Код к Arduino== | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
/* | /* | ||
Отправка и передача строк через UPD | Отправка и передача строк через UPD | ||
Строка 110: | Строка 110: | ||
Скопируйте скетч к '''Processing''', указанный ниже. Если вы напишите в окне этого скетча любую букву, он отошлет на '''Arduino''' текстовое сообщение (через '''UDP'''). | Скопируйте скетч к '''Processing''', указанный ниже. Если вы напишите в окне этого скетча любую букву, он отошлет на '''Arduino''' текстовое сообщение (через '''UDP'''). | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
/* | /* | ||
Скетч к Processing для работы с этим примером | Скетч к Processing для работы с этим примером |
Версия от 12:34, 20 мая 2023
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Отправка и получение текстовых строк через UDP [1]
В данном примере вы воспользуетесь Arduino и Ethernet Shield для передачи и получения текстовых сообщений через протокол UDP (Universal Datagram Packet, т.е. «протокол пользовательских датаграмм»). Еще вам понадобится другой девайс (можно компьютер), которому вы будете отправлять эти строки и от которого вы будете их получать. Кроме того, в самом низу представлен скетч Processing, через который вы и будете осуществлять передачу данных.
Необходимое оборудование
- Сетевой модуль Arduino Ethernet Shield;
- Плата Arduino, совместимая с Ethernet Shield;
Цепь
Ethernet Shield позволяет подключить Arduino к Ethernet-контроллеру WizNet (через SPI-шину), и для этого подключения используются 10-ый, 11-ый, 12-ый и 13-ый контакты. У последних моделей Shield имеется встроенный слот для SD-карты. Управление SS-контактом этой SD-карты осуществляется при помощи 4-ого цифрового контакта.
Ethernet Shield должен быть подключен к сети посредством Ethernet-кабеля. Также вам надо будет поменять сетевые настройки скетча, чтобы они соответствовали настройкам вашей сети.
Ethernet Shield крепится поверх платы Arduino
Схема
Код к Arduino
/*
Отправка и передача строк через UPD
Этот скетч получает текстовые строки (через UPD), выводит их на Serial Monitor,
а затем отсылает «подтвержденную» строку обратно отправителю.
Ниже прилагается скетч к Processing, который можно использовать
для отправки и получения сообщений (если вы тестируете этот пример при помощи компьютера).
Создан 21 августа 2010 Майклом Марголисом (Michael Margolis).
Этот код не защищен авторским правом.
*/
#include <SPI.h> // требуется для Arduino версий 0018 и позже
#include <Ethernet.h>
#include <EthernetUdp.h> // библиотека UDP library (из bjoern@cs.stanford.edu 12/30/2008)
// Ниже введите MAC-адрес и IP-адрес вашего контроллера.
// IP-адрес будет зависеть от вашей локальной сети:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 177);
unsigned int localPort = 8888; // локальный порт, который будем прослушивать
// буферы для получения и отправки данных char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; // буфер, в котором будет храниться входящий пакет
char ReplyBuffer[] = "acknowledged"; // строка, которая будет отсылаться обратно
// Создаем экземпляр класса EthernetUDP, чтобы отправлять и получать пакеты через UDP:
EthernetUDP Udp;
void setup() {
// Запускаем Ethernet и UDP:
Ethernet.begin(mac,ip);
Udp.begin(localPort);
Serial.begin(9600);
}
void loop() {
// Если есть какие-либо доступные данные, считываем пакет:
int packetSize = Udp.parsePacket();
if(packetSize)
{
Serial.print("Received packet of size "); // "Получен пакет размером "
Serial.println(packetSize);
Serial.print("From "); // "От "
IPAddress remote = Udp.remoteIP();
for (int i =0; i < 4; i++)
{
Serial.print(remote[i], DEC);
if (i < 3)
{
Serial.print(".");
}
}
Serial.print(", port "); // ", порт "
Serial.println(Udp.remotePort());
// Считываем пакет в packetBufffer:
Udp.read(packetBuffer,UDP_TX_PACKET_MAX_SIZE);
Serial.println("Contents:"); // "Содержимое:"
Serial.println(packetBuffer);
// Отсылаем ответ. Получатель – IP-адрес и порт,
// от которых пришел полученный нами пакет:
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
Udp.write(ReplyBuffer);
Udp.endPacket();
}
delay(10);
}
Код к Processing
Скопируйте скетч к Processing, указанный ниже. Если вы напишите в окне этого скетча любую букву, он отошлет на Arduino текстовое сообщение (через UDP).
/*
Скетч к Processing для работы с этим примером
=====================================================
// Скетч Processing для работы с UDP.
// Отправляет на Arduino и получает обратно строковые данные.
// Нажмите любую клавишу, чтобы отправить сообщение "Hello Arduino".
*/
import hypermedia.net.*;
UDP udp; // определяем UDP-объект
void setup() {
udp = new UDP( this, 6000 ); // создаем новое UDP-соединение через порт 6000
//udp.log( true ); // <-- эта строчка кода отображает информацию об активности соединения
udp.listen( true ); // и ждем входящего сообщения
}
void draw()
{
}
void keyPressed() {
String ip = "192.168.1.177"; // IP-адрес устройства-получателя
int port = 8888; // порт-адресат
udp.send("Hello World", ip, port ); // сообщение, которое будем отправлять
}
void receive( byte[] data ) { // <-- стандартная функция для выполнения задачи
//void receive( byte[] data, String ip, int port ) { // <-- расширенная функция для выполнения задачи
for(int i=0; i < data.length; i++)
print(char(data[i]));
println();
}
См.также
- Arduino Ethernet Shield
- Getting started with the ethernet shield
- Ethernet library
- ChatServer
- ChatClient
- WebClient
- WebServer
- PachubeClient?
- PachubeClientString?
- BarometricPressureWebServer
- UDPSendReceiveString
- UdpNtpClient