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

前へ

初めてのBLE (16) ESP32でペリフェラル④BME280

次へ

初めてのBLE (18) CircuitPythonでペリフェラル② Nano 33 BLE senseでセントラル