SuperMini nRF52840でLチカしてみる

購入したボードの動作確認としてやってみる。CircuitPythonを使う。

ブートローダーの起動とアップデート

RST端子とGND端子を素早く2回ショートさせる。 すると、NICENANO というドライブが見えるようになるはず。
NICENANOにあるINFO_UF2.TXTを見るとブートローダのバージョンがわかる。CircuitPythonの8.2以降を使うにはブートローダーのバージョン 0.6.1以降が必要。 確認したところ図のように 0.6.0 だったのでアップデートする。
Board-ID: nRF52840-nicenano というところも見ておく。このあと このIDに紐づくファームウェアを選んで書き込む必要があるため。

SuperMini nRF52840のCircuitPythonのページの Update UF2 Bootloader のところを見る。
具体的なアップデート方法を書いてあるページへのリンクがあるのでそれを参考に書き込む。
👉https://learn.adafruit.com/introducing-the-adafruit-nrf52840-feather/update-bootloader

上記のページにある、一番安全という Use UF2 というやり方を選ぶ。ファイルをドラッグアンドドロップすればよい。
対象ファイルは update-nice_nano_bootloader-x.x.x_nosd.uf2 という感じのやつ。
ここで先ほど確認したBoard-IDが役に立つ。

ドラッグアンドドロップするといったんドライブが見えなくなり赤LEDの点滅の仕方もちょっと変わる(ほんのり光る → きびきびっとした点滅 に変わる)。
1秒くらいすると(おそらくリセット処理が走り)これまで書かれていたプログラムが起動する。工場出荷状態のままならLEDが点滅するやつ。

あらためてブートローダを起動させ、INFO_UF2.TXTに期待したブートローダのバージョンが書かれていれば成功!

CircuitPython で Lチカ

といっても基板に実装されているLEDを光らせるだけ。ブレッドボードとかで別途LEDをつなぐわけではない。
Supermini用のCircuitPython環境を導入した後ボードを再起動するとドライブ名が CIRCUITPY と変わるはず。

すると、Arduino IDEのシリアルモニターなどでSuperminiと通信できるようになっており(ボーレート:115200, NL&CRで改行)、Pythonの対話モードREPLを使って board.xxxでアクセスできるピンの一覧を取得する。
LED ってのが実装済みのLEDと思われる。
LEDは基板を見る限りまだあと一つはあるのだが、それっぽいIDはほかにはなかった。

]0;🐍BLE:Off | Done | 9.2.1\[2K[0GAuto-reload is on. Simply save files over USB to run them or enter REPL to disable.

Press any key to enter the REPL. Use CTRL-D to reload.
]0;🐍BLE:Off | REPL | 9.2.1\
Adafruit CircuitPython 9.2.1 on 2024-11-20; SuperMini NRF52840 with nRF52840

>>> import board
>>> dir(board)
['__class__', '__name__', 'AIN0', 'AIN2', 'AIN5', 'AIN7', 'BAT_VOLT', 'I2C', 'LED', 'MISO', 'MOSI', 'NFC1', 'NFC2', 'P0_02', 'P0_04', 'P0_06', 'P0_08', 'P0_09', 'P0_10', 'P0_11', 'P0_12', 'P0_13', 'P0_15', 'P0_17', 'P0_20', 'P0_22', 'P0_24', 'P0_26', 'P0_29', 'P0_31', 'P1_00', 'P1_01', 'P1_02', 'P1_04', 'P1_06', 'P1_07', 'P1_11', 'P1_13', 'P1_15', 'RX', 'SCK', 'SCL', 'SDA', 'SPI', 'TX', 'UART', 'VCC_OFF', '__dict__', 'board_id']
>>> 

CIRCUITPYドライブの code.py を以下のように書き換えるとそれっぽい点滅の仕方になるはず。
やってみればわかるが、工場出荷時ソフトで点滅していた赤いLEDが board.LED で扱える。

import board
import digitalio
import time

led = digitalio.DigitalInOut(board.LED)
led.direction = digitalio.Direction.OUTPUT

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