一、树莓派PICO W
1.1
PICO W和PICO的区别是前者加入了WIFI及低功耗蓝牙功能,因此PICO W无需外接其他无线模块就能开发出一些网络即时通讯、蓝牙通信等应用。以下是对PICO W参数的一些说明
树莓派Pico W在保留 Pico 外形尺寸的同时,使用英飞凌 CYW43439 增加了板载单频 2.4GHz 无线接口(802.11n)。板载 2.4GHz 无线接口具有以下功能:
无线(802.11n),单频(2.4 千兆赫)WPA3软接入点,最多支持四个客户端
蓝牙 5.2
支持蓝牙 LE 中央和外设功能
支持经典蓝牙
天线采用 ABRACON(前 ProAnt)授权的板载天线。无线接口通过 SPI 与 RP2040 微控制器连接。
由于引脚限制,部分无线接口引脚是共享的。CLK 与 VSYS 监视器共享,因此只有在没有 SPI 传输时,才能通过 ADC 读取 VSYS。英飞凌 CYW43439 DIN/DOUT 和 IRQ 均共享 RP2040 上的一个引脚。只有当 SPI 没有进行传输时,才适合检查 IRQ。接口的运行频率通常为 33MHz。
为获得最佳无线性能,天线应位于较少阻碍物的空间。例如,在天线下方或附近放置金属会降低天线的增益和带宽性能。在天线两侧添加接地金属可提高天线的带宽。
注意CYW43439 无线芯片通过 SPI 与 RP2040 连接。CYW43439 通过该接口支持 802.11 无线和蓝牙。

PICO、PICO W实物图
PICO W 引脚布局图

1.2
PICO W支持的开发环境和PICO一样,C/C++、Python、Lua等,这里使用Python语言实现通过网页控制PICO W板载LED亮灭,
二、
IDE工具选用Thony

Python源码:
# 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')
#DIYprint('LED=', onboard_led_on)
#DIYprint('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('关闭连接')网页HTML源码:
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>树莓派Pico W开发板</title> <link rel="stylesheet" href="https://www.html5tricks.com/demo/css3-gelatin-button/css/normalize.css"> <link rel="stylesheet" href="https://www.html5tricks.com/demo/css3-gelatin-button/css/style.css" media="screen" type="text/css" /> </head> <body style="background-color:#E7F8F9"> <h3>树莓派Pico W</h3> <p>网页控制板载LED亮灭</p> <a href=\"?onboard_led=1\" class="btn"><button>ON</button></a> <a href=\"?onboard_led=0\" class="btn"><button>OFF</button></a> <script src='https://www.html5tricks.com/demo/css3-gelatin-button/js/jquery.js'></script> <script src="https://www.html5tricks.com/demo/css3-gelatin-button/js/index.js"></script> <div style="text-align:center;clear:both;margin-top:50px"> <script src="https://www.html5tricks.com/follow.js" type="text/javascript"></script> </div> </body> </html>
三、实验效果
使用浏览器输入PICO W连接热点后获取的IP地址,IP地址为192.168.0.127

浏览器地址栏直接输入192.168.0.127并回车,出现如下网页

点击ON、OFF按钮可以看到PICO W板载LED的点亮、熄灭情况,同时控制台输出按键按下信息

动态GIF


我要赚赏金
