見出し画像

M5StickC-PlusのUARTを使用してみる

こんにちはロック204チャンネルです。
今回は「M5StickC-PlusのUARTを使用してみる」をお送りします。

UARTは、歩調同期式シリアル通信の一つで開始と終了の合図を取り決めておいて、その合図に従ってデータ通信する方式です。
USBケーブルとマイコンを接続して、データ交換をするときによく使用される方式です。
それでは、このUARTを使用してM5StickC-Plusとパソコン間の通信を行うプログラムについて見ていきたいと思います。


こちらがUiFlowに用意されているUARTのブロックです。
UARTブロックは「ハードウェア」カテゴリーの中のUARTの中に分類されています。



今回、UARTの機能を試すために使用した装置がこちらとなります。
前回の動画で使用した可変抵抗の値をAD変換する装置を使用しました。
今回はAD変換された値をUSBケーブルでパソコンに接続し、このAD変換されたデータを送信するプログラムを紹介します。


こちらにM5StickC-Plusのピン配列と可変抵抗への接続を示しています。
M5Stickの背面にはピンの配列が印刷されています。
今回はM5Stickの上側にあるピンを使用しました。
可変抵抗への接続は、両端に3.5ボルトとグランド端子を接続し
真ん中の端子にG36ピンを接続しました。




最初に「Setup」ブロックの下に
UARTを設定するブロックを配置しました。
このブロックでは、uart1と2を選択することが出来ます。ここではuart1を選択しました。
次に、USBケーブルで通信する場合は送信ピンを1、受信ピンを3として設定します。
そして通信ボーレートを9600 bpsを使用してこれをUART1とします。
その下は、アナログ入力ピンをadc0、ピン番号36にします。
読み取り解像度を12ビットに、入力減衰率を11デシベルに設定するは前回と変わりません。

こちらがボタンAを押したときのプログラムとなります。
最初に、変数noを用意し、送信したデータをカウントするのに使用します。
次に、uart1に文字列「OutPut to UART」を一行書き出すブロックを追加しておきます。
その下に50回繰り返すブロックを配置し、変数noを一つ増やした後
変数ad_valueにアナログ値を読み取ります。そして、この値をM5に配置したlabel0に表示します。
そして、変数bfを用意し、noと”,” ad_valueを文字列変換し結合し代入します。
その後、この値をuart1にbfを1行書き出しします。
次に100mm秒プログラムを停止しループを繰り返します。
ループが完了すると最後にuart1に「END」の文字列を書き出します。
これがプログラムの全体となります。

出力されたUARTの受信データは、arduino ideを使用して受信して行きます。
ideが起動したら、Toolsを選択しBoardをM5StickCPlusにPortをM5が接続されたポートを選択します。

受信状態を確認するには「Serial Monitor」を使用します。
メニューよりtoolsを選択しSerial Monitorをクリックします。
そして、M5のAボタンを押すと右の図のように受信されたデータが表示されます。
この時、受信されるデータの速度をプログラムと同じ9600 bptに合わせておいてください。

データを確認するには、toolsのSerial plotterを使用して行うこともできます。
この場合、数値データであれば右の図のように折れ線グラフとしてデータを確認することができます。
それでは、このプログラムの実行状態を見て行きましょう。

Arduino IDEを使用してデータ受信-4
動画



from m5stack import *
from m5ui import *
from uiflow import *
import machine
import time


setScreenColor(0x111111)


no = None
ad_value = None
bf = None



label0 = M5TextBox(7, 113, "label0", lcd.FONT_DejaVu40, 0xFFFFFF, rotate=0)

from numbers import Number



def buttonA_wasPressed():
  global no, ad_value, bf, adc0, uart1
  no = 0
  uart1.write('OutPut to UART'+"\r\n")
  for count in range(50):
    no = (no if isinstance(no, Number) else 0) + 1
    ad_value = adc0.read()
    label0.setText(str(ad_value))
    bf = (str(str(no)) + str(((str(',') + str(str(ad_value))))))
    uart1.write(str(bf)+"\r\n")
    wait_ms(100)
  uart1.write('END'+"\r\n")
  pass
btnA.wasPressed(buttonA_wasPressed)


uart1 = machine.UART(1, tx=1, rx=3)
uart1.init(9600, bits=8, parity=None, stop=1)
adc0 = machine.ADC(36)
adc0.width(machine.ADC.WIDTH_12BIT)
adc0.atten(machine.ADC.ATTN_11DB)


この記事が気に入ったらサポートをしてみませんか?