Trinket M0を制御したい!(タッチでLチカ、REPLからLチカ)


概要

Trinket M0は、Adafruit社の小型Arduino互換マイコンボードである。
PCに接続すると、入力デバイス(HID)として認識され、またTrinketの持つストレージはPC側の外付けドライブとして認識されます。

目標

  • Trinket M0の開発環境を整える
  • Trinket M0単品でLチカを行う
  • PCからの操作で、Trinket M0上のLEDをチカチカさせる

※Lチカとは、Ledランプを点灯・消灯させることです。

材料

  • PC(Windows10をベースにします)
  • Tinker M0 (約1,400円)
  • USBケーブル(A-MicroB) データ通信と電源供給ができるモノ

1.環境構築

1-1.PC上の準備

以下のソフトウェアをインストールします
- Mu Editor
https://codewith.mu/

メモ:
Mu Editorは、Pythonコードエディタとシリアル通信の機能を持ちます。
通常、テキストを編集しファイルへ書き出す際、書き込みバッファの影響により、ファイルの更新タイミングが変わる場合がありますが、
Mu Editorでのファイルの書き込みは、その時点で必ずファイルの出力が保証されるとのことです。

1-2.Tinket M0をPCと接続する

PCとTinket M0をUSBケーブルで接続します。

環境構築は以上で完了です。

Trinket M0をPCに接続すると、PC上に以下のドライブが見えます。・・・①

※初期状態では、boot.pyは存在しません。

メモ:
Trinket M0の起動時は、以下の順番でコードが実行されます。
1. boot.py
2. code.py or main.py
コードは、code.pyに記述する方が良いようです。

2.Tinket M0のアップデート

購入時点では、Tinket M0に搭載されているCircuitPythonのバージョンが古いため、Updateを行います。

2-1.ファイルをダウンロード

以下から最新のCircuitPythonをダウンロードします。
https://circuitpython.org/board/trinket_m0/
adafruit-circuitpython-trinket_m0-ja-7.0.0.uf2 ・・・②
(この時点では、CircuitPython 7.0.0でした(2021/10/14時点))

2-2.TRINKETBOOTフォルダを開く

PCにTinket M0が接続されている状態で、リセットボタンを二回押します。
押下後、PCから見えるフォルダは、以下の状態になります。・・・③

2-3.CircuitPythonのアップデート

②のファイルを、③のTRINKETBOOTドライブにコピーします。
コピーが完了後、自動的に再起動され、①のウィンドウが表示されます。

2-4.libのアップデート

CircuitPython本体のlibフォルダ配下のライブラリバージョンが一致しない場合、
TrinketM0は、code.py実行時にバージョン差異エラーが発生します。

以下から対象のライブラリをダウンロードします。
https://circuitpython.org/libraries
今回は、「Bundle for Version 7.x」をダウンロードし、PC上で展開します。・・・④

必要となるファイル(更新するファイル)は以下となります。

CIRCUITPYドライブ
\lib
  \adafruit_hid
  \adafruit_dotstar.mpy
  \adafruit_pixelbuf.mpy
  \neopixel.mpy
  \adafruit_hid\__init__.mpy
  \adafruit_hid\keyboard.mpy
  \adafruit_hid\keyboard_layout_us.mpy
  \adafruit_hid\keycode.mpy
  \adafruit_hid\mouse.mpy

④で展開したファイル群から、上記と一致するファイルを探し、CIRCUITPYドライブのファイルにコピー・上書きします。

以上で、プログラムが実行できる状況になります。

メモ:
mpyとは、MicroPythonにてpyファイルをプリコンパイルした状態のファイルである。
mpyファイルは、コード上からimportすることが可能。
実行環境のバージョンと一致するものを利用する必要がある。
http://docs.micropython.org/en/v1.12/reference/mpyfiles.html
メモ:
Trinket M0の初期サンプルファイルは以下からダウンロードできます。
https://learn.adafruit.com/adafruit-trinket-m0-circuitpython-arduino/downloads
「Default CircuitPython files included v2」

libフォルダ配下のmpyバージョン差異に注意が必要。

3.Lチカ実験

3-1.「タッチでLチカ」

TrinketM0の3番ピンを触ると、赤色LEDが点灯するコードとなります。

code.py
import board
from digitalio import DigitalInOut, Direction, Pull
from analogio import AnalogOut, AnalogIn
import touchio

# Built in red LED
led = DigitalInOut(board.D13)
led.direction = Direction.OUTPUT

# Capacitive touch on D3
touch = touchio.TouchIn(board.D3)

while True:
    # use D3 as capacitive touch to turn on internal LED
    if touch.value:
        print("D3 touched!")

    led.value = touch.value

3番ピンを触ると、左上の赤色LEDが点灯します。

また、Mu Editorのシリアルボタンを押下し、REPLの表示を見ると、D3 touched!が出力されている事が分かります。

3-2.「REPLからLチカ」

PC上のREPL上(コンソール)から文字を入力し、赤色LEDの制御を行います。
Trinket M0上、REPLからの入力は、supervisorを用いることでバイト取得が可能です。

code.py
import board
from digitalio import DigitalInOut, Direction, Pull
import supervisor

# Built in red LED
led = DigitalInOut(board.D13)
led.direction = Direction.OUTPUT

red_led = False

while True:
    if supervisor.runtime.serial_bytes_available:
        value = input()
        if value == "on":
            red_led = True
        elif value == "off":
            red_led = False

    led.value = red_led

2-1.code.pyを実行中に、REPLから「on」と文字を入力しエンターを押下する。

Trinket M0は以下の状態となる。

REPLから「off」と文字を入力しエンターを押下する。

Trinket M0は以下の状態となる。

まとめ

以上、Trinket M0上でのLチカと、PC上のコンソール(REPL)からのLチカを実施した。
実機を手に入れて、二日程度でここまで実施することが出来た。
このデバイスは小型かつ軽量であり、開発する上でのPCとの接続や動作確認の煩わしさが無く、開発環境も整っている。
全体的なバランスが良く、大変興味深い製品である。
次回は、Trinket M0を使って、もう少し複雑な事にチャレンジしてみたいと考える。

参考