树莓派Pico W无线开发板蓝牙通信MicroPython编程

内容提要:2023年6月14日,树莓派官方发布了对树莓派Pico W无线开发板(简称Pico W)MicroPython蓝牙功能的支持。本文首先介绍Pico W接口信号及蓝牙通信协议,然后通过Pico W接口信号扩展连接一只LED和一个按键,并给出Pico W蓝牙通信MicroPython编程示例。
一、Pico W接口信号
1. Pico W开发板介绍
Pico W是树莓派基金会于2022年6月底推出的搭载无线通信芯片的树莓派Pico开发板,主要技术规格如下:
•工作电压:1.8~5.5V;
•MCU:MCU采用树莓派基金会自研的型号为RP2040的芯片(该芯片于2021年1月随树莓派Pico开发板发布),芯片內部集成了32位双核ARM Cortex-M0+,运行时钟133MHz;
•SRAM大小:264KB;
•Flash存储器容量:2MB(QSPI接口);
•GPIO接口引脚:26个,包括3个模拟输入引脚、16个PWM通道;
•串行通信接口:2个UART、2个SPI控制器和2个I2C控制器;
•USB接口:内置USB 1.1控制器和PHY,支持主控端(host)和设备端(device);
•片内温度传感器:RP2040内置一个片内温度传感器(可用来测量RP2040芯片的温度,以便进行温度补偿或保护),可以通过ADC4读取片内温度传感器的值并转换为摄氏或华氏温度;
•WiFi无线通信功能:2.4GHz 802.11n
•Bluetooth 5.2蓝牙通信功能:2023年2月支持C程序蓝牙开发,2023年6月支持支持MicroPython蓝牙开发;
Pico W搭载英飞凌公司的AIROC CYW43439无线通信芯片,具备2.4GHz WiFi 4(802.11n,支持WPA3)和Bluetooth 5.2(可使用官方2023年2月推出的SDK 1.5编写C蓝牙程序,或使用官方2023年6月以后推出的支持Pico W蓝牙通信功能的MicroPython固件和MicroPython蓝牙库开发MicroPython蓝牙程序),带板载天线。
2.Pico W接口信号
Pico W的外观尺寸和接口信号引脚也跟Pico开发板一样,两侧各有20個接口信号引脚(如图1所示),这些引脚采用邮票孔设计,以方便下游厂商以表面粘着方式将Pico W开发板焊接到产品的主板中。
Pico W接口信号引脚说明如下:
•VSYS:2V~5V电源输入引脚。
•VBUS:从Micro USB接口获得的5V电源输出,可供电给需要5V电源的电子元件。
•3V3:3.3V电源,与Pico W的工作电压相同。
•3V3_EN:使能或禁止电源;使能或禁止Pico W以及3V3引脚的电源输出。
•RUN/RESET:启用或停用Pico∕重置,输入低电平将使Pico W停止运行。
•GP0-GP28:GPIO(通用输入/输出)引脚,板载LED与WL_GPIO0相连。
•ADC0 ~ ADC2:具备模拟输入功能的GPIO引脚,可当作模拟输入或数字输入/输出引脚。
•ADC_VREF:模数转换器(ADC)的参考电压输入。
•GND:模数转换器的接地引脚,与ADC_VREF引脚配合使用。
在这里插入图片描述
图1
特别说明的是,Pico W板载(On-board)LED引脚与Pico板载LED引脚接GPIO25不同,在MicroPython中,Pico W板载LED引脚就叫做‘LED’或者‘WL_GPIO0’(均为字符串类型),下面两行典型的MicroPython语句都表示建立控制Pico W板载LED对象:
led = Pin(‘LED’, Pin.OUT)

