2021年1月27日水曜日

micro:bitのA/Bボタンの状態をMicroPythonを使用して取得・USBシリアルで送信する

micro:bitはMicroPythonでプログラミングする事もできます。micro:bitのA/Bボタンの状態を取得してUSBシリアルで送信して、PCで受信するには、以下の手順を実行します。

実行手順

1.pipenvのインストール
pipenvをインストール済みでない場合は、以下のコマンドでインストールします。
sudo dnf -y install python3

sudo pip3 install --upgrade pip

sudo pip3 install --upgrade setuptools

sudo pip3 install pipenv

echo "export PIPENV_VENV_IN_PROJECT=true" >> ~/.bashrc

source ~/.bashrc

2. pyserialのインストール
以下のコマンドでpyserialをインストールした仮想環境を作成します
mkdir -p ~/pyserial

cd ~/pyserial

pipenv --python 3

pipenv install pyserial

pipenv shell

3. PC側受信プログラムの保存
以下をserial_output.pyとして保存します。
import serial

try:
  ser = serial.Serial('/dev/ttyACM0',115200,timeout=None)
  while True:
    line = ser.readline()
    print(line)
finally:
  ser.close()

4. micro:bitとPCを接続して、Thonnyなどで以下のプログラムをmain.pyとして保存します。
from microbit import *

uart.init(115200)
while True:
    if button_a.is_pressed() and not button_b.is_pressed():
        display.show(Image.ARROW_W)
        uart.write("A button is pressed.\n")
    if not button_a.is_pressed() and button_b.is_pressed():
        display.show(Image.ARROW_E)
        uart.write("B button is pressed.\n")
    if button_a.is_pressed() and button_b.is_pressed():
        display.clear()
        uart.write("stop.\n")
        break
    if not button_a.is_pressed() and not button_b.is_pressed():
        display.show(Image.SMILE)
    sleep(500)
uart.init(115200)

プログラムをmicrobitに保存後、Thonnyを閉じておきます(※受信プログラムを使用せずにUSBシリアルの出力を見たい場合は、閉じないでおきます)
Micro:bitが反応しなくなった場合は「ThonnyからMicoPythonのプログラムをmicro:bitに転送する設定」の手順でMicroPythonを再インストールします。

5. PC側の受信プログラムの実行
シェルで以下を実行後、micro:bitのAボタンやBボタンを押したときのメッセージが表示されることを確認します。最後にAボタンとBボタンを同時押してmicro:bit側のプログラムを終了します。PC側のプログラムはCtrl+Cで終了します。
python serial_output.py

関連情報

・Thonnyに関する記事は、こちらを参照してください。

・Micro:bitに関する記事は、こちらを参照してください。

0 件のコメント:

コメントを投稿