MicroPythonで使うWio Terminal - machine.UART

MicroPythonで使うWio Terminal - 目次

machine.UART の使用例

# Wio Terminal machine.UARTのサンプル
# This code is provided under a CC0 Public Domain License.
# http://creativecommons.org/publicdomain/zero/1.0/
# 2022年6月20日 佐藤恭一 https://kyoutan.jpn.org

import time
from machine import UART, Pin, Map

# UART1とUART2があるけど、40ピンコネクタに接続されているのはUART1
# TXD(pin 8)とRXD(pin 10)をジャンパー線で接続して通信テストした(ループバック)
uart = UART(Map.UART1, 115200, UART.config.SERIAL_8N1)  # 初期化
uart = UART(Map.UART1, 115200)  # これでもよい

print("write test")
uart.write('hello world!')  # 書き込む。戻り値は書き込んだ数

txdata = bytearray(b"0123456789")  # メモ:bytearray 値の変更可能 / bytes 値の変更不可能
uart.write(txdata, 3)     # バッファの先頭から3バイト書き込む。戻り値は書き込んだ数
uart.write(txdata, 5, 4)  # バッファの5番目から4バイト書き込む。戻り値は書き込んだ数
time.sleep(1)          # UARTの送信が完了するまで待つ

print("rxdata {}".format(uart.any()))   # 受信バッファにあるデータ数
print(uart.read())  # バッファのデータをタイムアウトするまで全て読んで表示する
# 受信バッファは 255バイト
# タイムアウトは 1~2秒くらい? 変更方法がわからない


print()
print("read test")
txdata = bytearray(range(ord("0"), ord("z")))
rxdata = bytearray(127)
uart.write(txdata)  # バッファにデータを貯める
uart.write(txdata)
uart.write(txdata)
uart.write(txdata)
time.sleep(1)
print("rxdata {}".format(uart.any()))

# 読み込みは指定したバイト数に満たなくてもタイムアウトで終了する場合がある
print("10 byte : {}".format(uart.read(10)))  # 10byte読み込む

uart.readinto(rxdata,20)  # 20byte読み込んでバッファに格納
print("20 byte : {}".format(rxdata))
print()
uart.readinto(rxdata)     # 受信バッファをrxdataのサイズ分読み込んでバッファに格納
print(rxdata)

print()
print(uart.read(uart.any()))  # 受信バッファを全部読む
print("empty")  # サイズを指定すればタイムアウトしないので素早く終了する

uart.write("line 1\r\nline 2\r\nline 3\r\n")  # 3行書き込む
time.sleep(1)

print()
print("1 line : {}".format(uart.readline()))  # 1行読む
print()
print(uart.read(uart.any()))  # 受信バッファを全部読む


UARTも簡単に使えました。

送信はDMAか割り込みで処理されているようで、書き込みを行うと送信が完了する前にすぐ処理が戻ってきます。

受信バッファは 255バイトありました。バッファにデータが何バイトあるのかを調べる関数もあって便利に使えます。受信タイムアウトが 1~2秒くらいに設定されているようなのですが、変更の方法がわかりませんでした。


動作テストで、TXD (pin8) と RXD (pin10) をジャンパー線で接続して Wio Terminalで送信したデータを Wio Terminal自身で受信させました。


UARTで使うピンは TXD (pin8) と RXD (pin10) です。


関数と通信フォーマット一覧

>>> help(UART)
object <class 'UART'> is of type type
  deinit -- <function>
  __enter__ -- <function>
  __exit__ -- <function>
  any -- <function>
  read -- <function>
  readline -- <function>
  readinto -- <function>
  write -- <function>
  config -- <class 'config'>

>>> help(uart.config)
object <class 'config'> is of type type
  SERIAL_5N1 -- 275
  SERIAL_6N1 -- 531
  SERIAL_7N1 -- 787
  SERIAL_8N1 -- 1043
  SERIAL_5N2 -- 307
  SERIAL_5N1 -- 563
  SERIAL_7N2 -- 819
  SERIAL_8N2 -- 1075
  SERIAL_5E1 -- 273
  SERIAL_6E1 -- 529
  SERIAL_7E1 -- 785
  SERIAL_8E1 -- 1041
  SERIAL_5E2 -- 305
  SERIAL_6E2 -- 561
  SERIAL_7E2 -- 817
  SERIAL_8E2 -- 1073
  SERIAL_5O1 -- 275
  SERIAL_6O1 -- 530
  SERIAL_7O1 -- 786
  SERIAL_8O1 -- 1042
  SERIAL_5O2 -- 306
  SERIAL_6O2 -- 562
  SERIAL_7O2 -- 818
  SERIAL_8O2 -- 1074



このブログの人気の投稿

windowsで「インターネット接続の共有」の設定

月刊 I/O 記事リスト 1976~1989

X68000実機のROMを保存