esp32 micropython ble_center初体验

2017-07-231.2万
AI 快速预览详细 收起
本例程介绍了如何使用ESP32和Bluno主控板通过MicroPython实现BLE通信。首先列出了所需的硬件和软件,然后提供了详细的代码示例。通过扫描、连接和读写操作,实现了ESP32与Bluno之间的数据传输。整个过程适合零基础新手,无需复杂前置技能即可完成。


本例程所需�料
硬件
  1.  FireBeetle-ESP32主æ�¿
  2.  Bluno主æ�¿
软件
  1. uPyCraft
esp32端代�如下:
[mw_shl_code=python,true]import gc
import sys
import network as n
import gc
import time

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")
  elif e == b.DISCONNECT:
        print("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[adx] = name
      else:
        print('else')
        print(d)

  elif e == b.SCAN_CMPL:
    ok = True
    print("Scan Complete")
    complete = True
    print ('\nFinal List:')
    for adx, name in found.items():
      print ('Found:' + ':'.join(['%02X' % i for i in adx]), name)
      print('connect ',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)
def conn(bda):
  b.ble_settings(adv_is_scan_rsp = False)
  conn = b.connect(bda)
  i=0
  while not conn.is_connected():
    i=i+1
    time.sleep(.1)
    print ('Connected')
    time.sleep(2) # Wait for services
    service = ([s for s in conn.services() if s.uuid()[0:4] == b'\x00\x00\xDF\xB0'] + [None])[0]
    if service:
      print(service.chars())
      char = ([c for c in service.chars() if c.uuid()[0:4] == b'\x00\x00\xDF\xB1'] + [None])[0]
      char.callback(cb)
      if char:
        char.callback(cb)
    if i == 10:
      print('time out')
      break
  return conn
def onScanComplete():
  time.sleep(2)
def set_connetname(name):
  return "b'%s'" % name
def scan():
  global connectname
  connectname = set_connetname("Bluno")
  b.ble_settings(adv_is_scan_rsp = True)
  b.scan_start(5)
  time.sleep(10)
b.callback(bcb)
scan()
print('mac:',mac)
conn(mac)
[/mw_shl_code]
1. 使用uPyCraft下载到��上并�行esp32 micropython ble_center�体验图1
2. BLE开始扫�并��设备
esp32 micropython ble_center�体验图3

3. �功��上设备

esp32 micropython ble_center�体验图5

4. 打开串�调试工具,�BLUNO串���数�

esp32 micropython ble_center�体验图2

5�Esp32收到的数�

esp32 micropython ble_center�体验图4

这个例程在��过程中有时会出��稳定�象,望��大�指正。
该例程中使用的�机模�是bluno,��师兄�以使用其他的ble模�,�需�在esp32程�中的更改相应的设备�以�需�监�的uuid��。


创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(2)
zyber
zyber
你好 ,我用时用的程序连一个蓝牙手柄 显示连接不上,
0;31mE (996959) BT: btm_sec_clr_temp_auth_service() - no dev CB

E (996959) BT: bta_gattc_conn_cback() - cif=4 connected=0 conn_id=4 reason=0x0008
E (996959) BT: Device not found

E (996959) BT: bta_gattc_mark_bg_conn unable to find the bg connection mask for: ff:ff:97:01:cd:64
秦皇岛岛主
秦皇岛岛主
[赞],点击[ http://pinyin.cn/e19975 ]查看表情
- 没有更多了 -