NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

Arduino IDE(EthernetUDP.available関数の使い方)

■EthernetUDP.available関数
 EthernetUDPクラス※1のUDP.available関数は、バッファから読み込み可能なバイト数(文字数)を取得します。
 これは既に到着したデータです。
 この関数は、UDP.parsePacket関数の後にのみ正常に呼び出すことができます。
 available関数はStreamユーティリティー・クラスから継承します。

Arduino Leonardo EthernetArduino Leonardo(ATmega32u4搭載)とArduinoイーサネットシールド2をひとつに合わせたArduinoボードです。MACアドレスを書いたシールがボードに貼られています。このボードで開発をするためにはArduino IDE 1.7.2以降が必要です。(2015.04.30現在)PoE (Power over Ethernet)モジュールを追加すると、LANケーブル1本で電源供給と通信が可能です。IEEE802.3af の規格に準拠した環境下で動作します。
図1:Arduino Leonardo Ethernet
以下補足です

※1:EthernetUDPのクラスは、UDPメッセージの送受信が出来ます。

 

■使用例
 Arduino IDEで使用するUDP.available関数の使い方は以下の通りです。
  例えば「Arduino Leonardo Ethernet」をPCにUSB接続し、またネットワークに接続されたLANケーブル接続して、ArduinoIDEの「ツール」→「ボード」→「Arduino Ethernet」を選択した状態にします。
 最初にEthernetUDP関数でUDP経由でパケットを送受信できるようにするEthernetUDPインスタンスを作成します。
 Ethernet.begin関数とUdp.begin関数でイーサネットUDPを開始します。
 Udp.parsePacket関数でUPDデータを読み込み、Udp.available関数でバッファから読み込み可能なバイト数が有る場合には、「"Received packet of size "」と共に受信したパケットサイズをシリアル出力します。

#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
// 下のコントローラのMACアドレスIPアドレスを入力します。
// IPアドレスはローカルネットワークに依存します:
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 177);
unsigned int localPort = 8888;      // 待機するローカルポート
EthernetUDP Udp;// UDP経由でパケットを送受信できるようにするEthernetUDPインスタンス
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //着信パケットを保持するバッファ

void setup() {
  // イーサネットUDPを開始します。
  Ethernet.begin(mac, ip);
  Udp.begin(localPort);
}

void loop() {
  int packetSize = Udp.parsePacket();
  if (Udp.available()) {
    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());
    Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE); // パケットをpacketBuffferに読み込む
    Serial.println("Contents:");
    Serial.println(packetBuffer);
  }
}
イメージ 1
図1:プログラム例

■構文
 UDP.available()

■パラメータ
 特に無し。

■戻り値
 読み込み可能なバイト数。

■補足
 特に無し。

イメージ 1 イメージ 3
励みになりますのでよければクリック下さい(^o^)/

↩【ArduinoIDE reference】目次に戻る