iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >MicroPython开发ESP32入门笔记 -- 蓝牙篇
  • 905
分享到

MicroPython开发ESP32入门笔记 -- 蓝牙篇

嵌入式硬件学习python 2023-09-04 08:09:47 905人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

文章目录 前言一、 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, PWMfrom machine import Timerfrom 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 = 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.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_MSG        if 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)) + name        self.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上的舵机等,有趣的实验等待小伙伴们挖掘。

来源地址:https://blog.csdn.net/m0_55202222/article/details/129252154

--结束END--

本文标题: MicroPython开发ESP32入门笔记 -- 蓝牙篇

本文链接: https://www.lsjlt.com/news/393167.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MicroPython开发ESP32入门笔记 -- 蓝牙篇
    文章目录 前言一、 ESP32 和 Micropython 简介二、蓝牙模组通讯原理简介三、手机端和ESP32蓝牙通讯1. ESP32蓝牙呼吸灯代码2. 手机端准备 总结 前言 博主...
    99+
    2023-09-04
    嵌入式硬件 学习 python
  • 笔记本电脑蓝牙怎么打开
    今天小编给大家分享一下笔记本电脑蓝牙怎么打开的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。笔记本电脑蓝牙打开方法:首先点击左...
    99+
    2023-07-02
  • 笔记本电脑蓝牙如何打开
    这篇文章主要介绍了笔记本电脑蓝牙如何打开的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇笔记本电脑蓝牙如何打开文章都会有所收获,下面我们一起来看看吧。打开笔记本蓝牙的步骤第一种方法 先打开我们的电脑,然后我们点击...
    99+
    2023-07-01
  • win10系统笔记本蓝牙如何打开
    本文小编为大家详细介绍“win10系统笔记本蓝牙如何打开”,内容详细,步骤清晰,细节处理妥当,希望这篇“win10系统笔记本蓝牙如何打开”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识...
    99+
    2023-01-29
    win10
  • 戴尔笔记本电脑如何打开蓝牙
    要打开戴尔笔记本电脑的蓝牙功能,可以按照以下步骤操作:1. 首先,确保你的戴尔笔记本电脑已经安装了蓝牙适配器。如果你不确定是否安装了...
    99+
    2023-10-18
    笔记本电脑
  • 惠普笔记本win7蓝牙正确打开方式
    我们都知道蓝牙是一种传输工具,不需要连接WiFi或消耗流量,对于刚刚使用电脑的用户来说,他们可能不熟悉win7蓝牙功能,一些用户不禁要问,如何开启win7蓝牙功能我们都知道如果你想使用蓝牙,你需要先打开它。接下来,小编将向你展示win7蓝牙...
    99+
    2023-07-11
  • 包你学会win7笔记本怎么开蓝牙功能
    现在使用蓝牙耳机和蓝牙鼠标的人越来越多了,如果想要连接蓝牙设备就需要开启蓝牙,最近有朋友问我win7笔记本怎么开蓝牙,打开蓝牙的方式并不难,大家都能一学就会的,下面小编就教教大家。win7笔记本怎么开蓝牙:1、左下角“win”键,找到并点击...
    99+
    2023-07-18
  • ESP32+idf开发之WIFI通信入门(5)HTTP通信
    ESP32+idf开发之WIFI通信入门(5)HTTP通信 一、实现功能: esp32作为HTTP客户端分别使用GET方法和POST方法向HTTP服务端发送请求得到响应,具体如下: GET方法:向web服务器url发出get请求/add,发...
    99+
    2023-08-22
    http 网络 服务器 物联网 嵌入式硬件
  • Linux 开发技术和 Go 学习笔记:如何快速入门?
    随着互联网行业的飞速发展,Linux 开发技术和 Go 编程语言成为了越来越多开发者的必备技能。本文将为大家介绍如何快速入门 Linux 开发技术和 Go 编程语言,并穿插演示代码,帮助大家更好地理解和掌握相关知识。 一、Linux 开发...
    99+
    2023-11-02
    学习笔记 linux 开发技术
  • 一篇文章带你Java Spring开发入门
    目录Spring概述Spring简单应用Spring框架地基本使用项目创建添加依赖包创建Spring配置文件修改配置文件修改测试类运行结果总结Spring概述 Spring就是为解决...
    99+
    2024-04-02
  • Python并发编程入门:Linux环境学习笔记!
    在计算机科学中,并发是指在同一时间段内处理多个任务的能力。并发编程在现代计算机系统中至关重要,因为它可以提高系统的性能和响应能力。Python是一种流行的编程语言,它支持多线程和多进程并发编程。在本篇文章中,我们将学习如何在Linux环境...
    99+
    2023-07-07
    linux 学习笔记 并发
  • 【Python入门系列】第十四篇:Python Web开发
    文章目录 前言一、PythonWeb开发简介二、开发准备工作三、开发步骤四、开发案例1、使用Flask框架创建一个简单的Web应用程序2、使用Django框架创建一个简单的待办事项应用程序3、...
    99+
    2023-09-03
    python 前端 web开发
  • H5混合开发手机WebApp入门:概念篇
    如果你开始学习手机 App 开发,就一定会听到 H5 这个词。它是目前的主流开发技术之一,容易上手,开发周期短、成本低、兼容传统 Web 开发。但是,很少有文章详细介绍,H5 到底是...
    99+
    2022-12-03
    H5开发app Web App
  • 微信小程序开发【从0到1~入门篇】
    目录 1. 微信小程序介绍 1.1 什么是小程序? 1.2  小程序可以干什么? 2. 申请账号 2.1 申请帐号 2.2 测试号申请(我们小程序账号申请完成之后,建议务必要申请一个测试号用来开发) 3. 安装开发工具 3.1 选择稳定版...
    99+
    2023-08-31
    微信小程序 小程序
  • GO语言入门笔记:如何在Linux下快速掌握开发技术?
    Go语言是一种开源编程语言,它由Google开发,已经成为了一种非常流行的语言。Go语言被设计成一种非常简单的语言,同时又能够非常高效地运行。由于其简单性和高效性,Go语言被广泛应用于云计算、网络编程、分布式系统等领域。 在本篇文章中,我...
    99+
    2023-08-02
    学习笔记 开发技术 linux
  • MySQL入门阶段这一篇就够了-学习笔记(手敲1.5万字)
    前言 虽然在大一下学期,就已经接触到了MySQL,但是那个时候只是会用MySQL进行增删改查,在大三上学期,尝试投简历寻找实习时,对方公司对于程序员的MySQL水平有很高的要求,所以我开始系统化的学习MySQL。顺便将整理出的笔记逐步写入博...
    99+
    2023-08-18
    mysql 学习 数据库
  • 从入门到实战,GO语言实时开发技术学习笔记分享
    GO语言是由Google公司开发的一种高效、简洁、快速的编程语言,同时也是一门静态类型的语言。它的语法简洁易懂,拥有自动垃圾回收机制,同时支持并发编程,因此非常适合用于实时开发领域。本文将分享我在学习GO语言实时开发技术时的笔记和心得,希...
    99+
    2023-11-12
    实时 开发技术 学习笔记
  • Pygame游戏开发之太空射击实战入门篇
    目录视频入门游戏循环1. 处理输入(或事件)2. 更新游戏3. 渲染(或绘制)时钟构建 Pygame 模板渲染/绘制部分输入/事件部分控制屏幕刷新频率结束语本部分代码视频 观看视频 ...
    99+
    2024-04-02
  • 我的编程语言笔记(一)Python 基础小白入门(详细篇,8万字)
    目录 一 Python 基本信息了解1.1 Python1.2 应用方面1.3 排名1.4 python之父1.5 优缺点1.6 Python学习路线 二 Python基本环境安装2.1...
    99+
    2023-09-15
    笔记 python java 学习
  • 小程序入门笔记(一) 黑马程序员前端微信小程序开发教程
    微信小程序基本介绍 小程序和普通网页有以下几点区别: 运行环境:小程序可以在手机的操作系统上直接运行,如微信、支付宝等;而普通网页需要在浏览器中打开才能运行。 开发技术:小程序采用前端技术进行开...
    99+
    2023-10-08
    小程序 笔记 前端
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作