树莓派Pico W无线WiFi开发板使用方法及MicroPython编程实践
树莓派Pico W开发板是树莓派基金会于2022年6月底推出的一款无线WiFi开发板,它支持C/C++和MicroPython编程。本文介绍树莓派Pico W无线WiFi开发板的使用方法及MicroPython编程示例,包括树莓派Pico W开发板板载LED使用及控制编程示例,Pico W开发板用作WiFi无线HTTP网络服务器的MicroPython编程示例。
1、树莓派Pico W无线WiFi开发板简介
树莓派Pico W无线WiFi开发板是在树莓派Pico基础上,添加了无线通讯功能模块,无线模块硬件采用了英飞凌CYW43439无线芯片,支持WiFi 4无线网络,给无线网络控制和通信相关的嵌入式系统与智能硬件应用开发提供了极大的方便。
Pico W开发板主要功能特性有:
•采用树莓派官方自主设计的RP2040 MCU芯片;
•搭载双核ARM Cortex M0+处理器,运行频率高达133MHz(灵活时钟);
•采用英飞凌CYW43439线芯片,支持WiFi 4无线网络;
•内置264KB的SRAM和2MB片上Flash;
•邮票孔设计,可直接焊接集成到用户自主设计的PCB底板上;
•USB1.1主机和设备支持;
•支持低功耗睡眠和休眠模式;
•可通过USB接口识别海量存储器进行拖放式程序下载;
•多达26个多功能GPIO引脚;
•2个SPI,2个I2C,2个UART,3个12位ADC,16个程控PWM通道;
•精确的片上时钟和定时器;
•温度传感器;
•片上加速浮点库;
•8个可编程I/O(PIO)状态机,用于支持自定义外设。
2、下载Pico W开发板MicroPython固件
可从网址https://datasheets.raspberrypi.com/soft/micropython-firmware-pico-w-290622.uf2直接下载Pico W开发板UF2格式MicroPython固件文件,也可从网址https://www.raspberrypi.com/documentation/microcontrollers/micropython.html或https://micropython.org/download/rp2-pico-w下载Pico W开发板最新版本UF2格式MicroPython固件文件。
3、安装MicroPython固件到Pico W开发板
找到Pico W开发板的[BOOTSEL]按钮,将连接PC机与Pico W的USB-Micro USB电缆线Micro USB接头插入Pico W开发板,如图1所示。按住[BOOTSEL]按钮并保持,然后将USB-Micro USB电缆线USB接头插入PC机USB接口,即通过USB接口将Pico W开发板连接到已开机的电脑,稍后松开Pico W开发板的[BOOTSEL]按钮。此时,Pico W开发板进入USB海量存储工作模式(USB mass storage device mode),说得通俗一点,此时,Pico W开发板就相当于是一个U盘,它会显示一个名为RPI-RP2的盘符和两个文件。将刚下载好的micropython-firmware-pico-w-290622.uf2固件文件拖拽到(或复制到)RPI-RP2所在盘中,Pico W开发板MicroPython固件安装成功,Pico W重新启动进入虚拟串口终端工作模式。
图1
4、安装Thonny IDE
Thonny IDE支持Windows、Mac、Linux操作系统,可从Thonny官方网站https://thonny.org下载最新版Thonny IDE,如图2所示。这里下载Windows版Thonny并安装到PC机。
图2
5、使用Thonny IDE设置Pico W开发板MicroPython编程环境
运行Thonny,单击菜单栏的[Tools],选择[Options…],弹出[Thonny Options]对话框,选择【Which interpreter or device should Thonny use for running your code?】下拉列表中的[MicroPython(Raspberry Pi Pico)]选项,如图3所示。如果没有发现[MicroPython(Raspberry Pi Pico)]选项,那么请检查PC机是否连接了Pico W开发板。
图3
选择【Port】下拉列表,本人笔记本电脑连接Pico W开发板设备后,其设备名称是[USB串行设备(COM24)],如图4所示。
图4
6、使用Thonny Shell输入MicroPython命令点亮Pico W开发板板载LED
与树莓派Pico开发板板载LED通过470Ω贴片电阻直接连接到RP2040 MCU芯片的GPIO25(GP25)引脚不同,树莓派Pico W开发板板载LED没有连接到RP2040 MCU芯片引脚,而是连到无线芯片的GPIO引脚。树莓派Pico W开发板MicroPython固件针对GPIO引脚的变化、新增WiFi无线连接等功能做了修改。
运行Thonny,在Thonny IDE开发环境MicroPython Shell命令行下,控制树莓派Pico W板载LED的亮/灭基本语句如下:
>>> import machine
>>> onboard_led = machine.Pin("LED", machine.Pin.OUT)
>>> onboard_led.value(1) # Pico W板载LED点亮
>>> onboard_led.value(0) # Pico W板载LED熄灭
>>> onboard_led.on() # Pico W板载LED点亮
>>> onboard_led.off() # Pico W板载LED熄灭
若查看Pico W板载LED对象onboard_led,可直接输入onboard_led:
>>> onboard_led
此时,Thonny Shell显示:
Pin(WL_GPIO0, mode=OUT)
以上MicroPython命令操作界面执行情况如图5所示。
图5
我们也可以执行如下命令:
>>> onboard_led = machine.Pin("LED", machine.Pin.OUT, value=1)
该命令将配置Pico W板载lED对象onboard_led,并将该对象与Pico W板载LED关联并点亮板载LED。
7、控制Pico W开发板板载LED闪烁MicroPython程序示例
Pico W板载LED闪烁程序清单如下:
# Filename: pico_w_onboard_led.py
import time
def onboard_led_blink():led = machine.Pin('LED', machine.Pin.OUT)led.on()time.sleep(.5)led.off()time.sleep(.5)
while True:
onboard_led_blink()
在Thonny IDE编辑窗口录入以上程序,顺序点击[File]→[Save as…]→[Raspberry Pi Pico]将程序以文件名“pico_w_onboard_led.py”存储到Pico W开发板,如图6所示。点击Thonny中的播放按钮运行程序,此时可看到Pico W板载LED间断闪亮。
图6
8、Pico W开发板用作WiFi无线HTTP网络服务器MicroPython编程示例
这里将Pico W开发板用作WiFi无线HTTP网络服务器,我们在任意一台电脑或手机的浏览器输入Pico W开发板的IP地址打开index.html网页。当点击网页中的[1]/[0]按钮时即可WiFi无线控制Pico W开发板板载LED的亮/灭。
下面分别编写main.py程序文件、index.html网页文件。
(1)main.py程序文件清单
# Filename: main.py
# Raspberry Pi Pico W
# 导入Pico W MicroPython模块
import rp2 # 导入rp2模块,该模块包含专门用于RP2040的函数和类
import network # 导入network模块,用于连接WiFi
import ubinascii # 导入ubinascii模块,用于将MAC地址转换为十六进制字符串
import machine # 导入machine模块,用于GPIO控制
import urequests as requests # 导入urequests模块,用于HTTP请求
import time # 导入time模块,用于延时
import socket # # 导入socket模块,用于建立套接字
# 设置国家/地区代码以避免发生可能的错误
# CN/US/DE/DK/GB/JP(国家或地区代码:中国/美国/德国/丹麦/英国/日本)
rp2.country('CN') # 这里设置Pico W的国家/地区代码为中国
wlan = network.WLAN(network.STA_IF) # 创建WLAN连接对象
wlan.active(True) # 激活WLAN接口# 查看Pico W开发板无线WiFi的MAC地址
# 获取MAC地址,并将其转换为十六进制字符串
mac = ubinascii.hexlify(network.WLAN().config('mac'),':').decode()
print('Pico W MAC地址=' + mac) # 显示Pico W开发板十六进制MAC地址ssid = '所使用的WiFi名称' # 设置WiFi名称 (ssid: service set identifier)
psw = '所使用的WiFi密码' # 设置WiFi密码wlan.connect(ssid, psw) # 连接到WiFi网络timeout = 10 # 设置最长等待连接时间为10秒
while timeout > 0:if wlan.status() < 0 or wlan.status() >= 3: # 如果WiFi连接成功或者失败break # 跳出循环timeout -= 1print('等待连接!')time.sleep(1) # 延时1秒# 定义Pico W板载LED闪亮函数
def onboard_led_blink(blink_numbers):onboard_led = machine.Pin('LED', machine.Pin.OUT) # 创建GPIO控制对象for i in range(blink_numbers):onboard_led.value(1) # 点亮LED# onboard_led.on() # 另一种点亮LED的方法time.sleep(0.5) onboard_led.value(0) # 熄灭LED# onboard_led.off() # 另一种熄灭LED的方法time.sleep(0.5)wlan_status = wlan.status() # 获取当前WiFi连接状态
onboard_led_blink(wlan_status) # 根据WiFi连接状态控制LED# 处理连接错误
if wlan_status != 3: # 如果WiFi连接失败raise RuntimeError('WiFi连接失败!') # 抛出异常
else:print('WiFi已连接...')status = wlan.ifconfig() # 获取WiFi接口配置信息print('IP地址=' + status[0]) # 输出IP地址# 定义加载HTML页面函数
def get_html(html_name):with open(html_name, 'r') as file: # 打开HTML文件html = file.read() # 读取HTML内容return html# 打开HTTP Web服务器套接字socket
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1] # 获取IP地址和端口号
s = socket.socket() # 创建socket对象
s.bind(addr) # 绑定socket到IP地址和端口号
# 开始监听端口号,最多只允许1个客户端连接
s.listen(1)print('正在监听', addr)onboard_led = machine.Pin('LED', machine.Pin.OUT)# 进入循环,监听连接
while True:try:# 接受客户端连接,获取连接和地址cl, addr = s.accept()print('客户机连接来自', addr)# 接收客户端请求消息r = cl.recv(1024)r = str(r)# 在请求消息中查找是否有开/关LED的命令onboard_led_on = r.find('?onboard_led=1')onboard_led_off = r.find('?onboard_led=0')print('LED=', onboard_led_on)print('LED=', onboard_led_off)# 若找到'?onboard_led=1',则开LEDif onboard_led_on > -1:print('开LED')onboard_led.value(1)# 若找到'?onboard_led=0',则关LEDif onboard_led_off > -1:print('关LED')onboard_led.value(0)# 获取HTML文件内容response = get_html('index.html')# 发送HTTP响应头cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n')# 发送HTML文件内容cl.send(response)# 关闭客户端套接字cl.close()# 若发生OSError错误,则关闭客户端套接字并输出相关信息except OSError as e:cl.close()print('关闭连接')
在main.py程序中,ssid = '所使用的WiFi名称’要用具体的WiFi名称替换,psw = '所使用的WiFi密码’要用相应的密码替换。由于本程序代码已给出了详细注释,这里不再作进一步解释。
(2)index.html网页文件清单
<!DOCTYPE html>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title>树莓派Pico W开发板</title></head><body><h3>树莓派Pico W</h3><p>控制板载LED亮灭</p><a href=\"?onboard_led=1\"><button>1</button></a> <a href=\"?onboard_led=0\"><button>0</button></a></body>
</html>
复制粘贴上面的main.py程序和index.html文件内容,并用相同的文件名分别存到Pico W开发板,如图7所示。
图7
运行Pico W开发板中的main.py程序后,在Thonny Shell窗口显示情况如图8所示。
图8
从图8可知,这里的Pico W开发板用作WiFi无线HTTP网络服务器的IP地址为192.168.1.12。现用一台笔记本电脑打开浏览器,在浏览器地址栏输入IP地址192.168.1.12,将显示index.html网页。在网页中,当点击[1]按钮(标红色框的按钮)时(图9所示),Pico W开发板板载LED被点亮(图10)。点击[0]按钮时,Pico W开发板板载LED熄灭。
图9
图10
打开手机浏览器,在地址栏输入IP地址192.168.1.12,同样可以实现WiFi无线控制Pico W板载LED的亮灭。
若Pico W开发板无法正常连接WiFi,可按下面几条进行处理:
(1)查看使用的SSID和密码是否正确;
(2)如果使用学校或工作场所的WLAN,未经授权的设备可能无法访问WiFi;
(3)如果Pico W开发板WiFi连接一次不成功,可尝试再次连接WiFi。
最后,我们还可以拔下Pico W开发板USB-Micro USB电缆线连接到电脑端的USB插头,断开Pico W开发板与电脑之间的连接。将Pico W开发板USB-Micro USB电缆线接电脑端的USB插头转接到一个5V USB直流电源(如使用Samsung 5V手机USB充电器电源)。此时,Pico W开发板将作为HTTP网络服务器独立运行。
相关文章:

