树莓派Pico W无线WiFi开发板使用方法及MicroPython编程实践

news2024/11/19 5:24:10

树莓派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 -= 1
    print('等待连接!')
    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',则开LED
        if onboard_led_on > -1:
            print('开LED')
            onboard_led.value(1)
        # 若找到'?onboard_led=0',则关LED
        if 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>&nbsp;
        <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网络服务器独立运行。

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

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

相关文章

Spring——什么是IOC?

一、原则高内聚、低耦合二、什么是IOC&#xff1f;控制反转&#xff0c;把对象创建和对象之间的调用过程&#xff0c;交给spring进行管理三、使用IOC的目的是什么&#xff1f;降低耦合&#xff08;谁和谁的耦合&#xff1f;&#xff1f;如何降低的&#xff1f;&#xff09;原来…

openai-chatGPT的API调用异常处理

因为目前openai对地区限制的原因&#xff0c;即使设置了全局代理使用API调用时&#xff0c;还是会出现科学上网代理的错误问题。openai库 0.26.5【错误提示】&#xff1a;raise error.APIConnectionError(openai.error.APIConnectionError: Error communicating with OpenAI: …

泛型详解.

1 泛型的引入 问题&#xff1a;我们之前实现过的顺序表&#xff0c;只能保存 int 类型的元素&#xff0c;如果现在需要保存 指向 Person 类型对象的引用的顺序表&#xff0c;请问应该如何解决&#xff1f;如果又需要保存指向 Book 对象类型的引用呢&#xff1f; 之前写的顺序表…

红黑树-随记

文章目录1.为什么hashmap用红黑树不用二叉树和平衡二叉树1.1 二叉树&#xff08;Binary Search Tree&#xff09;1.2 红黑树&#xff08;Red Black Tree&#xff09;1.3 平衡二叉树&#xff08;Balence Binary Tree&#xff09;也称AVT2.为什么mysql用b数&#xff0c;不用B数或…

Windows程序员学习Linux环境下VI(VIM)编辑器的使用方法

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天我们来重新审视一下Windows程序员如何学习Linux环境知识。由于很多程序在Windows环境下开发好后&#xff0c;还要部署到Linux服务器上去&#xff0c;所以作为Windows程序员有必要学习Linux环境的知识。VI…

为什么KT6368A双模蓝牙芯片焊到板子上,没反应没收到芯片TX上电返回信息呢

目录 一、问题简介 为什么我把KT6368A芯片焊到板子上面&#xff0c;没有收到芯片TX的脚上电返回信息呢&#xff0c;而KT6368A芯片的2脚一直是2点多v的电压&#xff0c;换了好几个芯片都是这样 二、详细说明 一、问题简介 为什么我把KT6368A芯片焊到板子上面&#xff0c;没有…

QWidgetTable获取选中多行数据

QWidgetTable获取选中的多行数据获取选中行的行编号和打印指定第几列功能快捷键插入链接与图片创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能&#xff0c;丰富你的文章UML 图表FLowchart流…

buu [NPUCTF2020]这是什么觅 1

题目描述&#xff1a; 就一个这种文件&#xff0c;用记事本打开后&#xff1a; 题目分析&#xff1a; 打开后就一串看不懂的东西&#xff0c;想想这个东西曾经在 010editor 或 winhex中出现过&#xff08;右端&#xff09;既然如此那么我们就用它打开&#xff0c;得到&#…

使用 JaCoCo 生成测试覆盖率报告

0、为什么要生成测试覆盖率报告 在我们实际的工作中&#xff0c;当完成程序的开发后&#xff0c;需要提交给测试人员进行测试&#xff0c;经过测试人员测试后&#xff0c;代码才能上线到生产环境。 有个问题是&#xff1a;怎么能证明程序得到了充分的测试&#xff0c;程序中所…

线程池和ThreadLocal详解

线程池和ThreadLocal详解线程池池化模式&#xff1a;线程池里的线程数量设定为多少比较合适?添加线程规则&#xff1a;实现原理&#xff1a;线程池实现任务复用的原理线程池状态&#xff1a;Executors 创线程池工具类手动创建&#xff08;更推荐&#xff09;&#xff1a;自动创…

