的树莓皮皮皮是一个绝妙的装备,但它缺少一个关键功能,Wi-Fi!我们第一次偶然发现在树莓派Pico上添加Wi-Fi的想法是在审查Cytron Maker Pi Pico,为ESP8266变体板提供ESP-01接口。然而,这是相当有限的。
CircuitPython开发主管Scott Shawcroft后出现在π,我们每周Pi-themed节目,我们得知Adafruit基于ESP32插件板提供基本的wi - fi连接,所以经过一天的修补我们创建了本教程显示如何让你的树莓πPico在线。
要在树莓派Pico上使用Wi-Fi,你需要:
- 树莓派皮科
- Adafruit Airlift WiFi Featherwing Co-Processor
- 8 x公对公跳线
- 试验板
本教程的目标是让我们的树莓派Pico通过Wi-Fi连接到互联网,访问OpenWeather服务API,并获得我们选择的位置的天气。这些原始数据被发送到Python shell,但可以很容易地将其发送到OLED屏幕、LCD或用于触发将要发生的事件序列。
为Wi-Fi连接Raspberry Pi Pico
对于本教程,我们需要焊接至覆盆子皮皮皮皮扣的头销和羽毛翼空运。由于我们在一个试验板中使用了两个板,所以包含的公头就足够了。如果您打算将羽翼与Adafruit羽毛板一起使用,例如羽毛RP2040然后确保你将需要有母头焊接到微控制器的顶部。请注意,图中MISO, MOSI, SCK在Featherwing上的位置是正确的;确保你识别这些引脚,不要依赖计数引脚,因为在真正的板上有一个额外的GPIO引脚在羽毛翼。
销的映射
树莓皮皮皮 | Adafruit Airlift WiFi Featherwing Co-Processor |
VSYS | USB |
接地 | 任何接地销 |
GPIO 10 | SCK |
GPIO 11 | 莫西人 |
GPIO 12 | 味噌 |
GPIO 13 | ESPCS |
GPIO 14 | ESPBUSY |
GPIO 15 | 埃斯普斯特 |
在Raspberry Pi Pico上安装CircuitPython
将CircuitPython转换为Raspberry Pi Pico很简单。
- 下载最新版本CircuitPython的Pico。
- 长按BOOTSEL按钮并将USB线插入Pico和你的电脑。
- 复制CircuitPython UF2文件到RPI-RP2开车。当闪烁代码时,驱动器将卸载并消失。一个新的驱动器CIRCUITPY将出现,证实闪存是成功的。
- 下载图书馆档案下载的CircuitPython版本。在我们的例子中,我们下载了6.2.0,所以我们需要下载Bundle Version 6。
- 将下载的内容解压缩到一个文件夹中。
- 复制以下文件/文件夹到lib文件夹在CIRCUITPY驱动器上。
adafruit_bus_device
adafruit_minimqtt
adafruit_io
adafruit_esp32_spi
阿达努请求
创建OpenWeather帐户
在本教程中,我们将使用OpenWeather API来获取全球任何位置的天气数据。要使用API,我们需要注册一个免费帐户。
- 控件上创建一个帐户OpenWeather网站并登录。
- 导航到我的APi密钥,在您的用户名的下拉菜单中找到。
- 在Create Key下,输入tomhardware并单击GENERATE。
- 保持此页面打开稍后将需要API密钥。
编写Python代码
CircuitPython具有与Python和MicroPython相同的语法和感觉,但我们可以选择编辑器,不像MicroPython限制我们只使用thony。在CircuitPython中,我们可以使用tonny, Mu,或者对于高级用户,使用Visual Studio Code。在本教程的这一部分,我们使用了Visual Studio Code,但这真的没有关系,因为我们只是编辑一个文本文件。
1.打开code.py,删除文件中的任何文本。
2.导入一系列CircuitPython库这是这个项目运作的必要条件。board、busio和digitalio库处理与GPIO的通信,例如SPI接口。请求、套接字和esp32spi通过ESP32处理网络连接。最后一个图书馆,秘密,还不存在。我们将在稍后创建它。
import board import busio from digitalio import DigitalInOut import adafruit_requests as requests import adafruit_esp32spi。Adafruit_esp32spi_socket as socket from adafruit_esp32spi import adafruit_esp32spi from secrets导入秘密
3.添加一行以打印消息对于Python Shell,这只是简单地说明了项目将做什么。
(“树莓派Pico WiFi气象站”)
4.创建一个新对象JSON_URL.该对象将存储一个URL,其中包含我们希望搜索的位置,以及我们前面生成的OpenWeather API键。用城镇/城市替换LOCATION,用OpenWeather API密钥替换API KEY。
JSON_URL = "http://api.openweathermap.org/data/2.5/weather?q=LOCATION&appid=API KEY&units=metric"
5.创建三个对象,用于通过SPI接口连接ESP32。Chip Select (CS)、ready和reset用于使能和读取ESP32协处理器的ready状态。
esp32_cs = DigitalInOut(board.GP13) esp32_ready = DigitalInOut(board.GP14) esp32_reset = DigitalInOut(board.GP15)
6.创建一个对象spi,它告诉我们的代码在哪里可以找到Pico上的SPI接口。
spi = busio.SPI(董事会。GP10,董事会。GP11 board.GP12)
7.创建对象,esp,我们用它来告诉代码在SPI上哪里可以找到ESP32,以及控制ESP32所需的引脚。
esp = adafruit_esp32spi。ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)输出说明
8.设置代码以使用套接字,一种在网络上连接两台设备的方法,在我们的例子中,是将Raspberry Pi Pico连接到空运WiFi羽翼。
请求。set_socket(插座、esp)
9.创建一个连接循环wi - fi。接下来的6条线路负责连接我们的WiFi AP。环路通过检查ESP32是否有连接来工作。当没有连接时,循环将继续循环,直到建立连接为止。在这个循环内是一个异常处理程序,试图连接到我们的WiFi使用SSID和密码找到的秘密库,我们将稍后创建。如果没有建立连接,则会出现错误。
while not esp.is_connected: try: esp.connect_AP(secrets["ssid"], secrets["password"]) except RuntimeError as e: print("could not connect to AP, retrying: ", e) continue
10加三行。第一行将打印一条消息,通知我们代码正在获取天气数据,第二行创建一个对象r,该对象存储从OpenWeather API调用返回的数据,第三行打印HTTP状态代码用于调试。200代码意味着一切都在工作,但是400范围的代码意味着API有问题。
print(“获取天气数据”)r=requests.get(JSON_URL)print(r.status_代码)
11.添加一行以打印减号,-,四十次,在Python输出上创建分隔符。
打印(“-”* 40)
12.使用打印功能打印温度数据在返回的JSON对象中找到。使用r.json(),我们可以查看数据内部的两个关键字,' main '和' temp_max ',并直接将它们放在打印函数中。在这一行的末尾,我们添加“C”,因为返回的温度数据以摄氏度为单位。
print("The current temperature is",r.json()['main']['temp_max'],"C")
13.把最后两行加起来在关闭请求对象之前打印另一个分隔线。
打印(“-”*40)r.关闭()
14.将代码保存为code.py到回路驱动的根。
完成树莓派Pico的Wi-Fi代码
import board import busio from digitalio import DigitalInOut import adafruit_requests as requests import adafruit_esp32spi。Adafruit_esp32spi_socket as socket from adafruit_esp32spi import adafruit_esp32spi from secrets导入秘密(“树莓派Pico WiFi气象站”)JSON_URL = "http://api.openweathermap.org/data/2.5/weather?q=LOCATIONl&appid=APIKEY&units=metric" esp32_cs = DigitalInOut(board.GP13) esp32_ready = DigitalInOut(board.GP14) esp32_reset = DigitalInOut(board.GP15) spi = busio.SPI(board.GP10, board.GP11, board.GP12) esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset) requests.set_socket(socket, esp) while not esp.is_connected: try: esp.connect_AP(secrets["ssid"], secrets["password"]) except RuntimeError as e: print("could not connect to AP, retrying: ", e) continue print("Fetching weather data") r = requests.get(JSON_URL) print(r.status_code) print("-" * 40) print("The current temperature is",r.json()['main']['temp_max'],"C") print("-" * 40) r.close()
创建Wi-Fi登录的秘密文件
我们可以在secrets.py文件中存储Wi-Fi SSID、用户名和密码。在我们的主代码中,它以与Python库相同的方式工作,因为我们导入库,然后调用包含SSID和密码的字典。在这之前,我们需要创建secrets.py文件。
1.创建一个新文件在你的文本编辑器。
2.制作一本字典,秘密,其中包含您路由器的SSID和密码。设置时区为匹配你的位置。
secrets = {'ssid': 'YOUR WIFI AP', 'password': 'YOUR password', 'timezone': 'Europe/London', # http://worldtimeapi.org/timezones}
3.将文件保存为秘密与code.py位于同一位置。
在树莓皮皮上运行Wi-Fi代码
代码将自动运行,但我们只能在连接到Python Shell时看到输出。实现这一点的最简单方法是使用终端仿真器,如PuTTY。
1.下载腻子和安装。
2.连接你的皮科连接到计算机(如果尚未连接)。
3.查找COM端口号为了你的皮科。在Windows中,您可以通过打开设备管理器、查找端口、单击下拉菜单并找到Pico的条目(它没有清楚标记,因此您可能需要拔掉插头才能看到哪个条目消失)来完成此操作。我们的是COM4。
4.开放的腻子,单击串行,然后将串行线设置为与设备管理器中的COM端口匹配。将速度设置为115200,然后单击“打开”。
PuTTY将连接并显示Python Shell
5.按CTRL+D重新启动外壳程序然后运行代码。几秒钟后,您所在位置的最新天气将显示。