led = Pin(‘WL_GPIO0’, Pin.OUT)
二、低功耗蓝牙(BLE)简介
低功耗蓝牙(Bluetooth Low Energy, 简称BLE)是蓝牙无线通信技术的一种改进变体,其显著特点是省电。 与经典蓝牙不同的是,BLE 在不收发数据时可以保持在休眠状态。 BLE非常适合于使用电池供电的设备,如可穿戴式设备、安全监控设备等。
1.BLE通信拓扑结构
BLE通信拓扑结构如下:
(1)点对点(Point-to-Point):网络中两个结点(设备)之间的通信;服务器-客户机通信。
(2)Mesh网络:使用Mesh网络,多个结点可以相互通信。
(3)广播模式(Broadcast Mode):服务器通过网络广播可供许多设备读取的数据。
2.BLE设备状态机
BLE设备状态机定义了设备通信时的某些状态:
(1)待机状态(Standby state):设备既不发送也不接收数据,开机上电就是该状态。
(2)初始化状态(Initiating state):用于对其他设备发起连接。
(3)广播状态(Advertising state):发送广播数据包,告诉其他设备一些信息,以方便其他设备查找自己或连接自己。当然,并非所有广播设备都是可连接或可扫描的。
(4)连接状态(Connection state):与其他设备连接。
(5)扫描状态(Scanning state):扫描正在进行广播的设备。
(6)同步广播状态(Isochronous broadcasting state):广播同步数据包。
(7)同步状态(Synchronization state):用于周期性广播的数据同步。
BLE设备状态机如图2所示。
在这里插入图片描述
图2
从图2可知,一个BLE设备进入连接(Connection)状态时,之前的状态要么是广播(Advertising)状态, 要么是初始化(Initiating)状态。从Initiating到Connection状态的BLE设备就变成BLE主设备。从Advertising到Connection状态的BLE设备就变成BLE从设备。BLE从设备最初处于广播状态,当它接受来自BLE主设备的连接请求时,它就转换到连接状态。
这里将Pico W作为BLE从设备,并通过低功耗蓝牙与 Android 设备(Android智能手机)建立点对点通信。
三、Pico W扩展LED和按键硬件接口电路
本文实践需要的硬件材料如下:
(1)Pico W×1;
(2)Micro-USB数据线×1;
(3)面包板×1;
(4) 470Ω电阻×1;
(5)LED发光二极管×1;
(6)轻触按键×1;
(7)跳线×4。
Pico W扩展一只小功率LED和一个按键的硬件接口电路原理图如图3(a)所示,面包板按线实物图如图3(b)所示。
在这里插入图片描述
图3
四、Pico W蓝牙通信MicroPython编程
1.Pico W MicroPython固件下载与安装
首先,在Pico W上安装支持 WiFi 和BLE的Pico W MicroPython UF2 固件文件。我们可从树莓派官网https://www.raspberrypi.com/documentation/microcontrollers/micropython.html或MicroPython官网https://micropython.org/download/RPI_PICO_W/下载支持 WiFi 和BLE最新版本的Pico W MicroPython UF2文件,这里下载MicroPython固件文件名为“RPI_PICO_W-20240105-v1.22.1.uf2”,将其安装到Pico W中(具体安装方法可参见上面的树莓派官网或博主以前在CSDN发布的树莓派Pico/Pico W系列相关博文)。
2. Pico W BLE MicroPython模块
我们需要在Pico W中保存两个 MicroPython 模块,以便实现低功耗蓝牙通信功能。
这里从网站https://datasheets.raspberrypi.com/picow/connecting-to-the-internet-with-pico-w.pdf下载文件名为“connecting-to-the-internet-with-pico-w.pdf”的PDF电子书。
Pico W第1个BLE MicroPython模块见PDF电子书的Page 34-36,模块1命名为“ble_advertising.py”文件,这里使用Thonny IDE MicroPython开发环境将Page 34-36的代码粘贴(需去掉行号)并存储到Pico W中(Thonny使用方法可参考博主以前在CSDN发布的树莓派Pico/Pico W系列相关博文)。
模块1程序清单如下:

