🐷

【OpenMV】UART通信でArduinoに数字を送る

2022/01/27に公開

ArduinoとOpenMVでUART通信を使って変数の値を送りたいです。

そこでOpenMV IDEのスケッチ例にあるarduino_uart_1.pyを試したのですが上手くいきません。

上手くいかないというか、文字列は送れるけど変数は送れない、的な。

まずは公式スケッチ例です。

arduino_uart_1.py
import time
from pyb import UART

uart = UART(3, 19200)

while(True):
    uart.write("Hello World!\n")
    if (uart.any()):
        print(uart.read())
    time.sleep_ms(1000)

上記のプログラムでは文字を送ることはできますが、

x = 100
uart.write(x)

と書くと上手くいきません。

そこで色々試したところ、こう書くと上手くいくことがわかりました。

import pyb, ustruct
from pyb import UART

uart = UART(3, 19200)

while(True):
    x = 100
    try:
        uart.write(ustruct.pack('B',x))
    except OSError as err:
        pass

これでいけます。

ustructを使います。標準ライブラリなので先頭に書くだけでokです。

ここら辺は公式ドキュメントに詳しいことが書いてあったので貼っておきます

https://micropython-docs-ja.readthedocs.io/ja/v1.14ja/library/ustruct.html

ついでにArduino側のプログラムを書いておきます。

Teensy4.0用に書いたのでSerial7ですが気にしないでください

#define Serial7 OpenMV

void setup() {
  OpenMV.begin(19200);
}

void loop() {
  if (OpenMV.available()) {
    byte byteRead = OpenMV.read();
    Serial.println(byteRead);
  }
}

以上です。間違ってたらごめんなさい。

OpenMV H7R2とOpenMV IDE 2.8.1 で確認しました。

Discussion