树莓派Pico W无线WiFi开发板使用方法及MicroPython编程实践
树莓派Pico W开发板是树莓派基金会于2022年6月底推出的一款无线WiFi开发板,它支持C/C和MicroPython编程。本文介绍树莓派Pico W无线WiFi开发板的使用方法及MicroPython编程示例,包括树莓派Pico W开发板板载LED使用及控制编程示例,Pico W开发板…...

Redis学习【11】之分布式系统
文章目录一 数据分区算法1.1 顺序分区1.1.1 轮询分区算法1.1.2 时间片轮转分区算法1.1.3 数据块分区算法1.1.4 业务主题分区算法1.2 哈希分区1.2.1 节点取模分区算法1.2.2 一致性哈希分区算法1.2.3 虚拟槽分区算法二 分布式系统环境搭建与运行2.1 系统搭建2.1.1 系统架构2.1.2 …...
光速c数列的猜想:光猜
光速c数列的猜想:光猜 2023-03-05 10:26:30 猜测:不同的宇宙光速c并不同 分成等级数列c0,c1,c2,...cn... 地球所处宇宙的真空光速c为c1,其中c0或许假设为光在纯水中速度乎 亦有可能仅有六级对应六道。 宇宙外,容器外也,超过光速c1,为光速c2,可看到容器…...
2023年全国最新交安安全员精选真题及答案12
百分百题库提供交安安全员考试试题、交安安全员考试预测题、交安安全员考试真题、交安安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 21.作业场所监督检查是安全生产监督管理的一种重要形式,作业场所监督…...
2023年全国最新安全员精选真题及答案14
百分百题库提供安全员考试试题、建筑安全员考试预测题、建筑安全员ABC考试真题、安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 81.(单选题)正常工作状态下,高处作业吊篮悬挂机构抗…...
让Vue响应Map或Set的变化操作,在vue中响应map和set数据结构,计算属性的用法,计算属性特点
明确一点 vue的响应式系统不支持Map和Set,也就是说,当Map与Set里面的元素变化时Vue追踪不到这些变化,因此无法做出响应。 如下demo其实是不会进行数据相应的 <h1 v-for"(item,index) in mySetAsList" :key"index"&…...

