19-MicroPython+ESP32实现蓝牙通信

(1)实验目的

本实验旨在利用MicroPython编程语言控制ESP32模块实现蓝牙通信。

(2)实验材料

  • ESP32模块
  • PC(Windows)
  • USB数据线
  • LED模块(发光二极管)
  • 杜邦线

(3)实验步骤

步骤1:连接ESP32模块与PC

  • 使用USB线将ESP32模块与PC的USB口进行连接
  • 确保ESP32模块在Thonny软件中能够被正确识别并建立连接
  • 使用杜邦线按如下对应关系连线。注意:这里可以按如下连接方式外接LED,也可以不接(D2对应板载LED,直接使用即可)
    在这里插入图片描述

步骤2:配置MicroPython开发环境

  • 确保已经正确烧录 MicroPython固件

步骤3:编写脚本代码

  • 打开Thonny软件,创建一个新的MicroPython脚本文件,文件名:main.py
  • 在脚本文件中输入以下代码:
# -*- coding:utf-8 -*-
"""
无锡匠客物联网科技有限公司
技术支持:@NanGe(微信号:nange2012014158 | 公众号:南哥物联网笔记)
脚本名称: 蓝牙通信
接线说明:LED模板-->ESP32(GPIO)
            正极-->D2
            负极-->GND
脚本执行现象: 脚本程序下载成功后,手机端使用蓝牙调试助手与ESP32模块进行数据的收发
注意事项:
无
"""

# 导入模块
from machine import Pin
from machine import Timer
from time import sleep_ms
import bluetooth

# 定义全局变量
BLE_MSG = ""

class ESP32_BLE():
    def __init__(self, name):
        
        self.led = Pin(2, Pin.OUT)
        self.timer1 = Timer(0)
        self.name = name
        
        self.ble = bluetooth.BLE()
        self.ble.active(True)
        self.ble.config(gap_name=name)
        self.disconnected()
        self.ble.irq(self.ble_irq)
        self.register()
        self.advertiser()

    def connected(self):
        self.led.value(1)
        self.timer1.deinit()

    def disconnected(self):        
        self.timer1.init(period=1000, mode=Timer.PERIODIC, callback=lambda t: self.led.value(not self.led.value()))
        #self.led.value(0)

    def ble_irq(self, event, data):
        global BLE_MSG
        #_IRQ_CENTRAL_CONNECT 蓝牙终端链接了此设备
        if event == 1:
            self.connected()
        #_IRQ_CENTRAL_DISCONNECT 蓝牙终端断开此设备
        elif event == 2:
            self.advertiser()
            self.disconnected()
        #_IRQ_GATTS_WRITE 蓝牙终端向ESP32发送数据,接收数据处理
        elif event == 3:  
            buffer = self.ble.gatts_read(self.rx)
            BLE_MSG = buffer.decode('UTF-8').strip()
            print("接收到其他蓝牙终端发来的数据:",BLE_MSG)
            
    def register(self):        
        service_uuid = '6E400001-B5A3-F393-E0A9-E50E24DCCA9E'
        reader_uuid = '6E400002-B5A3-F393-E0A9-E50E24DCCA9E'
        sender_uuid = '6E400003-B5A3-F393-E0A9-E50E24DCCA9E'
        services = (
            (
                bluetooth.UUID(service_uuid),
                (
                    (bluetooth.UUID(sender_uuid), bluetooth.FLAG_NOTIFY),
                    (bluetooth.UUID(reader_uuid), bluetooth.FLAG_WRITE),
                )
            ),
        )
        ((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', 'UTF-8') + bytearray((len(name) + 1, 0x09), 'UTF-8') + name
        self.ble.gap_advertise(100, adv_data)
        print(adv_data)
        print("\r\n")

def main(BLE_NAME):
    global BLE_MSG
    #调用BLE 设置ESP32被发现的蓝牙名称 名称为主程序传参传入
    ble = ESP32_BLE(BLE_NAME)
    #蓝牙指示灯(板载蓝色LED),当ESP32设备未被连接,则周期闪烁;若被连接,则常亮
    led = Pin(2, Pin.OUT)

    while True:
        #使用测试数据需要符合 r#hello
        if BLE_MSG.split("#")[0] == 'r':
            #打印获取到的数据
            print(BLE_MSG)
            # 清空接收的数据
            BLE_MSG = ""
        sleep_ms(100)


if __name__ == "__main__":
    main("ESP32")

步骤4:保存代码文件:

  • 将核心代码保存到PC机某个文件夹,文件名为main.py

步骤5:运行实验

  • 确保Thonny中运行->配置解释器中的解释器选择MicroPython(ESP32)
  • 在Thonny中直接单击运行按钮

(4)实验结果

成功运行代码后,手机端使用蓝牙调试助手连接蓝牙设备(名称为:ESP32),未连接成功时LED指示灯闪烁,连接成功后LED指示灯常亮,此时写入数据如:r#hello,ESP32接收到后会在Shell终端中输出对应的数据。
在这里插入图片描述

(5)总结

通过本实验,学会了使用MicroPython编程语言控制ESP32模块进行蓝牙通信

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您可以使用以下步骤来连接两个ESP32板子通过蓝牙通信,并在Micropython上编程: 1. 配置蓝牙模块:确保您的ESP32板子已正确配置蓝牙模块。您可以使用Micropython的`bluetooth`模块来进行配置。 2. 建立连接:在其中一个ESP32板子上,使用`bluetooth`模块创建一个蓝牙服务,然后启动广播以使其可见。例如,您可以使用以下代码: ```python import bluetooth # 创建蓝牙服务 bt = bluetooth.Bluetooth() bt.advertise("ESP32") # 循环等待连接 while True: client = bt.connect() if client: print("已连接") break ``` 3. 连接到服务:在另一个ESP32板子上,使用`bluetooth`模块连接到第一个板子创建的蓝牙服务。例如,您可以使用以下代码: ```python import bluetooth # 创建蓝牙服务 bt = bluetooth.Bluetooth() bt.scan() # 查找并连接到服务 while True: devices = bt.get_available_devices() for device in devices: if "ESP32" in device: client = bt.connect(device) if client: print("已连接") break if client: break ``` 4. 开始通信:一旦两个ESP32板子连接成功,您可以使用`bluetooth`模块的`send()`和`receive()`方法在它们之间进行通信。例如,您可以使用以下代码: ```python # 发送数据 client.send("Hello from ESP32!") # 接收数据 data = client.receive() print("接收到的数据:", data) ``` 请注意,这只是一个简单的示例,您可以根据您的需求进行更复杂的通信和数据处理。另外,确保两个ESP32板子都具有正确的蓝牙配置和适当的配对设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值