pico のUSBシリアル input待ちに_thread利用

記事
IT・テクノロジー
Raspbrry Pi Pico はUSBシリアルのコンソール機能を使ってPCと接続が容易と言うことで、センサーからの入力をPCに送るような機能を容易に実現出来るようです。

これまでにもPCやRaspberry Pi にマイコンボードをUSBシリアル変換ケーブルで繋いで、検査装置のようなものを作ったりしましたがpicoを使えばUSBケーブルだけで済みそうです。

MicroPythonによるPCとの通信はprint と input が使えることを確認しました。
一定間隔で測定値を送り続けるだけの用途ならprintだけで済むのですが、送信間隔等の設定値を変更したいと言った場合は、inputでPCからのコマンドを受ける必要がありそうです。

inputを使うと入力が済むまでの間、他の処理が止まってしまうのでinputの待ち受けに_threadを試してみることにしました。

動作確認用のプログラム

電源を入れると0~9の数字を繰り返し送信して来ます。
PCから文字列'stop'を送ると繰り返し送信が停止し、'stop'以外の文字列を送ると繰り返し送信を再開します。

teratermでも動作確認しました。

ソースコード

以下のコードで確認しました。

import _thread # スレッドモジュールを準備
from utime import sleep

instr = ['']

def core0(instr): # print 担当
    intf = 1
    while True:
        for i in range(10):
            if instr[0] == 'stop':
                intf = 0
            else:
                intf = 1
            if intf > 0:
                print(str(i))
            sleep(1)

def core1(instr): # input 担当
    while True:
        a = input()
        print(a)
        instr[0] = a

# 新しいスレッドでcore1関数を実行 引数はタプルで指定(要素1つの時はカンマ付)
_thread.start_new_thread(core1, (instr,))
# メインスレッドでcore0関数を実行
core0(instr)


使えそうなので、センサーの読み出しなど肉付けしてみたいと思います。


今後とも宜しく、お願い致します。





サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す