Arduino:Примеры/UDPSendReceiveString

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

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Отправка и получение текстовых строк через 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();   
}

См.также

  1. Arduino Ethernet Shield
  2. Getting started with the ethernet shield
  3. Ethernet library
  4. ChatServer
  5. ChatClient
  6. WebClient
  7. WebServer
  8. PachubeClient?
  9. PachubeClientString?
  10. BarometricPressureWebServer
  11. UDPSendReceiveString
  12. UdpNtpClient

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