🐷
【OpenMV】UART通信でArduinoに数字を送る
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です。
ここら辺は公式ドキュメントに詳しいことが書いてあったので貼っておきます
ついでに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