玩转 BLE 调试!这份超详细指南请收好~

各位热衷于探索科技世界的小伙伴们!今天要给大家分享一份超厉害的 BLE 调试文档哦,它就像一把神奇钥匙,能让你的智能设备像亲密好友一样顺畅 “聊天”!不管你正捣鼓着智能手环、智能灯泡,还是酷炫的智能门锁,有了这份指南,BLE 调试对你来说简直就是小菜一碟,赶紧跟着我来一探究竟吧!

超酷的 BLE 闪亮登场

BLE 呢,其实就是低功耗蓝牙(Bluetooth Low Energy)的超萌简称,蓝牙本身就是一种超棒的近距离无线通信技术,在 2.4GHz 这个免费频段上欢快地 “奔跑”,现在已经在各种移动终端、物联网、健康医疗、智能家居等超多个领域 “大显身手” 啦。BLE 所在的单模蓝牙,也就是低功耗蓝牙模式,拥有低功耗、快连接、长距离这三大 “神奇技能”,厉害得不行!像 EC200U、EC600U、EG915U、EG912U 这些型号都支持 BLE 功能,是不是超给力?

低功耗方面,它就像一个超级节能小卫士。很多物联网设备用的是小小的纽扣电池,要是普通bt技术,可能没多久就没电 “罢工” 了,可 BLE 一来,设备靠着纽扣电池能欢欢喜喜地持续工作数月甚至数年呢,这对那些不方便频繁换电池的设备来说,简直就是救星呀,像智能门锁天天坚守岗位,有了 BLE,完全不用担心它突然没电打不开门啦。

蓝牙联盟还给低功耗蓝牙制定了一些超有用的标准 Profile,这 Profile 就像是数据规范,只要设备都遵守这个规范,不管是哪个厂家生产的蓝牙设备,都能开开心心地相互连接、愉快通信。就像无线蓝牙键盘鼠标,不管你用的是安卓、iOS 还是 Windows 系统,都能即插即用,这就是 “标准” 的强大力量。低功耗蓝牙还能自定义 Profile,这可太好玩了,随着智能手机越来越普及,这个特性被发挥得淋漓尽致,也让低功耗蓝牙的应用领域变得更广阔啦。比如说,我们可以自定义一个开关量的 Profile,规定数据 01 表示开灯,数据 00 表示关灯,这样手机发送 01 或者 00,就能轻松控制灯的亮灭,类似这样有趣又实用的应用可多着呢。

代码示例大放送

话不多说,直接上硬菜 —— 代码示例来啦!这份代码可是实现 BLE 服务器端功能的关键,让你的模组能愉快接收手机发送的数据哦~

# -*- coding: UTF-8 -*-
import ble
import utime
BLE_GATT_SYS_SERVICE = 0  # 0-删除系统默认的GAP和GATT服务 1-保留系统默认的GAP和GATT服务
BLE_SERVER_HANDLE = 0
_BLE_NAME = "Quec_BLE_UART_Chic"
event_dict = {
    'BLE_START_STATUS_IND': 0,  # ble start
    'BLE_STOP_STATUS_IND': 1,   # ble stop
    'BLE_CONNECT_IND': 16,  # ble connect
    'BLE_DISCONNECT_IND': 17,   # ble disconnect
    'BLE_UPDATE_CONN_PARAM_IND': 18,    # ble update connection parameter
    'BLE_SCAN_REPORT_IND': 19,  # ble gatt client scan and report other devices
    'BLE_GATT_MTU': 20, # ble connection mtu
    'BLE_GATT_RECV_WRITE_IND': 21, # 当ble客户端写入特征值或描述符时,服务器收到通知
    'BLE_GATT_RECV_READ_IND': 22, # 当ble客户端读取特征值或描述符时,服务器收到通知
    'BLE_GATT_RECV_NOTIFICATION_IND': 23,   # 客户端接收通知
    'BLE_GATT_RECV_INDICATION_IND': 24, # 客户端接收指示
    'BLE_GATT_SEND_END': 25, # 服务器发送通知,并收到发送结束通知
}
class EVENT(dict):
    def __getattr__(self, item):
        return self[item]
    def __setattr__(self, key, value):
        raise ValueError("{} is read-only.".format(key))
event = EVENT(event_dict)
def ble_callback(args):
    global BLE_GATT_SYS_SERVICE
    global BLE_SERVER_HANDLE
    event_id = args[0]
    status = args[1]
    print('[ble_callback]: event_id={}, status={}'.format(event_id, status))
    if event_id == event.BLE_START_STATUS_IND:  # ble启动
        if status == 0:
            print('[callback] BLE启动成功!')
            mac = ble.getPublicAddr()
            if mac != -1 and len(mac) == 6:
                addr = '{:02x}:{:02x}:{:02x}:{:02x}:{:02x}:{:02x}'.format(mac[5], mac[4], mac[3], mac[2], mac[1], mac[0])
                print('BLE公网地址 : {}'.format(addr))
            # 一系列初始化操作...
            # 此处省略部分代码,完整代码见git官网哦~
            ret = ble_adv_start()
            if ret != 0:
                ble_gatt_close()
                return
        else:
            print('[callback] BLE启动失败啦~')
    # 其他事件处理...
    # 更多代码等你探索哟~
# 还有超多实用函数哦
def ble_gatt_server_init(cb):
    # 服务器初始化函数
    pass
def ble_gatt_open():
    # 开启GATT功能
    pass
# ...更多函数等你来解锁

详细代码示例在:

功能实现超给力

这份代码的本事可大着呢!执行之后,模组就能化身为 BLE 服务器端,乖乖接收手机的连接请求。不管是手机发送的普通数据,还是文件,模组都能稳稳接收并打印出来,是不是超厉害?就像给你的设备装上了 “顺风耳”,轻松听懂手机的 “指令”~

调试小技巧

在调试过程中,要是遇到问题别着急。代码里有超多打印信息,能帮你轻松找到问题所在。有了它,调试 BLE 设备再也不是难题啦~ 赶紧用起来,让你的智能设备畅所欲言吧!