UE4とArudinoでポート通信を
UE4とArudinoでポート通信
今回は、UE4とArudinoでのポート通信を行っていこうと思います。
↓みたいな感じでクリックしたらLEDが赤に変わるようにしたいと思います。
最近、Arduinoをさわり始めました#UE4 #Arduino pic.twitter.com/Z5RjNkib9v
— Daiginjo@SteelDebris (@daiginjo_game) 2018年3月12日
1. 下準備
今回、UE4とArudinoつなげるために「UE4Duino」というプラグインを使用します。
導入の方法は、以下の記事が参考になると思います。
UE4Duino本体
https://github.com/RVillani/UE4Duino
2. Arudino側の準備
続いて、Arudino側の準備をしましょう。
Arudinoに以下の様なスケッチを書き込んでUE4からの送られてくるシリアルを受け取れるようにしましょう。
#define FIRE_LED 9 #define WATE_LED 6 void setup() { Serial.begin(9600); pinMode(FIRE_LED ,OUTPUT); pinMode(WATE_LED ,OUTPUT); digitalWrite(WATE_LED ,HIGH); } void loop(){ if(Serial.available() > 0){ String inputStr = Serial.readStringUntil('\n'); //'\n'は読み込まれない if(inputStr.charAt(0) == 'F'){ digitalWrite(FIRE_LED ,HIGH); digitalWrite(WATE_LED ,LOW); } else(inputStr.charAt(0) == 'W'){ digitalWrite(FIRE_LED ,LOW); digitalWrite(WATE_LED ,HIGH); } } else{ digitalWrite(WATE_LED ,HIGH); } }
※Serial.available() : シリアルポートに何バイトのデータが到着しているかを返す
※Serial.readStringUntil(s) : シリアルバッファから文字を読み、sの終了文字を検出するかタイムアウトすれば終了。
そして、回路をこのように組んでいきます。
3. UE4側の準備
いよいよUE4の準備に取り掛かります。
今回は、「FirstPerson」でプロジェクトを作りました。
UE4側の準備1
まず、「FirstPersonCharacter」を開き「Event BeginPlay」に「Sequence」を追加して「Open Serial Port」でポートを開きましょう。
この時、「Port」にはArudinoがつながっているポートに「Baud Rate」はArudinoで設定したRateに設定します。Return Valueのピンを右クリックで変数「Arudino」に昇格をしておくと今後の拡張が楽になります。
次に、「Event EndPlay」を追加し「Close Port」でポートを閉じましょう。
ここできちんと閉じておかないとArudinoの挙動がおかしくなるかもしれません。
UE4側の準備2
LEDのライトをつけるためのシリアルを送る処理を作っていきます。
先ほど変数に昇格した「Arudino」から「Print」と「Line End to String」をそれぞれ2個ずつ用意して以下のようにつなげます。ここでは、「ImputAction Fire」でシリアルが送られるようにしました。
「Delay」に入っている数字がLEDが点灯している時間となります。
4. 実行とまとめ
UE4のPlayボタンを押して実行してみてください。
↓こんな感じになりましたか?
最近、Arduinoをさわり始めました#UE4 #Arduino pic.twitter.com/Z5RjNkib9v
— Daiginjo@SteelDebris (@daiginjo_game) 2018年3月12日
今回は、UE4側からの一方的な指示でしたが後半ではもう少し複雑な処理をさせていこうと思います。