Micropython学习交流群 学习QQ群:786510434 提供多种固件下载和学习交流。

Micropython-扇贝物联 QQ群:31324057 扇贝物联是一个让你与智能设备沟通更方便的物联网云平台

Micropython学习交流群 学习QQ群:468985481 学习交流ESP8266、ESP32、ESP8285、wifi模块开发交流、物联网。

Micropython老哥俩的IT农场分享QQ群:929132891 为喜欢科创制作的小白们分享一些自制的计算机软硬件免费公益课程,由两位多年从事IT研发的中年大叔发起。

Micropython ESP频道

micropython esp32 蓝牙连接的使用


代码教程来源:老哥俩的IT农场分享QQ群 929132891


B站配套视频:基于MicroPython和ESP32的物联网开发-第22课 蓝牙连接的使用60_哔哩哔哩_bilibili


蓝牙连接的使用

微信图片_20220726235135.jpg

Serial Bluetooth Terminal_v1.36.apk

安卓蓝牙APP下载链接: https://pan.baidu.com/s/1WfY6D2dDsTMs1CAfEj7quA?pwd=6gtw 提取码: 6gtw 


from machine import Pin
from machine import Timer
from neopixel import NeoPixel
import ubluetooth


#创建像素序列对象
#服务于板载WS2812B
np = NeoPixel(Pin(15), 1)
np[0]=(128,0,0)
np.write()

#接收消息设置颜色的方法
def processMsg(colorStr):
    cl=colorStr.split(",")
    np[0]=(int(cl[0]),int(cl[1]),int(cl[2]))
    np.write()


class ESP32_BLE():
    def __init__(self, name):
        #用于显示蓝牙连接状态的指示灯
        self.led = Pin(22, Pin.OUT)
        #完成未连接状态指示灯闪烁任务的定时器
        self.timer1 = Timer(0)
        #蓝牙设备名称
        self.name = name
        #创建BLE类对象
        self.ble = ubluetooth.BLE()
        #激活,使用任何其他相关操作前必须先激活
        self.ble.active(True)
        #设置未连接状态定时器闪烁任务
        self.disconnected()
        #设置蓝牙状态发生变化时的中断回调方法
        self.ble.irq(self.ble_irq)
        #注册蓝牙
        self.register()
        #广播蓝牙
        self.advertiser()
        #接收的消息字符串
        self.bleMsg = ""

    #状态切换为连接的方法
    def connected(self):
        #指示灯常量
        self.led.value(1)
        #执行指示灯闪烁的定时器关闭
        self.timer1.deinit()

    #在未连接状态设置定时器
    #以完成指示灯闪烁的任务
    def disconnected(self):        
        self.timer1.init(period=100, mode=Timer.PERIODIC, callback=lambda t: self.led.value(not self.led.value()))

    #中断回调方法
    def ble_irq(self, event, data):
        #连接成功事件
        if event == 1:
            #关闭闪烁定时器
            self.connected()
        #断开事件
        elif event == 2: #_IRQ_CENTRAL_DISCONNECT:
            #广播蓝牙
            self.advertiser()
            #指示灯闪烁
            self.disconnected()
        #收到数据
        elif event == 3: 
            #读取数据字节序列    
            buffer = self.ble.gatts_read(self.rx)
            #转换为字符串
            self.bleMsg = buffer.decode('UTF-8').strip()
            #打印
            print(self.bleMsg)
    
    #注册服务
    def register(self):        
        # Nordic UART Service (NUS)
        NUS_UUID = '6E400001-B5A3-F393-E0A9-E50E24DCCA9E'
        RX_UUID = '6E400002-B5A3-F393-E0A9-E50E24DCCA9E'
        TX_UUID = '6E400003-B5A3-F393-E0A9-E50E24DCCA9E'
            
        BLE_NUS = ubluetooth.UUID(NUS_UUID)
        BLE_RX = (ubluetooth.UUID(RX_UUID), ubluetooth.FLAG_WRITE)
        BLE_TX = (ubluetooth.UUID(TX_UUID), ubluetooth.FLAG_NOTIFY)
            
        BLE_UART = (BLE_NUS, (BLE_TX, BLE_RX,))
        SERVICES = (BLE_UART, )
        ((self.tx, self.rx,), ) = self.ble.gatts_register_services(SERVICES)
    #发送数据
    def send(self, data):
        self.ble.gatts_notify(0, self.tx, data + '\n')
    #广播蓝牙
    def advertiser(self):
        name = bytes(self.name, 'UTF-8')
        adv_data = bytearray('\x02\x01\x02') + bytearray((len(name) + 1, 0x09)) + name
        self.ble.gap_advertise(100, adv_data)
        print(adv_data)
        print("\r\n")

ble = ESP32_BLE("ESP32BLE")
print("connected ....")

while True:
    if(len(ble.bleMsg)>0):
        processMsg(ble.bleMsg)
        #返回消息
        ble.send("from esp32\r\n")
        print("send ....")
        #清空消息
        ble.bleMsg=""



推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 ESP56.com All Rights Reserved

执行时间: 0.011751890182495 seconds