CircuitPython 10行プログラミング Step4 (4) BLE①ペリフェラル
BLEの通信を行います。ライブラリでは、サービスやキャラクタリスティックなどが記述されています。しかし、サンプルではApple関連と、NordicのUARTサービスを使った事例しかありません。CircuitPython 5.1.0でBLEを使ったことがあります。こちらを参照してください。現在利用している6.0.0 Beta 0では、HIDデバイスに対応しました。
サンプルの中には、ラズパイを動かし、CircuitPythonのプログラムからセンサ・データを送るadafruit_ble_broadcastnetライブラリがあります。これは、5.xのころから開発が始まり、随時サンプルが増えています。
●ble_uart_echo_test.pyをベースにペリフェラルの実験
PCにコピーしたexamplesの中からble_uart_echo_test.pyのプログラムをエディタMuにコピーし、code.pyで保存します。Muのシリアルをクリックして、保存をクリックすると実行します。
オン・セミコンダクターのBLEであるRSL10 Bluetooth Low Enaergy Exploerを使って情報を見ます。セントラルの立場です。connectで接続し、Discover Serviceでサービスを表示しました。
一番下の表示されているのがUARTサービスのUART-Txのキャラです。ここに123と入力し、Write Reqを押して書き込みをします。赤色で囲った部分です。
実行したMuの画面です。123が送られてきました。
最後の3が送り返された様子が、緑で囲った3です(RSL10 Bluetooth Low Enaergy Exploerの画面)。
●センサのデータを送る
前回のセンサの値を読み出した中で、BMP280の部分を上記のプログラムに追加します。
from adafruit_ble import BLERadio
from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
from adafruit_ble.services.nordic import UARTService
import board
import adafruit_bmp280
import struct
import time
ble = BLERadio()
uart = UARTService()
advertisement = ProvideServicesAdvertisement(uart)
i2c = board.I2C()
bmp280 = adafruit_bmp280.Adafruit_BMP280_I2C(i2c)
while True:
ble.start_advertising(advertisement)
while not ble.connected:
pass
while ble.connected:
print('connected ')
print(bmp280.temperature, bmp280.pressure)
uart.write('{:.1f} {:.0f}'.format(bmp280.temperature, bmp280.pressure))
time.sleep(3)
Muの実行中の様子です。
RSL10 Bluetooth Low Enaergy Exploerの画面です。温度と気圧が送られています。
PCとつないでいるUSBケーブルを抜き、JSTの電源コネクタにLi-Po電池をつないでも、同様に温度と気圧を送ってきます。
