工場改善 IoT Arduino開発

現場の悩みに解決手段を

【Seeeduino XIAO】RS232cから受信した信号をUSB HIDで送信してみる。

前回に引き続きRS232cからBluetoothのHIDプロファイルで送れるようにしてみました。

マイコンは無線使わないので小さくて安いSeeeduino XIAOを選定してみました。
フリスクのケースに入れたかったのですが、RS232cのコネクタが大きくてケースに入らなかった...
どうしたもんかと思いコンビニ探したらちょっと大きいロ○テのキシリトールタブレットのケースが
あったのでそれに入れました。

見た感じはこんな感じです。
f:id:kesokonpatata:20210104124949j:plain
f:id:kesokonpatata:20210104124955j:plain
f:id:kesokonpatata:20210104124958j:plain

機器仕様

・PCとBluetoothでペアリングすることで利用可能(パスワードなし)
RS232cの信号のレベルをTTLレベルに変換し、非同期シリアル通信(UART)で受信したデータを
 マイコンで受けて蓄積し、改行コードを受信したら文字列をUSB HIDでデータ送信。
 HIDだったらキーボード入力と同じように扱えるから、Excelに取り込後に関数やVBA
 文字列データ処理する。

材料

・Seeeduino XIAO(600円程度)
RS232c TTLコンバーター(Dsab9ピンオス)(1,000円くらい)
・電線
・ケース(今回はお菓子ケース)

予備知識

Ardoino IDEにSeeeduino XIAOのボードライブラリをインストールする。
以下にセットアップ方法があります。
wiki.seeedstudio.com

接続

UART(HardwareSerial)
UART1(RX:GPIO7 TX:GPIO6)受信(RX)のみ使用
ボーレート:9600
ビット長:8ビット、パリティ:なし、ストップビット:なし(SERIAL_8N1)

送信側→本機
3.3V-3.3V
GND -GND
TX -GPIO7(RX)

ブレッドボード
f:id:kesokonpatata:20210101094001p:plain

回路図
f:id:kesokonpatata:20210101093954p:plain

USB HID仕様
#include <Keyboard.h>

//#define bps0 115200                       //bps UART0(USB)
#define bps1 9600                         // bps UART1

String strDATA = "No Data";               // 送信する文字列
volatile bool strConplete = true;

void setup() {
  strDATA.reserve(128);                  // strDATAの文字列の格納領域を128byte数確保
  
  Keyboard.begin();                      // USB HID接続開始
  //  Serial.begin(bps0);                    // UART0
  Serial1.begin(bps1);                   // UART1
  delay(500);

  //  Keyboard.println("USB HID");
}

void loop() {
  while (Serial1.available() > 0) {       // 受信したデータバッファが1バイト以上存在する場合
    if (strConplete == true) {            // 新たなデータを取得したときにデータ初期化
      strConplete = false;                // フラグ初期化
      strDATA = "";                       // データ初期化
    }

    char inChar = (char)Serial1.read();   // Serial1からデータ読み込み

    if (inChar == '\n') {                 // 改行コード(LF)がある場合の処理
      strConplete = true;                 // フラグを更新
      Keyboard.println(strDATA);          // USB HIDでデータ送信

    } else if (inChar != '\r') {          // CRの改行コードの場合は結合しない
      strDATA += inChar;                  // 読み込んだデータを結合
    }
  }
  delay(1);
}