高码率QPSK调制解调方案(FPGA实现篇)

在前面的章节中,已经讲过QPSK调制的方案和Matlab算法仿真,在本篇中,主要讲解基于FPGA的高速QPSK调制的实现。根据前面提到的技术指标,本系统传输的数据速率为500Mbps,中频为720MHz,因此,传统的串行QPSK调制已经不合适在FPGA中实现,需采用全数字的并行方式进行调制,具体…

电商API是什么?为什么要用?主要应用场景有哪些?

电商API是什么&#xff1f;API是application programming interface&#xff08;应用程序接口&#xff09;的简称&#xff0c;实际上是一些预先定义的函数&#xff0c;目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力&#xff0c;而又无需访问源码&#x…

强强联合,再强的英伟达NVIDIA也不落俗套

强强联合&#xff0c;全球科技领域永恒的话题【科技明说 &#xff5c; 每日看点】前些天&#xff0c;我看到GPU领域的英伟达(Nvidia)与微软(Microsoft)做了一项十年期的云计算协议&#xff0c;起初我以为微软Microsoft Azure与英伟达GPU方面有所合作&#xff0c;其实不然&#…

微小目标识别研究(1)——白酒杂质识别

文章目录研究项目简介基于机器视觉技术的白酒杂质检测系统研究&#xff08;大概浏览&#xff09;研究背景国内外研究现状和发展趋势国内国外总结白酒杂质检测算法YOLO V3算法K近邻算法滤波处理动态范围增强形态学图像处理运动目标提取数据集制作数据增强基于机器视觉的液体药品…

学习笔记 —— 基于C加速的Python高效计算 (Cython pybind11)

目录引言Cython示例介绍第一阶段优化第二阶段优化Cython Annotation tool优化方法第三阶段优化比对下 JIT的Numba总结pybind11LinksIntroductionImplementationImplementation CmakecytpesCython & pybind11 性能比较TODO Implementation Cmake --pybind11 Cython & py…

Linux SPI 驱动实验

目录 一、Linux 下 SPI 驱动框架简介 1、SPI 主机驱动 2、SPI 设备驱动 SPI 设备数据收发处理流程 3、SPI 设备和驱动匹配过程 二、添加SPI 设备信息 1、添加 ICM20608 所使用的 IO 2、 在 ecspi3 节点追加 icm20608 子节点 三、编写 ICM20608 驱动 1、修改makefile​…

深度学习目标检测ui界面-交通标志检测识别

深度学习目标检测ui界面-交通标志检测识别 为了将算法封装起来&#xff0c;博主尝试了实验pyqt5的上位机界面进行封装&#xff0c;其中遇到了一些坑举给大家避开。这里加载的训练模型参考之前写的博客&#xff1a; 自动驾驶目标检测项目实战(一)—基于深度学习框架yolov的交通…

C++ 二级指针的理解

指针一直很抽象&#xff0c;不是很容易理解&#xff0c;尤其是二级指针。有天路上&#xff0c;脑子里突然想起二级指针&#xff0c;并开始思考什么是二级指针&#xff0c;经过分析和调试验证&#xff0c;对二级指针有了进一步的认识。故写下此篇。 一级指针 假设变量 a、p 的…

消息队列 rabbitmq 学习

RabbitMQ是一个在AMQP基础上完整的&#xff0c;可复用的企业消息系统。他遵循Mozilla Public License开源协议。 MQ全称为Message Queue, 消息队列&#xff08;MQ&#xff09;是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息&#xff08;针对应用程序的数…

[YOLO] yolov4 博客笔记

在有了yolov3的基础上&#xff0c;yolov4的网络结构还是很容易看懂的。 这篇博客写的整个yolov4的网络概况 【经典论文解读】YOLOv4 目标检测https://blog.csdn.net/qq_41204464/article/details/119673960?ops_request_misc%257B%2522request%255Fid%2522%253A%25221677916…