Unable to find a valid cuDNN algorithm to run convolution
Unable to find a valid cuDNN algorithm to run convolution 今天在复习HumanNerf的时候发现了这个报错, import torch print(torch.cuda.is_available()) 使用上面的代码发现GPU是可以用的,可自己的torch版本对应。 后面继续看帖子,总结有…...

Linux 进程:进程退出返回值的获取
目录一、对输出参数status的理解二、获取进程退出返回值1.位运算(1)异常退出码(2)进程返回值2.宏函数我们常使用函数 wait 和 waitpid 来执行进程等待的功能:处理退出的子进程并释放资源,防止子进程变成僵尸进程。而这两个函数都有一个输出参数status&am…...
JavaScript核心高级内容复习1
本节概述 数据类型的分类和判断 基本(值)类型 Number ----- 任意数值 -------- typeofString ----- 任意字符串 ------ typeofBoolean ---- true/false ----- typeofundefined — undefined ----- typeof/null -------- null ---------- 对象(引用)类型 Object ----- typeof…...

2D图像处理:Qt + Opencv使用光度立体法检测Halcon中提供的缺陷图像
文章目录 不需知道光源方向一、光度立体法(后续有时间在查资料研究)1.1 问题1:Slants和Tilts的理解(暂时是理解的)1.2 问题1:Gradient通道数为1,为何像素点对应的值会有两个?1.3 问题2:F(r,c)=(u(r,c),v(r,c)) 关于高斯曲率和平均曲率如何计算的?二、非标定光源实现光…...
怎样用sql去查一个订单表中一个店铺一段时间的营业收入的环比
一:思路 要查询一个订单表中一个店铺一段时间的营业收入的环比,可以按照以下步骤进行操作: 使用SELECT语句选择需要的数据列,如订单日期和订单金额,以及店铺名称列。 使用WHERE语句过滤出指定店铺和时间段的订单数据…...

