文章目录

  • 前言
  • 一、 ESP32 和 Micropython 简介
  • 二、蓝牙模组通讯原理简介
  • 三、手机端和ESP32蓝牙通讯
    • 1. ESP32蓝牙呼吸灯代码
    • 2. 手机端准备
  • 总结

前言

博主之前学习了用C语言去开发了51单片机,虽然没有将各种外设和传感器都玩遍,但博主基本将一些重要的外设和传感器通过原理学习加小项目实验的方式比较深入地玩了一下。众所周知,51单片机是相对底层的,用来开发一些大项目的效率会比较低,所以我们很有必要学习一下stm32、esp32的开发。

博主希望下来学习用MicroPython来开发esp32,先从esp32的特色功能蓝牙和WiFi玩起,再接触一下之前没有玩过的传感器和外设:DHT11温湿度传感器、超声波传感器、MG60s舵机、PIR红外传感器等。整个过程中,我们都会通过MQTT、蓝牙、WiFi的形式让esp32和其他设备进行交互。

一、 ESP32 和 Micropython 简介

ESP32是一系列低成本,低功耗的单片机微控制器,集成了Wi-Fi和双模蓝牙。 ESP32系列采用Tensilica Xtensa LX6微处理器,包括双核心和单核版本,内置天线开关,RF射频模块,功率放大器,低噪声接收放大器,滤波器和电源管理模块。ESP32 可作为独立系统运行应用程序或作为主机 MCU 的从设备,通过 SPI / SDIO 或 I2C / UART 接口提供 Wi-Fi 和蓝牙功能。

MicroPython是一种非常小巧的Python解释器,它能运行于微控制器和其他嵌入式系统中。它的设计使得它可以轻易地运行于微处理器上,并且拥有丰富的类库,特别适合开发嵌入式应用程序。MicroPython的核心功能可以在几秒钟内完成,允许开发者快速构建完整的嵌入式系统,而不必编写大量的代码。MicroPython还可以被用于在微控制器上控制传感器和执行其他操作,可以帮助开发者利用微控制器的全部功能。此外,MicroPython还可以被用作与互联网连接的IoT设备的开发平台,以及其他复杂的嵌入式应用程序。博主这里用的MicroPython的IDE是Thonny和Upycraft。

二、蓝牙模组通讯原理简介

蓝牙技术规定每一对设备之间进行蓝牙通讯时,必须一个为主端,另一为从端,才能进行通信,通信时,必须由主端进行查找,发起配对,建链成功后,双方即可收发数据。

蓝牙主端设备发起呼叫,首先是查找周围可被查找的蓝牙设备。主端设备找到从端蓝牙设备后,与从端蓝牙设备进行配对时输入从端设备的PIN 码,也有设备不需要输入PIN码。配对完成后,从端蓝牙设备会记录主端设备的信任信息,此时主端即可向从端设备发起呼叫,已配对的设备在下次呼叫不需要重新配对。已配对的设备,做为从端的蓝牙耳机也可以发起建链请求,但做数据通讯的蓝牙模块一般不发起呼叫。 链路建立成功后,主从两端之间即可进行双向的数据通讯。在通信状态下,主端和从端设备都可以发起断链,断开蓝牙链路。

蓝牙设备在出厂前即提前设好两个蓝牙设备之间的配对信息,主端预存有从端设备的PIN 码、 地址等,两端设备加电即自动建链,透明串口传输,无需外围电路干预。一对一应用中从端设备可以设为两种类型,一是静默状态,即只能与指定的主端通信,不被别的蓝牙模组查找;二是开发状态,既可被指定主端查找,也可以被别的蓝牙设备查找建链。蓝牙通讯和I2C通讯有相似之处,都存在主机和从机,主机和从机的应答都遵照一定的标准,都有唯一的地址来进行寻找配对。

蓝牙技术利用短距离、低成本的无线连接替代了电缆连接,从而为现存的数据网络和小型的外围设备接口提供了统一的连接。

三、手机端和ESP32蓝牙通讯

1. ESP32蓝牙呼吸灯代码

