ESP32学习microPython之(4)--蓝牙应用1--控制LED

注:对于ESP32开源技术感兴趣的可以加群,我们一起探索交流学习,群号:782473783。群名:ESP32开源技术交流群。

前言


       前面已经有多篇文章将在ESP32上使用MicroPython进行开发,并且我们已经看到了其开发的便捷性。但是前面的MicroPython版本有个不小的缺陷,就是无法使用蓝牙模块。ESP32的一个巨大优势就是将蓝牙和WIFI集成到了一块芯片上,没有蓝牙功能无疑是个巨大的损失。
       目前我根据最新国外大神的更新,编译了一个支持Bluetooth库的MicroPython固件,今天这篇文章就简单介绍一下如何使用蓝牙模块。


一、固件更新

最新固件的获取请在群里联系,可以提供尝鲜版本固件。

固件更新下载方法请参考前面的博文。

二、例程

这里放一个简单蓝牙收发的例程。

from machine import Pin
import os
import bluetooth
bt = bluetooth.Bluetooth()
bt.active(1)
bt.advertise(100, 'ESP32_BLE_01')

LED=Pin(2, Pin.OUT) #port 2 is used for led
LED.value(0)

tx = bluetooth.Characteristic('6E400002-B5A3-F393-E0A9-E50E24DCCA9E', bluetooth.FLAG_READ|bluetooth.FLAG_NOTIFY)
rx = bluetooth.Characteristic('6E400003-B5A3-F393-E0A9-E50E24DCCA9E', bluetooth.FLAG_WRITE)
s = bt.add_service('6E400001-B5A3-F393-E0A9-E50E24DCCA9E', [tx, rx])

def callback(char, data):
    print("Get command:",data)
    if(data == b'10'):      
      LED.value(0)
      print("LED OFF")
      tx.write("LED is OFF Now!\n\r")
    if(data == b'11'):
      LED.value(1)
      print("LED ON")
      tx.write("LED is ON Now!\n\r")
    
rx.on_update(callback)


       整个例程中创建了一个蓝牙的service,包含一个监听读取的Characteristic和一个写入的Characteristic。当收到字节‘11’的时候点亮LED,收到‘10’的时候关闭LED,并向控制台返回LED的状态。
       当蓝牙程序运行后,可以在手机上使用蓝牙调试软件连接名为“ESP32_BLE_01”的蓝牙设备,在发送框里输入10或者11。我使用是FreeBlue,在appstore上面直接下载。调试界面如下:
 

调试界面

当然其他蓝牙APP也可以使用,如nRF Connect和LightBlue。

总结


从例程中可以看出蓝牙开发变得很简单了,在上面如何构建使用就看你自己的想法了。

当然,下面是一个使用MicroPython编写的ESP32蓝牙模块程序示例: 首先,需要导入ESP32蓝牙库: ``` import bluetooth from machine import Pin import esp32 ``` 接下来,需要初始化蓝牙并设置设备名称: ``` bluetooth.init() bluetooth.set_advertisement(name='ESP32 Bluetooth', service_uuid=b'1234567890123456') ``` 然后,需要设置GPIO口,作为蓝牙模块的连接指示灯: ``` led = Pin(2, Pin.OUT) ``` 接着,需要创建一个蓝牙服务器并开始监听: ``` server_sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM) server_sock.bind(("", bluetooth.PORT_ANY)) server_sock.listen(1) ``` 随后,需要设置服务的UUID和通道号,并将蓝牙模块的地址输出到控制台: ``` uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee" bluetooth.advertise_service(server_sock, "ESP32_BT_Server", service_id=uuid, service_classes=[uuid, bluetooth.SERIAL_PORT_CLASS], profiles=[bluetooth.SERIAL_PORT_PROFILE]) print("Waiting for connection on RFCOMM channel") print("Bluetooth device address:", bluetooth.get_address()) ``` 最后,需要进入循环,接收蓝牙客户端的连接并进行数据通信: ``` while True: try: client_sock, client_info = server_sock.accept() print("Accepted connection from", client_info) led.value(1) while True: data = client_sock.recv(1024) if not data: break print("Received:", data.decode()) client_sock.send("Echo: " + data.decode()) client_sock.close() print("Disconnected from", client_info) led.value(0) except KeyboardInterrupt: break ``` 以上就是一个使用MicroPython编写的ESP32蓝牙模块程序示例,它可以接收蓝牙客户端发送的数据并将其回显到客户端。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Lanson

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值