LoginSignup
1
0

More than 1 year has passed since last update.

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

Posted at

概要

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ケーブルで接続します。
TinketM0.png

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

Trinket M0をPCに接続すると、PC上に以下のドライブが見えます。・・・①
TrinketM0_CIRCUITPY_DRIVE.PNG
※初期状態では、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から見えるフォルダは、以下の状態になります。・・・③
TrinketM0_BOOTDRIVE.PNG

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が点灯します。

TrinketM0_TouchRedLed.PNG

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

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」と文字を入力しエンターを押下する。

TrinketM0_TouchRedLed_MuEditor_ON.PNG

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

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

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

まとめ

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

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0