初めてのBLE (17) CircuitPythonでペリフェラル① 5.1.0の準備
CircuitPythonは執筆時点で最新の5.1.0を使います。マイコン・ボードはAdafruitのFeather nRF52840 Expressです。このボードの搭載されているBLEモジュールは技適が取れています。
Feather nRF52840 ExpressをPCにUSBケーブルでつなぎます。エクスプローラにはCIRCUITPYドライブらが開いて見えているはずです。
●CircuitPythonの最新版を用意
アーカイバはhttps://github.com/adafruit/circuitpython/tagsにあります。
5.1.0をクリックすると、詳細のページに飛びます。
hereをクリックします。
ボードを選択します。
Feather nRF52840 Expressのuf2ファイルをダウンロードします。ボード上のリセット・スイッチを素早く2度押しし、ブートローダ・モードになったら、ドライブ名がCIRCUITPYからMETROM4BOOTに変わります。uf2のファイルをそのドライブへドラッグします。
ブートローダの更新が必要なときは、こちらの記事を参照してください。
https://github.com/adafruit/Adafruit_CircuitPython_Bundle/releasesからlibとexampleファイルをダウンロードします。5.xと名前に入っているadafruit-circuitpython-bundle-5.x-mpy-20200405.zipをダウンロードします。
解凍して出てきたexamplesフォルダはPCのどこかに、libはCIRCUITPYドライブにコピーします。libがすでに入っている場合は、事前に削除しておきます。
●ble_uart_echo_test.pyをベースにペリフェラルの実験
PCにコピーしたexamplesの中からble_uart_echo_test.pyのプログラムをエディタMuにコピーし、main.pyで保存します。Muのシリアルをクリックして、保存をクリックすると実行します。
オン・セミコンダクターのBLEであるRSL10 Bluetooth Low Enaergy Exploerを使って情報を見ます。セントラルの立場です。connectで接続し、Discover Serviceでサービスを表示しました。
一番下の表示されているのがUARTサービスのUART-Txのキャラです。ここに123と入力し、Write Reqを押して書き込みをします。
UARTサービスを実行しているCircuitPython側に123を受け取った様子が表示されます。
●CPUの温度を送る
このプログラムを次のように修正します。
import microcontroller
import struct
import time
from adafruit_ble import BLERadio
from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
from adafruit_ble.services.nordic import UARTService
ble = BLERadio()
ble.name ="Feather nRF52840 Express"
uart = UARTService()
advertisement = ProvideServicesAdvertisement(uart)
while True:
ble.start_advertising(advertisement)
while not ble.connected:
pass
while ble.connected:
print('connected ')
temp = microcontroller.cpu.temperature
print(temp)
uart.write(struct.pack('>f', temp))
time.sleep(3)
ble.name ="Feather nRF52840 Express"で、local Nameをボードの名前にしました。
CircuitPython側では、CPUの温度値を送り続けています。
struct.pack('>f', temp)は、>がビッグ・エンディアン(書き出しの方向)、fが単精度浮動小数点数の単精度バイナリ形式(binary32 )の指定です。0x41bc0000は23.5です。
次回、Arduino IDEでセントラルを作り、この温度データを復号します。