SpringSecurity: 默认添加的15个Filter是怎么添加进去的?
总的流程分为两部分,一是先用Map把configurer收集起来,然后再把maper中所有的configurer应用到HttpSecurity对象。 其中的map位于AbstractConfiguredSecurityBuilder这个类。 private final LinkedHashMap<Class<? extends SecurityConfigurer&l…...

学习记录---latent code 潜在编码
文章目录参考文献1. 什么是潜在编码?2.什么是潜在空间?3.同类潜在编码的相似性4.潜在编码的应用4.1 Antoencoders4.2 Generative models5.结论个人学习总结,持续更新中……参考文献 [1] 快速理解深度学习中的latent code潜在编码 1. 什么是…...

Cesium三维数据格式以及生产流程详解(glb,osgb,obj,bim,ifc)等
最近收到私信问我在cesium上展示的一些三维数据是如何生产和处理的,这篇文章就给大家一次性讲个透彻。 首先我们来做做分类。市面上能接触到的,常见的,cesium上支持展示的三维数据大致分为以下几种: 1.倾斜摄影(osgb,obj) 2.点云数据(las,pts) 3.手工模型(gltf,…...
2023年备考信息安全工程师每日知识点(1)
信息安全工程师在软考中属于中级认证,难度尚可,如果从今天开始学的话,肯定来得及 作者简介: 吉林师范大学网络空间安全的一名普通的大一学生已于2022年拿到华为阿里腾讯三家认证吉师信网中心的一名可怜打工人华为MindSpore截至目…...
Unity记录3.1-地图-TileMap简单使用、鼠标拖动放置Tile
文章首发及后续更新:https://mwhls.top/4456.html,无图/无目录/格式错误/更多相关请至首发页查看。 新的更新内容请到mwhls.top查看。 欢迎提出任何疑问及批评,非常感谢! 汇总:Unity 记录 上章的课程接下来是巡逻的敌人…...

Decoupled Knowledge Distillation(CVPR 2022)原理与代码解析
paper:Decoupled Knowledge Distillationcode:https://github.com/megvii-research/mdistiller/blob/master/mdistiller/distillers/DKD.py背景与基于响应logits-based的蒸馏方法相比,基于特征feature-based的蒸馏方法在各种任务上的表现更好…...

IronWebScraper 2023.2.2 Crack
关于 .NET 的 IronWebScraper 用于从 HTML Web 应用程序中提取干净的结构化数据的 C# 框架。 IronWebScraper for .NET 是一个 C# 网络抓取库,它允许开发人员模拟和自动化人类浏览行为,以从 Web 应用程序中提取内容、文件和图像作为本机 .NET 对象。Iron…...
【2.1 golong中条件语句if】
1. 条件语句if 1.1.1. Go 语言条件语句: 条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为 true 来决定是否执行指定语句,并在条件为 false 的情况在执行另外的语句。 Go 语言提供了以下几种条件判断语句: 1.1…...
Scala编程(第四版)
Scala编程可伸缩的语言面向对象与函数式编程Scala优势Scala是兼容的可伸缩的语言 1、适合构建将java组件组装在一起的脚本 2、用于编写可复用组件,并讲这些组件构建成大型框架 Scala是一门综合面向对象和函数式编程概念的静态类型编程语言 面向对象与函数式编程 面…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...