首先要定义一个蓝牙的类,蓝牙的类包括初始化函数,连接函数,连接状态判断函数,地址注册函数,发送数据函数,广播函数,然后实例化为ble,先调用状态判断函数接收其他终端返回的数据,然后按UTF-8解码,如果消息是开灯就以打开呼吸灯,如果消息是关灯就以关闭呼吸灯

from machine import Pin, PWM
from machine import Timer
from time import sleep_msimport bluetoothBLE_MSG = ""class ESP32_BLE():def __init__(self, name):self.led = PWM(Pin(2))self.freq = PWM(Pin(2)).freq(1000)self.timer1 = Timer(0)self.name = nameself.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.duty(1023)self.timer1.deinit()def disconnected(self):self.timer1.init(period=100, mode=Timer.PERIODIC, callback=lambda t: led.duty(500))def ble_irq(self, event, data):global BLE_MSGif event == 1: #_IRQ_CENTRAL_CONNECT 手机链接了此设备self.connected()elif event == 2: #_IRQ_CENTRAL_DISCONNECT 手机断开此设备self.advertiser()self.disconnected()elif event == 3: #_IRQ_GATTS_WRITE 手机发送了数据 buffer = self.ble.gatts_read(self.rx)BLE_MSG = buffer.decode('UTF-8').strip()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') + bytearray((len(name) + 1, 0x09)) + nameself.ble.gap_advertise(100, adv_data)print(adv_data)print("\r\n")if __name__ == "__main__":ble = ESP32_BLE("ESP32BLE")led = PWM(Pin(2))while True:if BLE_MSG == 'LED ON':print(BLE_MSG)for i in range(0,1023):led.duty(i)sleep_ms(3)BLE_MSG = ""print('LED is ON.')ble.send('LED is ON.')elif BLE_MSG == 'LED OFF':print(BLE_MSG)for i in range(1023,-1,-1):led.duty(i)sleep_ms(3)BLE_MSG = ""print('LED is OFF.')ble.send('LED is OFF.')sleep_ms(100)

2. 手机端准备


手机端要下载LightBlue这个软件,下载后需要搜索esp32的蓝牙名称然后连接上

连接上后将16进制编码转换成UTF-8编码的格式,要与esp32端保持一致

然后写入esp32端编好的命令,即"LED ON" 和 “LED OFF” ,然后点击按钮就可以发现esp32上自带的灯以呼吸灯的方式打开或者关闭

允许监听后就可以收到esp32发来的数据,实验中每次你在手机端发出打开或者关闭呼吸灯的命令后,你的手机都会收到esp32发来的对应的提醒

总结

以上就是今天esp32蓝牙篇的入门笔记,本片笔记简单地介绍了esp32蓝牙通讯的应用,但举一反三地我们可以将该原理应用于其他方面,比如esp32通过蓝牙给手机端传输超声波传感器的距离、手机通过蓝牙控制esp32上的舵机等,有趣的实验等待小伙伴们挖掘。

