跳过主要内容

如何在树莓皮科上使用Wi-Fi和互联网

Pico WiFi
(图片来源:Tom’s Hardware)

树莓皮皮皮是一个绝妙的装备,但它缺少一个关键功能,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引脚在羽毛翼。

图1/3

Pico WiFi

(图片来源:Tom’s Hardware)
图2 / 3

Pico WiFi

(图片来源:Tom’s Hardware)
图3中的3

Pico WiFi

(图片来源:Tom’s Hardware)

销的映射

(图片来源:未来)

树莓皮皮皮 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很简单。

  1. 下载最新版本CircuitPython的Pico。
  2. 长按BOOTSEL按钮并将USB线插入Pico和你的电脑。
  3. 复制CircuitPython UF2文件到RPI-RP2开车。当闪烁代码时,驱动器将卸载并消失。一个新的驱动器CIRCUITPY将出现,证实闪存是成功的。
  4. 下载图书馆档案下载的CircuitPython版本。在我们的例子中,我们下载了6.2.0,所以我们需要下载Bundle Version 6。
  5. 将下载的内容解压缩到一个文件夹中。
  6. 复制以下文件/文件夹到lib文件夹在CIRCUITPY驱动器上。

adafruit_bus_device
adafruit_minimqtt
adafruit_io
adafruit_esp32_spi
阿达努请求

创建OpenWeather帐户

在本教程中,我们将使用OpenWeather API来获取全球任何位置的天气数据。要使用API,我们需要注册一个免费帐户。

  1. 控件上创建一个帐户OpenWeather网站并登录。
  2. 导航到我的APi密钥,在您的用户名的下拉菜单中找到。
  3. 在Create Key下,输入tomhardware并单击GENERATE。
  4. 保持此页面打开稍后将需要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。

(图片来源:Tom’s Hardware)

4.开放的腻子,单击串行,然后将串行线设置为与设备管理器中的COM端口匹配。将速度设置为115200,然后单击“打开”。

(图片来源:Tom’s Hardware)

PuTTY将连接并显示Python Shell

5.按CTRL+D重新启动外壳程序然后运行代码。几秒钟后,您所在位置的最新天气将显示。

(图片来源:Tom’s Hardware)
还没有评论 来自论坛的评论