初めての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でセントラルを作り、この温度データを復号します。