树莓派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,一经查实,立即删除!

相关文章

华为数通方向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安装…

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* 实现常…

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

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

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.…

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

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

格式化内存卡后,如何找回丢失的监控视频?

随着摄像头的应用越来越广泛,很多监控摄像头采用了内存卡作为存储介质,方便用户存储和查看摄像头拍摄的视频文件。然而,由于各种原因,监控摄像头的内存卡有时会被意外格式化导致重要数据的丢失,给用户带来诸多困扰。 那…

SpringMVC请求和响应

文章目录 1、请求映射路径2、请求参数3、五种类型参数传递3.1、普通参数3.2、POJO类型参数3.3、嵌套POJO类型参数3.4、数组类型参数3.5、集合类型参数 4、json数据传递4.1、传递json对象4.2、传递json对象数组 5、日期类型参数传递6、响应6.1、响应页面6.2、文本数据6.3、json数…

PHP集成开发 -- PhpStorm 2023

PhpStorm 2023是一款强大的PHP集成开发环境(IDE),旨在提高开发人员的生产力和代码质量。以下是关于PhpStorm 2023软件的详细介绍: 首先,PhpStorm 2023提供了丰富的代码编辑功能,包括语法高亮、自动补全、代…

【DDD】学习笔记-代码模型的架构决策

代码模型属于软件架构的一部分,它是设计模型的进化与实现,体现出了代码模块(包)的结构层次。在架构视图中,代码模型甚至会作为其中的一个视图,通过它来展现模块的划分,并定义运行时实体与执行视…

【AudioPolicy To AudioHAL笔记(三)】安卓S上audio_policy_configuration.xml 加载过程分析

安卓S上audio_policy_configuration.xml 加载过程分析 /*****************************************************************************************************************/ 声明: 本博客内容均由https://blog.csdn.net/weixin_47702410原创,转载or引用请注明…

「效果图渲染」效果图与3D影视动画渲染平台

效果图渲染和3D影视动画渲染都是视觉图像渲染的领域应用。效果图渲染主要服务于建筑、室内设计和产品设计等行业,这些领域通常对视觉呈现的精度和细节有较高要求。与之相比,3D影视动画渲染则普遍应用于电影、电视、视频游戏和广告等媒体领域,…

LLM(3) | 自注意力机制 (self-attention mechanisms)

LLM(3) | 自注意力机制 (self-attention mechanisms) self-attention 是 transformer 的基础, 而 LLMs 大语言模型也都是 transformer 模型, 理解 self-attention, 才能理解为什么 LLM 能够处理好上下文关联性。 本篇是对于 Must-Read Starter Guide t…

题目: 有1234个数字, 组成多个互不相同且无重复数字的三位数? 都是多少?

lua脚本如下 最原始的解题方法 local str{} local i, j, k0, 0, 0 for i1, 4 do for j1, 4 do for k1, 4 do if i~j and i~k and j~k then str[#str1]i..j..k end end end end print("组成的数有"..#str) print(table.unpack(str)) 运行的结果如下 组成的数有24 1…