# Filename: ble_advertising.py
# Helpers for generating BLE advertising payloads.from micropython import const
import struct
import bluetooth# Advertising payloads are repeated packets of the following form:
#   1 byte data length (N + 1)
#   1 byte type (see constants below)
#   N bytes type-specific data_ADV_TYPE_FLAGS = const(0x01)
_ADV_TYPE_NAME = const(0x09)
_ADV_TYPE_UUID16_COMPLETE = const(0x3)
_ADV_TYPE_UUID32_COMPLETE = const(0x5)
_ADV_TYPE_UUID128_COMPLETE = const(0x7)
_ADV_TYPE_UUID16_MORE = const(0x2)
_ADV_TYPE_UUID32_MORE = const(0x4)
_ADV_TYPE_UUID128_MORE = const(0x6)
_ADV_TYPE_APPEARANCE = const(0x19)# Generate a payload to be passed to gap_advertise(adv_data=...).
def advertising_payload(limited_disc=False, br_edr=False, name=None, services=None, appearance=0):payload = bytearray()def _append(adv_type, value):nonlocal payloadpayload += struct.pack("BB", len(value) + 1, adv_type) + value_append(_ADV_TYPE_FLAGS,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/663809.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

日期函数

目录 显示当前日期 显示当前的时间戳 计算若干天之后的日期 计算每一位员工到今天为止的雇佣天数 计算两个日期间所经历的月数总和 计算每一位员工到今天为止的雇佣总月数 计算每一位员工到今天为止所雇佣的年限 增加若干月之后的日期 测试 add_months() 函数 查询所…

华为数通方向HCIP-DataCom H12-821题库(单选题:401-420)

第401题 R1的配置如图所示,此时在R1查看FIB表时,关于目的网段192.168.1.0/24的下跳是以下哪一项? A、10.0.23.3 B、10.0.12.2 C、10.0.23.2 D、10.0.12.1 【答案】A 【答案解析】 该题目考查的是路由的递归查询和 RIB 以及 FIB 的关系。在 RIB 中,静态路由写的是什么,下…

时间序列预测 —— TCN模型

时间序列预测 —— TCN模型 卷积神经网络(Convolutional Neural Network,CNN)在图像处理等领域取得了显著的成就,一般认为在处理时序数据上不如RNN模型,而TCN(Temporal Convolutional Network)…

十分钟上手vue!

Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue 都可以胜任。 一 vue.js的导入及使用 vue安装…

微服务框架go-zero集成swagger在线接口文档

go-zero(收录于 CNCF 云原生技术全景图:CNCF Landscape)是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。 go-zero 包含极简的 API 定义和生成工具 goctl,可以根据定义的 api 文件一键生成 Go, iOS, Android…

PostgreSQL从小白到高手教程 - 第44讲:pg流复制部署

PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。 第44讲&#…

AJAX-入门

定义 概念:AJAX是浏览器与服务器进行数据通信的技术 使用 1.先使用axios库,与服务器进行数据通信 1)基于XMLHttpRequest封装、代码简单、月下载量在14亿次 2)Vue、React项目中都会用到axios 2.再学习XMLHttpRequest对象的使用…

高宇辰:打造“π”型人才 | 提升之路系列(七)

导读 为了发挥清华大学多学科优势,搭建跨学科交叉融合平台,创新跨学科交叉培养模式,培养具有大数据思维和应用创新的“π”型人才,由清华大学研究生院、清华大学大数据研究中心及相关院系共同设计组织的“清华大学大数据能力提升项…

ElementUI Form:Upload 上传

ElementUI安装与使用指南 Upload 上传 点击下载learnelementuispringboot项目源码 效果图 el-upload.vue(Upload上传)页面效果图 el-upload.vue代码 import Vue from vue import VueRouter from vue-router import HomeView from ../views/HomeV…

【论文阅读笔记】Taming Transformers for High-Resolution Image Synthesis

Taming Transformers for High-Resolution Image Synthesis 记录前置知识AbstractIntroductionRelated WorkMethodLearning an Effective Codebook of Image Constituents for Use in TransformersLearning the Composition of Images with Transformers条件合成合成高分辨率图…

