Unity에서 Arduino에 직렬 통신 보내기

Unity에서 Arduino에 시리얼을 보내 L치카

할 일



Unity에서 Arduino에 직렬 통신을 보내는 테스트를 수행합니다.
마지막 기사 Unity에서 Arduino로부터 직렬 통신 수신 반대입니다.

주요 참조 URL


  • Unity와 Arduino를 직렬 통신

  • 환경


  • Unity Hub
  • Unity 2018.4.28f1
  • Arduino

  • 사전 준비



    Unity에서 Arduino로부터 직렬 통신 수신
    ↑에 쓰여진 내용을 실시하여 움직이는 상태로 둡니다.
    이 기사에서는 위와의 차이만 설명합니다.

    Arduino 준비



    Arduino 측의 스크립트는 간단하게 아래와 같이 합니다.
    문자 "1"을 받으면 LED가 켜집니다.

    Arduino
    #define LED_PIN 13 //LEDのピン番号。13は内蔵LED。
    char data;
    
    void setup() {
      Serial.begin(115200);
      pinMode(LED_PIN, OUTPUT);
    }
    
    void loop()
    {
      if ( Serial.available()  > 0 ) {   // 受信データがあるか?
        data = Serial.read();            // 1文字だけ読み込む
        if (data == 0x31) { //文字コード0x31、つまり"1"を受信したらLEDを光らせる。
          digitalWrite(LED_PIN, HIGH);
          delay(200);
          digitalWrite(LED_PIN, LOW);
        }
      }
    }
    

    Arduino에 쓰면 준비가 끝납니다.

    Unity 설정 변경



    Unity로부터 일정 간격으로 "1"이라는 문자를 시리얼로 보내고 싶습니다.

    FixedUpdate 메소드를 사용하면 Unity의 프레임 업데이트마다의 명령과는 별도로 코드를 일정 간격으로 실행하는 설정을 할 수 있습니다. 먼저 그 "일정 간격"을 설정해 둡니다.

    「Edit」→「Project Setting」→「Time」에서,
    Fixed Timestep을 0.001(1/1000)로 설정합니다. (환경에 따라서는 0.01등이라도 괜찮습니다. 디폴트는 0.02와 같습니다.)


    Unity 스크립팅



    Unity에서 Arduino로 시리얼을 보내는 스크립트를 만듭니다.

    SerialSend.cs를 만듭니다.



    C# 의 스크립트를 작성해, 파일명을 「SerialReceive」로 합니다.
    스크립트는 다음과 같이 합니다.

    SerialReceive.cs
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class SerialSend : MonoBehaviour
    {
        //SerialHandler.cのクラス
        public SerialHandler serialHandler;
        int i = 0;
    
        void FixedUpdate() //ここは0.001秒ごとに実行される
        {
            i = i + 1;   //iを加算していって1秒ごとに"1"のシリアル送信を実行
            if (i > 999) //
            {
                serialHandler.Write("1");
                i = 0;
            }
        }
    }
    

    끝나면 저장합니다.

    스크립트 연결



    작성한 스크립트를 실행할 수 있습니다.

    Assets 에 있는 스크립트 SerialSend 를 드래그 앤 드롭으로 히에랄 키 창의 객체 Serial_Test 에 연결합니다.


    히에랄 키 창에서 Serial_Test를 클릭하여 오른쪽 검사기 창을 확인합니다.

    Inspector의 SerialSend(Script)의 SerialHandler 상자에 히에랄 키 창의 Serial_Test를 드래그 앤 드롭하여 할당합니다.

    또한 Inspector의 "SerialRead"를 선택 해제하여 비활성화합니다.

    이것으로 준비가 완료됩니다.

    실행



    Unity 재생 버튼을 눌러 실행합니다.
    잘하면 Arduino LED가 1초 간격으로 깜박입니다.

    종료 방법



    Unity의 재생 정지 버튼을 누른 후 Arduino 측의 리셋 버튼을 누릅니다. (슈퍼 중요)
    Arduino 측의 리셋 버튼을 누르지 않으면 Unity가 시리얼 송수신 프로세스를 종료할 수 없으며 커서가 계속 돌릴 수 없습니다.
    이번은 테스트이므로 그대로도 괜찮습니다만, 막상 실용이 되었을 때에는 코드에 타임 아웃 처리나 클로우즈 처리를 넣는 등, 한 번 더 필요할 것입니다.

    결론



    이제 최소한의 Unity→Arduino 간의 시리얼 통신도 가능하게 되었습니다.
    양방향 통신이나 스피드 조정, 긴 데이터의 교환 등에 세세한 Tips가 필요와 같은 것 때문에, 그 근처를 조사해 갑니다.
  • 마지막 기사 : Unity에서 Arduino로부터 직렬 통신 수신

  • 참고



    아래의 사이트를 참고로 했습니다. 고마워요.
  • SerialPort 또는 Uniduino를 사용하여 Unity와 Arduino를 함께 사용하는 방법을 살펴 보았습니다.
  • Unity - Arduino간에 Bluetooth Serial 통신을하면 Unity 종료시 Serial을 닫지 못합니다.
  • Unity와 Arduino를 직렬 통신
  • Unity에서 직렬 통신 할 때 시도한 것
  • Arduino+Unity(직렬 통신)할 때의 지침 참고
  • 좋은 웹페이지 즐겨찾기