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電池をつないでも、同様に温度と気圧を送ってきます。