전선 없는 SimHub

9460 단어
이것은 SimHub의 맞춤형 직렬 장치 플러그인과 ESP32를 사용하여 Bluetooth를 통해 작동하는 시뮬레이션 레이싱 디스플레이를 만드는 방법에 대한 안내서입니다. 이를 따르려면 Arduino와 같은 보드에서 코딩한 경험이 있어야 합니다. 그리고 이를 베이스로 사용하여 나만의 장치를 만들려면 전자 제품에 대한 경험이 있어야 합니다.

다음도 필요합니다.
  • ESP32 장치, 이상적으로는 Lolin D32
  • 윈도우즈
  • PC에서 Bluetooth 지원
  • 심허브
  • 아두이노 IDE

  • SimHub는 PC에서 Sim Racing을 위한 멋진 소프트웨어입니다. 제작 및 업데이트에 대해 SHWotever에 찬사를 보냅니다.

    SimHub에 의해 노출된 원격 측정을 사용하는 Tow라는 이름의 Thrustmaster Open Wheel용으로 다음 디스플레이를 만들었습니다.



    SimHub는 Bluetooth를 직접 지원하지 않지만 Custom Serial Device 플러그인을 사용하면 표준 COM 포트처럼 Bluetooth 직렬 포트에 연결할 수 있습니다. 그런 다음 ESP32가 SimHub에서 COM 포트를 통해 들어오는 데이터를 읽고 디스플레이, LED 등을 제어하도록 합니다.

    여기서는 ESP32(이 경우 Lolin D32)를 Bluetooth를 통해 SimHub에 연결하고 원격 측정 데이터(Speed ​​및 Rpm)를 수신하는 과정을 안내합니다.

    먼저 SimHub Wiki - https://github.com/SHWotever/SimHub/wiki/Custom-serial-devices#enabling-the-plugin 에 설명된 대로 사용자 지정 직렬 장치 플러그인을 활성화하고 이 안내서의 구성 단계에서 중지합니다.

    이 코드를 ESP32에 업로드하세요. 저는 Arduino IDE를 사용합니다. 그래야 BT COM 포트에서 데이터를 읽을 수 있고, 데이터는 SimHub에서 가져오며 잠시 후에 구성할 것입니다.

    #include "BluetoothSerial.h"
    
    #if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
    #error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
    #endif
    
    #define BUF_SIZE 64
    
    char simHubMessageBuf[BUF_SIZE];
    BluetoothSerial btSerial;
    
    int spd;
    int revs;
    
    void setup() {
      Serial.begin(115200);
      Serial.println("setup");
    
      memset(simHubMessageBuf, 0x0, BUF_SIZE);
      btSerial.begin("BT-DASH");
    }
    
    void loop() {
      if (btSerial.available() > 0) {
        btSerial.readBytesUntil('{', simHubMessageBuf, BUF_SIZE);
        int readCount = btSerial.readBytesUntil('}', simHubMessageBuf, BUF_SIZE);
        simHubMessageBuf[min(readCount, BUF_SIZE - 1)] = 0x0;
        processMessage();
        memset(simHubMessageBuf, 0x0, BUF_SIZE);
      }
    }
    
    void processMessage() {
      char msgType = simHubMessageBuf[0];
    
      switch (msgType) {
        case 'R':
          sscanf(&simHubMessageBuf[1], "%d", &revs);
          break;
        case 'S':
          sscanf(&simHubMessageBuf[1], "%d", &spd);
          break;
      }
    
      Serial.print("Revs: ");
      Serial.print(revs);
      Serial.print(", Speed: ");
      Serial.println(spd);
    }
    


    이 코드는 두 가지 데이터 즉, Revs 퍼센트와 속도(KMH 기준)를 찾습니다. 둘 다 정수로 읽히므로 정수로 끝납니다.

    이 코드가 ESP32에 업로드되면 Bluetooth를 통해 Windows와 페어링할 수 있습니다. 그러나 먼저 Windows 장치 관리자를 열고 포트(COM 및 LPT) 섹션을 확장합니다. Bluetooth 링크를 통한 표준 직렬이라는 기존 항목의 포트 번호를 빠르게 기록해 두십시오. 없을 수도 있지만 괜찮습니다.

    이제 Windows의 Bluetooth 설정에서 장치를 페어링하면 BT-DASH로 표시됩니다. 다른 이름을 원하는 경우 위 코드에서 변경할 수 있습니다.

    페어링되면 장치 관리자로 돌아가서 포트(COM 및 LPT) 섹션에 Bluetooth 링크를 통한 표준 직렬 두 개의 새로운 항목이 있어야 합니다. 더 높은 번호의 포트 번호를 기록해 둡니다.

    SimHub에서 사용자 지정 직렬 장치 섹션으로 이동하고 새 직렬 장치 추가를 클릭한 다음 나타나는 항목을 확장합니다.

    직렬 포트 드롭다운에서 위에서 기록한 직렬 포트를 선택합니다. 자동 재연결 상자를 선택합니다.

    이제 업데이트 메시지 섹션에 속도 및 속도 메시지를 추가해야 합니다. 새 메시지 추가를 클릭하여 두 개의 빈 업데이트 메시지를 만든 다음 다음과 같이 편집합니다.
    '{R'+isnull([CarSettings_CurrentDisplayedRPMPercent], '0')+'}''{S'+isnull([SpeedKmh], '0')+'}'
    EDIT 버튼 옆에 있는 드롭다운을 사용하여 빈도를 둘 다에 대해서만 변경으로 변경합니다. 이렇게 하면 포트를 통해 전송되는 데이터가 약간 최적화됩니다.

    다음과 같이 끝나야 합니다.



    전원이 들어오도록 ESP32를 PC에 연결하고 토글 버튼을 클릭하여 사용자 지정 직렬 장치 항목을 활성화하면 ESP32에 연결되어야 합니다.



    이제 Arduino IDE에서 ESP32의 직렬 포트(블루투스 포트가 아닌 USB 포트)를 모니터링하고 경주하거나 리플레이를 재생할 때 SimHub에서 오는 메시지를 볼 수 있어야 합니다. 상단에는 SimHub 원격 측정을 기록하고 재생하는 버튼이 있습니다.



    직렬 모니터에서 올바른 전송 속도(115200)를 선택했는지 확인하고 회전수와 속도가 변경될 때 USB 직렬 포트에 데이터가 기록되는 것을 볼 수 있어야 합니다.



    이제 위의 코드를 기반으로 디스플레이, LED 등을 제어할 수 있습니다. SimHub에서 읽을 수 있는 다른 데이터를 보려면 업데이트 메시지에서 EDIT를 클릭하고 속성 삽입을 클릭하십시오. 검색할 수 있는 목록이 표시됩니다.



    아래 의견에 질문을 남겨주세요. 대답하거나 설명을 포함하도록 기사를 업데이트하겠습니다.

    읽어 주셔서 감사합니다.

    좋은 웹페이지 즐겨찾기