技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

Circuit Playground Express をいじったログ

一通り機能を触ったので、紹介記事と、初期セットアップだけ。

経緯

買って試したのはコレ

Circuit Playground Express

Circuit Playground Express

  • メディア: おもちゃ&ホビー

当初、IoT として一度ブームになったときは、RasberryPi がやたらと人気で、記事は実質それ一色だったのを覚えてる。
ただ、買って弄ってわかったことは、あれは規模の小さい PC であったという事実だ。
それで何が言いたいかって言うと

ハード設計できない人はお呼びでない ということだった。
もともと Web 屋さんで、ハードなんて大学でマイコンアセンブラ書き込んでLED と高額センサーで信号通信してみた位しかやったことがない。
まして就職して 当時 8 年目位で、今更回路設計しろって言われても無茶振りに近かった…要するにそんな余裕も金もなくて挫折した(汗
(Web屋さん業界じゃ HTML5ecmascript や各種フレームワーク打なんだで群雄割拠ヒャッハーしてたり AI たのすぃーとかいってフラフラしてた)

で、しばらく遠のいてたところを、知人にこんな本紹介されて

booth.pm

え?マジで?と調べて驚いた。

Circuit Playground Express とは

平たくいえば、ネットワーク危機こそないけど、ジャイロ、温度、音声、スピーカー、LED、タッチセンサー、赤外線と、コミコミ全盛り回路セットである。
要するに、多くのソフトやさんなプログラマが挫折するだろう箇所を全盛りで用意してくれてるという一品。

コレは軽くチートじゃないんですかね…(汗

開発準備

Bootloader

USB で繋いで、中央のスイッチを押すと USB 認識するので、ブートローダのアップデートを行う。

Mac でやってたので https://learn.adafruit.com/adafruit-circuit-playground-express/updating-the-bootloader こっからダウンロードして更新した。
update-bootloader-circuitplay_m0-vX.XX.X.uf2 を finder にドロップするだけで、中にある INFO_UF2.TXT の中に記述されるバージョンなどが上がった。
バイス的にもこの辺を事前サポートしてるのか…ううむ…。

この記事時点では v3.10.0 が最新だった。

CircuitPython

circuitpython.org

ここから CircuitPython をダウンロード & インストール。
ここでは 5.3.0 の英語版を選択。
ライブラリも Libraries から入手した。

日本語なんてドマイナー言語対応してないのはある意味仕方ないよな(汗

で、ここで気をつけるべきは、全部のライブラリは容量的にはいらないということ…
なので、 Python コード上使用しているものだけ選択して入れる必要があるという点。

ここで全パターンとライブラリ紹介始めると、時間がいくらあっても足らないので省略。

最も単純な LED 点灯

といっても写経だったりするのだが

f:id:white-azalea:20200628203254p:plain

ここの code.py がエントリポイントになってるようなので、コレを弄る。

import board
import time
from digitalio import DigitalInOut, Direction

led = DigitalInOut(board.D13)
led.direction = Direction.OUTPUT

while True:
    led.value = True
    time.sleep(0.1)
    led.value = False
    time.sleep(0.1)

色々疑問なので、import してるやつを追いかける。
こういう調査がないと応用効かない…

まず、circuit python の公式リポジトリ

GitHub - adafruit/circuitpython: CircuitPython - a Python implementation for teaching coding with microcontrollers

で、公式ドキュメント漁ると発見 https://learn.adafruit.com/welcome-to-circuitpython/creating-and-editing-code コレか。

で、やっぱそうなのかという話で、 board, time, digitalio組み込みライブラリ であるそうな。

  • board gives you access to the hardware on your board (ボードはボードに存在するハードウェアへのアクセスを提供します) *digitalio lets you access that hardware as inputs/outputs (digitalio はハードウェアへ Input/Output を提供します)

ナルホド、で、なんで D13 なん?って思ったらあっさりわかった。

f:id:white-azalea:20200628205651p:plain

あーうんなるほど…既にそこそこ抽象化してるのね(汗
じゃー何がビルトインされてんのさ?って思ったら

https://learn.adafruit.com/adafruit-circuit-playground-express/circuitpython-built-ins https://learn.adafruit.com/adafruit-circuit-playground-express/circuitpython-digital-in-out

ふむふむ。

で、 Circuit Python のライブラリには何あんのさ?って思って調べたら

circuitpython.readthedocs.io

しかもハードごとに違うってんだからコレは一瞬「うぉっ」となるよね(汗

デバッグ環境を整える

で、これなにかバグった時にデバッグ出力得られないと泣けるので

https://learn.adafruit.com/welcome-to-circuitpython/kattni-connecting-to-the-serial-console#using-something-else-2978927-11

この辺を利用する。

何が泣けるって、ここで推奨してる Mu Editor が Mac 10.15.5 で起動しないもの…セキュリティは分かるがちっとヒステリックになってきてないかと思わなくない。
時期バージョンで Arm 移行もあるし、結局「開発者<消費者」ルートで開発者を置いてけぼりにするんかね… Windows もアレだし、Ubuntu に戻ろうかな…。

現在のシリアルコネクションを確認

f:id:white-azalea:20200628210739p:plain

USB 接続なのは確実なので、/dev/tty.usbmodem144101 が結局デバイスだろうね。
てことで screen /dev/tty.usbmodem144101 115200 と叩く

f:id:white-azalea:20200628211448p:plain

これで画面が真っ黒になるので、コード中にデバッグ文字列を挿入。

f:id:white-azalea:20200628211804p:plain

やってみれば分かるが、デバイスに保存した次の瞬間には適用されてる。
CPU は 48MHz なので、Windows95 黎明期?逆に言えばそれくらいのスペックがこんなボードに乗るようになったんだなーと実感(汗

メモリが 2MB しかないというのも割とネックではあるので、ラズパイと組み合わせてやるとネットワーク連携もできて幸せになれそうな気がするよ。