Interpolator:在Android中方便使用一些常见的CubicBezier贝塞尔曲线动画效果

说明 方便在Android中使用Interpolator一些常见的CubicBezier贝塞尔曲线动画效果。 示意图如下 import android.view.animation.Interpolator import androidx.core.view.animation.PathInterpolatorCompat/*** 参考* android https://yisibl.github.io/cubic-bezier* 实现常…

操作系统真象还原---系列笔记总结

闲话 最开始知道这本书是在校内论坛上,有同学通过这本书里的项目拿到大厂的ssp offer,于是就从网上订购了这本较为大部头的书,想要在简历上添加一个足够底层并且有意思的项目经历,从而帮助自己在秋招时赢得一个好的offer。 第一遍…

个人网站如何让搜索引擎收录

当我们花费功夫搭建好个人网站,如何能让搜索引擎搜索到个人网站呢?比如百度,根本百度不到自己网站的内容。这时候就要使用到搜索引擎提供的站点收录功能了,但是点开百度的搜索资源平台,添加自己的站点时,就…

Java/Python/Go不同开发语言基础数据结构和相关操作总结-Map篇

Java/Python/Go不同开发语言基础数据结构和相关操作总结 1. Java1.1 基础操作1.1.1 数据结构和定义方式1.1.2 增加1.1.3 修改1.1.4 查询1.1.5 删除1.1.6 获取总长度1.1.7 按key排序1.1.8 按value排序1.1.9 遍历 1.2 常用其他方法1.2.1 几种数据结构的对比 2. Go2.1基础操作2.1.…

C# 反射详解:动态编程的利器

文章目录 前言一、反射的原理二、反射的基本概念三、反射的主要API1、Type类:2、MemberInfo类:3、PropertyInfo类:4、MethodInfo类:5、Assembly类:6、EventInfo 类7、FieldInfo 类 四、使用场景五、使用方法1. 获取类型…

详解C++中auto关键字

auto关键字 auto关键字(C11)类型别名思考auto简介auto的使用细则auto与指针和引用结合起来使用在同一行定义多个变量 auto不能推导的场景1.auto不能作为函数的参数2.auto不能直接用来声明数组 auto关键字(C11) 类型别名思考 随着程序越来越复杂,程序中用到的类型也…

山东淄博刑侦大队利用无人机抓获盗窃团伙

山东淄博刑侦大队利用无人机抓获盗窃团伙 近期,山东淄博临淄区发生多起盗窃案件。通过视频追踪和调查访问,推断临淄区某村可能为嫌疑人藏匿地点。刑侦大队无人机应急小组迅速到达现场,经无人机高空侦查,发现并锁定了嫌疑人的藏匿…

vue使用pdf.js实现在线查看pdf文件

需求&#xff1a;有一个列表页&#xff0c;用户点击查看&#xff0c;弹层展示后台接口返回的pdf内容(不是文件、地址之类的&#xff0c;乱码的pdf铭文(二进制文件流)) 1、pdf.js安装 npm install --save vue-pdf2、正文代码 <template><div><el-table :data&q…

SpringBoot+Vue使用AES进行接口加密

目录 前言 一、前端工作准备 1.下载crypto-js 2.加密解密工具类 3.对axios请求拦截加密 二、后端工作准备 1.所需依赖 2.实现RequestBodyAdvice 3.实现HttpInputMessage 三、数据响应加密&#xff08;扩展&#xff09; 1.实现 ResponseBodyAdvice&#xff08;后端&#xff…

【python】RGB色彩空间转Lab色彩空间

用于检验的网站&#xff1a;颜色空间转换 - 在线工具 (buyaocha.com) 单个输入 import numpy as npdef rgb_to_xyz(rgb):# 将RGB值转换为XYZ空间rgb np.array(rgb) / 255.0rgb np.where(rgb < 0.04045, rgb / 12.92, ((rgb 0.055) / 1.055) ** 2.4)rgb rgb.reshape((…