4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

UnityでArduinoへUDP(有線LAN)で送信する

Last updated at Posted at 2019-04-30

#目次
・はじめに
・結果
・準備
・Arduinoのスケッチ
・Unity
#はじめに
UnityからArduinoへ文字を送信してみた。
UDPで有線LAN経由を使ってみた。
前回Unity側の受信ができたので、ついでに送信もやってみた次第である。
https://qiita.com/get_itchy_feet/items/0f144f49d5ee951943af
参考記事はこの辺り
https://qiita.com/nenjiru/items/d9c4e8a22601deb0425b
https://dobon.net/vb/dotnet/internet/udpclient.html
#結果
UnityからArduinoへ通信し、LEDをON/OFFさせてみた。

Unityでキーボードの入力を検知し、文字をUDPでArduinoに送信、Arduinoは受けた値によりLEDをON/OFFさせる。 #準備 ArduinoとUnityを有線LANで接続するため以下のように準備した。 以前の記事の準備と一緒 https://qiita.com/get_itchy_feet/items/36a8f9fa5983fb11ac6a 1.ハード他の準備  必要なもの ①PC ②ArduinoUNO ③LANケーブル ④EthernetShield ⑤USBケーブル(書込み用) ⑥MACアドレス  ③・・・PCとArduinoは直接ケーブルでつなげてみた。  ④・・・秋月電子で購入。DFROBOTのEthernet Shield V2.2。チップはW5100が搭載されている。  http://akizukidenshi.com/catalog/g/gM-13165/  ⑥・・・④にはMACアドレスがついていない。適当な数値は使ってはだめらしい。今回は別機器(使っていないAmazonEcho)の物を流用した。 #Arduinoのスケッチ Arduinoに以下のスケッチを書き込んだ。
arduino:ArduinoUdpReceiveTest.ino
#include <Ethernet.h>
#include <EthernetUdp.h>

byte mac[] = {
  0x00,0x71,0x??,0x??,0x??,0x??
};
IPAddress ip(192,168,2,101);
unsigned int localPort = 8888;

IPAddress remote(192,168,2,100);
unsigned int PClocalPort = 8887;

char packetBuffer[UDP_TX_PACKET_MAX_SIZE];
EthernetUDP Udp;

void setup() {
  pinMode(8,OUTPUT);
  digitalWrite(8,LOW);
  
  Ethernet.begin(mac, ip);

  if (Ethernet.hardwareStatus() == EthernetNoHardware) {
    while (true) {
      delay(1);
    }
  }
  if (Ethernet.linkStatus() == LinkOFF) {
  }
  Udp.begin(localPort);
}
void loop() {
  int packetSize = Udp.parsePacket();
  if (packetSize) {
    IPAddress remote = Udp.remoteIP();
    Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE);
    char i = packetBuffer[0];
    if(i=='0') digitalWrite(8,LOW);
    if(i=='1') digitalWrite(8,HIGH);
  }
}

MACアドレスは公開できないので?を入れ「0x00,0x71,0x??,0x??,0x??,0x??」としている。
文字「0」受信でLEDがOFF、「1」受信でLEDがONである。
LEDはArduinoの8番ピンに抵抗を介してつながっている。
8番ピン - 抵抗1kΩ - LED - GND

#Unity
以下のようにC#のスクリプトを作り、カメラ(とりあえず)に添付してみた。

UnityUdpSendTest.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Text;

public class UnityUdpSendTest : MonoBehaviour
{
    string localIpString = "192.168.2.100";
    int localPort = 8887;
    string ArduinoIpString = "192.168.2.101";
    int ArduinoPort = 8888;
    private UdpClient udp;

    void Start()
    {
        IPAddress localAddress = IPAddress.Parse(localIpString);
        IPEndPoint localEP = new IPEndPoint(localAddress, localPort);
        udp = new UdpClient(localEP);
        udp.Client.ReceiveTimeout = 3000;
        IPAddress ArduinoAddress = IPAddress.Parse(ArduinoIpString);
        IPEndPoint ArduinoEP = new IPEndPoint(ArduinoAddress, ArduinoPort);
        udp.Connect(ArduinoEP);
    }

    void Update()
    {
        if (Input.GetKey(KeyCode.A))
        {
            byte[] dgram = Encoding.UTF8.GetBytes("1");
            udp.Send(dgram,1);
            Debug.Log("Send_1");
        }
        if (Input.GetKey(KeyCode.S))
        {
            byte[] dgram = Encoding.UTF8.GetBytes("0");
            udp.Send(dgram, 1);
            Debug.Log("Send_0");
        }
    }
    void OnApplicationQuit()
    {
        if(udp != null) udp.Close();
    }
}

キーボードのAを押すと文字「1」が送信(LED ON)
キーボードのSを押すと文字「0」が送信(LED OFF)
となる。

PC側のIPアドレスの設定とかWindowsのファイアウォールの注意点とかは前回、前々回を参照してね。
以上。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?