一、树莓派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