MicroPython开发ESP32入门笔记 -- 蓝牙篇相关推荐

  1. 物联网开发笔记(77)- 使用Micropython开发ESP32开发板之使用MAX7219驱动控制8x8LED点阵模块(续)

    一.目的 这一节我们继续学习如何使用我们的ESP32开发板控制带MAX7219驱动的8x8LED点阵模.我们使用库来显示,更加方便. 二.环境 ESP32 + MAX7219驱动的8x8LED点阵模块 ...

  2. 物联网开发笔记(68)- 使用Micropython开发ESP32开发板之使用官方工具esptool烧录

    一.目的 这一节我们学习如何使用我们的ESP32开发板来烧录. 二.环境 ESP32 + esptool + Win10 + python3.10 + 其他工具. ESP32开发板购买地址: http ...

  3. 物联网开发笔记(64)- 使用Micropython开发ESP32开发板之控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程:控件显示

    一.目的 这一节我们学习如何使用我们的ESP32开发板来控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程:控件显示. 二.环境 ESP32 + ILI9341 3.2寸TFT-L ...

  4. ESP32 入门笔记01:乐鑫ESP32-DevKitC开发板信息、开发环境搭建以及学资料准备

    文章目录 一.ESP32-DevKitC 开发板介绍 二.ESP32 开发环境 1. Arduino IDE 1.1 开发环境搭建步骤 1.2 实验:使用 Arduino IDE 将代码上传到 ESP ...

  5. 物联网开发笔记(94)- 使用Micropython开发ESP32开发板之获取天气数据并用ILI9341屏幕显示

    一.目的 这一节我们学习如何使用乐鑫的ESP32开发板通过心知天气API控获取实时天气的数据,并使用串口SPI控制ILI9341 液晶屏,显示出来. 二.环境 ESP32(固件:esp32-20220 ...

  6. 物联网开发笔记(25)- 使用Micropython开发ESP32开发板之控制LCD1602显示屏

    这一节我们讲解了如何控制LCD1602显示屏,显示两行字. 一.目的 使用MicroPython开发ESP32开发板控制LCD1602显示屏 二.环境 ESP32 + LCD1602显示屏 + Tho ...

  7. 物联网开发笔记(27)- 使用Micropython开发ESP32开发板之控制240x240的oled屏幕(ST7789芯片)

    这一节我们讲解了如何控制240x240的oled屏幕,该oled屏幕驱动芯片是ST7789,我们控制屏幕显示两行字. 一.目的 使用MicroPython开发ESP32开发板控制240x240的ole ...

  8. 物联网开发笔记(24)- 使用Micropython开发ESP32开发板之控制8x8点阵屏

    上一节我们讲解了如何控制4位数码管,这一节我们来一起学一下如何控制8x8点阵屏显示流水灯和爱心. 一.目的 使用MicroPython开发ESP32控制8x8点阵屏 二.环境 ESP32 + 8x8点 ...

  9. 物联网开发笔记(26)- 使用Micropython开发ESP32开发板之控制LCD1602显示屏(续)

    上一节介绍了使用i2c来控制LCD1602显示屏,那么使用GPIO怎么控制LCD1602显示屏呢?使用GPIO又分为8bit和4bit两种模式,比较常用的4bit模式,因为它占用GPIO口比较少.   ...

最新文章

  1. Linux学习笔记(一)Linux常用命令
  2. Eclipse开发struts完全指南
  3. 【GIT】Github上传本地代码详解
  4. linux驱动常用函数
  5. LiveQing视频流媒体开放平台利用 webpack 打包压缩后端代码
  6. js observer 添加_简单了解4种JS设计模式
  7. 大写牛逼,用 Python 登录主流 24 个网站
  8. [Bugku CTF——Pwn] pwn1
  9. java socket-服务器不启动 直接启动客户端.md
  10. PHP初级面试题收集
  11. ASP.NET MVC传送参数至服务端
  12. java 死链检测_网站死链检测工具/网站地图生成工具
  13. 如何实现Solidworks批量修改工程图模板?
  14. 思科模拟器cisco模拟器
  15. 计数显示器c语言程序,单片机计数显示器.doc
  16. 92年程序员发帖晒薪资称自己很迷茫,网友:老弟你可以了
  17. bzoj:1922: [Sdoi2010]大陆争霸 (luogu 2446)
  18. C++(opencv)简单拼接两幅图像
  19. 数据挖掘-决策树算法的R实现
  20. CMD 禁用 笔记本自带的键盘

热门文章

  1. IEC60870-5-101协议解析
  2. wmm的学习日记(upload-labs)
  3. 如何选择TVS二极管
  4. 深度学习神经网络实践:基于LSTM的电离层预报
  5. Android蓝牙开发记录
  6. Exception in thread “main“ java.lang.ClassNotFoundException解决方案
  7. 视频编解码优化的几个概念
  8. imx6ull移植MT7601Uusb无线网卡(360随身WIFI 2代)
  9. 愿Linux红帽旋风吹得更加猛烈吧!
  10. 【博学谷学习记录】超强总结,用心分享 | 狂野大数据shell编程—简单入门