micropython学习笔记之蓝牙心率带读取及显示
本帖最后由 沧海笑 于 2017-9-3 13:04 编辑【内容】micropython学习笔记之蓝牙心率带读取及显示【时间】2017-09-03
【本期主要玩法】玩blynk的时候,就通过arduino 101读过蓝牙心率带数据,同时显示在oled上。这次esp32的ble正在测试,感谢岛主、나 는 당신 을 사랑 한 男 师兄的资料,我是在他们的基础上,稍加改动,读取了蓝牙心率带的数据,这样就很容易做一只与心率带配合的心率表了,如果加上姿态传感器以及算法,就可以做出更多的功能。
【硬件】1、FireBeetleBoard-ESP321块2、蓝牙心率带 1条 (某宝有售,要求支持ble4.0)3.oled ssd1306屏 1块(I2C接口)4、杜邦线4根【软件】
软件出品或借鉴的原帖
1upy ide 0.26Dfrobot
2BLE库乐鑫官方,已集成至固件中,正在完善中
【接线】FireBeetleBoard-ESP32
FireBeetleBoard-ESP32 oled
1VCCVCC(3v3)
2GNDGND
3SCLSCL
4SDASDA
代码:FireBeetleBoard-ESP32 #BT_HRM read .it works
#2017-07-24
import gc
import sys
import network as n
import gc
import time
from machine import Pin,I2C
import ssd1306
i2c = I2C(scl=Pin(22), sda=Pin(21), freq=100000)
lcd=ssd1306.SSD1306_I2C(128,64,i2c)
b = n.Bluetooth() #建立实例
found = {}
complete = True
connectname = ""
mac=b'\x00\x00\x00\x00\x00\x00'
def bcb(b,e,d,u): #读取程序
global complete
global found
global connectname
global mac
if e == b.CONNECT:
print("CONNECT")
oled("CONNECT")
elif e == b.DISCONNECT:
print("DISCONNECT")
oled("DISCONNECT")
elif e == b.SCAN_RES:
if complete:
found = {}
adx, name,ssic= d
if connectname == str(name):
mac = adx
print(d)
if adx not in found:
found = name
else:
print('else')
print(d)
elif e == b.SCAN_CMPL:
ok = True
print("Scan Complete")
oled("Scan Complete")
complete = True
print ('\nFinal List:')
for adx, name in found.items(): #显示搜索BLE设备的结果
print ('Found:' + ':'.join(['%02X' % i for i in adx]), name)
print('connect ',name)
oled(name)
else:
print ('Unknown event', e,d)
def cb (cb, event, value, userdata):
print('charcb ', cb, userdata, ' ', end='')
if event == b.READ:
print('Read')
return 'ABCDEFG'
elif event == b.WRITE:
print ('Write', value)
elif event == b.NOTIFY:
print ('Notify', value)
period = None
flags = value
hr = value
if flags & 0x10:
period = (value << 8) + value
print ('HR:', hr, 'Period:', period, 'ms')
lcd.fill(0)
lcd.text("HR:",20,16)
lcd.text(str(hr),50,16)
lcd.show()
def conn(bda):
b.ble_settings(adv_is_scan_rsp = False)
conn = b.connect(bda)
while not conn.is_connected():
time.sleep(.1)
print ('Connected')
time.sleep(2) # Wait for services
service = ( == b'\x00\x00\x18\x0d'] + )
if service:
print(service.chars())
char = ( == b'\x00\x00\x2a\x37'] + )
if char:
descr = ( == b'\x00\x00\x29\x02'] + )
if descr:
char.callback(cb)
descr.write(b'\x01\x00') # Turn on notify
return conn
def onScanComplete():
time.sleep(2)
def set_connetname(name):
return "b'%s'" % name
def scan():
global connectname
connectname = set_connetname("BT_HRM")
oled('BT_HRM')
b.ble_settings(adv_is_scan_rsp = True)
b.scan_start(5)
time.sleep(10)
def oled(lcdtxt):
lcd.fill(0)
lcd.text(lcdtxt,20,16)
lcd.show()
b.callback(bcb)
scan()
print('mac:',mac)
oled(mac)
conn(mac)
【小结】BLE是esp32的重要亮点,希望大家一起挖掘分享好玩的应用。但是目前还在完善中。比如在esp32与ble设备连接后,不能释放的问题到目前还未解决,我也和大家一起期待esp32 BLE的不断进步。
页:
[1]