使用基于 Raspberry Pi Pico W 的 Web 服务器控制 LED

内容

树莓派 Pico W 是一款低成本的基于 RP2040 微控制器的开发板。它内置了 2.4 GHZ WIFI 功能,为该板提供了无线连接的特性。该板使用了 Infineon CYW43439 WIFI+ BLE 芯片,增加了一个板载单频 2.4 GHZ 无线接口 (802.11n)。因此,它使用户能够基于各种 AIoT 解决方案构建无线控制和远程监控设备。微控制器可以使用 Micropython 和 C/C++ 进行编程。

在这个项目中,我们将通过互联网使用网页控制连接到 Pico W 的 LED。Pico W 板和智能手机都需要连接到稳定的互联网,以便顺畅工作而不出现延迟。这个 LED 可以通过智能手机或任何计算机从世界任何地方进行控制。此外,我们还将了解 Raspberry Pi 板及其功能、规格和使用 Arduino IDE 的编程。我们之前构建了许多 基于网页服务器的物联网项目,您可以从任何地方控制电器。

大多数情况下,我们看到 Micropython 被用来通过像 Thonny 这样的 Micropython IDE 编程 Raspberry Pi Pico W。但是,对于大多数人来说,使用 Arduino IDE 在 Python 中编程并没有在 C/C++ 中编程那么舒适。因此,我们将学习如何在 Arduino IDE 中配置和编程 Pico W。

树莓派 Pico W

Raspberry Pi Pico W

树莓派 Pico W 板提供了必要的外部电路,如闪存、晶体、电源、去耦和 USB 连接器,以支持 RP2040 芯片。RP2040 微控制器在板的左右边缘提供大多数引脚作为用户 I/O 引脚。然而,其中四个 I/O 引脚专门保留用于内部功能,如控制 LED、管理板载 SMPS 电源和感测系统电压。Pico W 还配备了一个基于 Infineon CYW43439 的板载 2.4GHz 无线接口,通过 SPI 连接到 RP2040。该板配备了来自 ABRACON 的授权板载天线。

树莓派 Pico W 本身能够使用内部升降压转换器从广泛的输入电压(1.8v 到 5.5v)中生成所需的 3.3 伏特电源。

关键特性:

  • 板子总共有 40 针 (21mm×51mm) 1mm 厚的 PCB,带有 0.1" 通孔引脚
    • 有 26 个 I/O 引脚,电压等级为 3.3v。
    • 23 个 GPIO 仅为数字型,另外三个具备 ADC 功能
    • 1.8-3.3V I/O 电压
  • 3 个 Arm SWD (串行线调试) 引脚端口
  • 双核 Cortex M0 处理器,频率高达 133MHz
    • 片上 PLL 允许可变核心频率
  • 264kB 高性能 SRAM
  • 12 位 500kbps 模数转换器 (ADC)
  • 有多种 I/O 数字外设选项
    • 2 × UART, 2 × I2C, 2 × SPI, 16 × PWM 通道
    • 1 × 定时器,带 4 个警报,1 × 实时钟
  • 2 × 可编程输入输出 (PIO) 块,总共 8 个状态机
    • 灵活的用户可编程高速 I/O

树莓派 Pico W 引脚图

电路板的侧面总共有 40 个引脚。引脚的主要功能如下所述。

Raspberry Pi Pico W Pinout

  • GP0-GP28: 这些是通用输入输出引脚,可以与I/O设备接口以传输和接收数据。这些引脚可以用于输入和输出功能。
    • GP26-GP28: 这三个引脚也可以用于连接模拟传感器或设备。
    • GP0: 内置LED连接在此引脚上。
  • GND: 此引脚用于为I/O设备提供接地连接。提供了多个接地引脚以便于连接。
  • RUN: 此引脚启用或禁用RP2040微控制器,这意味着启动或停止Pico W。短接此引脚使其为低电平,从而重置RP2040。
  • AGND: 此引脚用于接地模拟设备。此接地连接用于ADC_VREF引脚。
  • ADC_VREF: ADC电压参考是一个输入引脚,用于设置模拟输入的参考电压。
  • 3V3(OUT): 此引脚为RP2040和I/O引脚提供3.3V电压,由板载SMPS生成。因此,它可以为外部I/O设备提供3.3V,但最大输出电流取决于RP2040负载和VSYS引脚的输入电压,建议不要超过约300mA的电流限制。
  • 3V3_EN: 这是一个板载SMPS使能引脚。通过100kΩ电阻拉高。短接此引脚使其为低电平,从而禁用3.3V电源并导致RP2040失去电源。
  • VSYS: 用于为系统提供输入电压的引脚,允许的范围是1.8V到5.5V,并用于通过板载电源转换器生成3.3V以为RP2040和GPIO供电。
  • VBUS: 此引脚完全连接到micro-USB的电源引脚1,通常为5V(如果USB供电)。

树莓派 Pico W 所需组件

  1. 树莓派 Pico W
  2. LED 灯泡 (5v)
  3. 面包板

树莓派 Pico W 接口电路图

Circuit Diagram for interfacing Raspberry Pi Pico W

现在让我们开始将 LED 与 Pico W 板连接。LED 的正极连接到 GP2,另一个连接到板的地面。板的电源由 USB 连接器提供。

实际电路如下图所示。

raspberry pi pico w and led interfacing circuit

使用 Arduino IDE 编程 Raspberry Pi Pico W

让我们看看如何使用 Arduino IDE 来编程 Raspberry Pi Pico W 板。为此,我们需要安装 Raspberry Pi RP2040 板包,该包支持 Raspberry Pi Pico W。如果已经安装,请跳过安装过程。

  • 打开 Arduino IDE,进入 文件 > 首选项。现在将给定的链接粘贴到附加板管理器 URL 中,并通过按下确定保存。

https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json

Arduino IDE preferences

  • 打开 Arduino IDE,导航到板管理器,搜索“Pico”。你会找到带有板名称的包,安装它。

Raspberry Pi Pico W Installation on Arduino IDE

  • 现在,选择板子为 Raspberry Pi Pico W,其余的保持不变。
  • 最后复制并编译下面提供的示例代码。
  • 要上传代码,您必须将 Pico W 板连接到显示在任何 COM 端口上的计算机。为此,在按住 Pico W 上的 BOOTSEL 按钮的同时,立即使用 micro-USB 数据线将板连接到计算机。如果您的计算机上出现 RPI-RP2 驱动器通知,请释放 BOOTSEL 按钮。

BOOTSEL Button on Raspberry Pi Pico W

  • 文件管理器,这意味着驱动器启动模式。因此设备已准备好接收代码/固件。

File Manager Drive Notification

  • 将编译好的代码上传到 Pico W 板,选择正确的端口。
  • 成功上传代码后,打开串口监视器并将波特率设置为 115200.

Arduino 代码解释

该程序在成功连接到互联网后,从远程服务器读取数据。根据接收到的数据,将生成输出响应。

首先,我们需要知道如何将 Pico W 连接到 WiFi 网络,使用网络数据,并构建 Web 界面。为此,我们必须将 Pico W 作为客户端连接到 WiFi 网络。我们必须包含所有必要的库,以便成功连接到网络。因此,库仅包括 Wifi.h。此外,我们还定义了进一步编程所需的变量和对象。

#include <WiFi.h> const char* ssid = "Semicon Media 2.4"; // 替换为您的网络凭据 const char* password = "cdfiP29to665"; int Led=2; String header; // 变量用于存储HTTP请求 String picoLEDState = "off"; // 变量用于存储板载LED状态 unsigned long currentTime = millis(); // 当前时间 unsigned long previousTime = 0; // 上一个时间 const long timeoutTime = 2000; WiFiServer server(80); // 将Web服务器端口号设置为80

Arduino IDE 中包含的 WiFi 库提供了连接和通过 WiFi 网络通信所需的所有功能。我们需要传递我们的登录凭据,包括 SSID 和密码,以加入加密网络。

接下来,我们定义所需的字符常量,以存储我们想要连接的网络的SSID和密码。您需要传递您的网络参数。

字符串变量被定义用来存储来自浏览器的HTTP请求和板载LED的状态。这是必要的,因为通过使用字符串变量,我们可以在网页上显示LED状态。

定义变量以保存时间是至关重要的,因为它允许我们在网页上设置超时。如果没有它,我们将面临永远不断开连接的风险,最终耗尽连接。

然后,我们创建一个名为“server”的WiFiServer对象。并将HTTP端口号80作为参数传递。

void setup() { Serial.begin(115200); // 启动串口监视器 pinMode(Led, OUTPUT); // 将LED初始化为输出 digitalWrite(Led, LOW); // 关闭LED WiFi.begin(ssid, password); // 使用SSID和密码连接到Wi-Fi网络 while (WiFi.status() != WL_CONNECTED) // 在串口监视器上显示进度 {   delay(500); Serial.print("."); } Serial.println(""); // 打印本地IP地址并启动Web服务器 Serial.print("WiFi connected at IP Address "); Serial.println(WiFi.localIP()); server.begin(); // 启动服务器 }

在设置中,我们启动串行监视器。然后我们将板载LED引脚设置为输出并设为LOW,以使用命令 pinmode() 使LED保持关闭。

我们接着使用 WiFi.begin 来启动网络连接,在这个命令中传递 SSID 和密码。

然后我们将监控 WL _CONNECTED 常量的连接状态。如果 while 条件为真,则表示我们未连接,循环将持续运行。在等待期间,我们通过每半秒的延迟在串口监视器上打印句点作为进度指示器。最后,成功连接后,IP 地址将在串口监视器上打印。此外,我们通过使用命令 server.begin() 启动我们创建的 WiFiServer 对象。

在循环中,我们等待传入的客户端连接,并在建立连接时开始计时。如果客户端发送信息以控制LED,我们将HTTP请求拆解以提取URL字符串中的值。根据该值,我们打开或关闭LED,并相应地调整屏幕上的按钮样式。如果需要,可以在HTML样式表设置中修改按钮的形状或颜色。

最后,你将找到完整的代码。

树莓派 Pico W 的工作流程

我们将执行的任务是通过基于网页的界面控制LED。

将显示一个简单的网页,包含一个切换按钮,并指示板载 LED 的当前状态。

按照上面讨论的步骤上传代码并试一下。打开串口监视器,设置正确的波特率,等待直到显示IP地址。

Wifi Connection on Raspberry Pi Pico W using Arduino IDE

复制IP地址,并在任何连接到同一WiFi网络的设备上打开Google Chrome。 在搜索栏中输入地址,然后点击搜索以访问使用网络开关控制LED的网页。

Pico W LED Web Control Switch

显示LED的开启状态,而下面的图像则显示LED的关闭状态,同时我们通过网页进行控制。

LED Control on Raspberry Pi Pico W

现在您可以通过反复点击开关来控制LED的开/关。每次切换开关时,LED状态和开关颜色将会改变。

希望你喜欢这篇文章,并从中学到一些有用的东西。如果你有任何问题,可以在下面的评论区留言。

#include <WiFi.h>

const char* ssid = "Semicon Media 2.4";             // 用你的网络凭据替换

const char* password = "cdfiP29to665";

int Led=2;

字符串头;                                      // 用于存储HTTP请求的变量

String picoLEDState = "off";                        // 存储板载LED状态的变量

unsigned long currentTime = millis();               // 当前时间

unsigned long previousTime = 0;                     // 之前的时间

const long timeoutTime = 2000;

WiFiServer server(80);                              // 设置网页服务器端口号为 80

void setup()

{ Serial.begin(115200);                              // 启动串口监视器

pinMode(Led, OUTPUT); // 将LED初始化为输出

digitalWrite(Led, LOW);                           // 关闭 LED

  WiFi.begin(ssid, password);                       // 连接到具有SSID和密码的Wi-Fi网络

  while (WiFi.status() != WL_CONNECTED)             // 在串口监视器上显示进度

  { 延迟(500);

    Serial.print(".");

  }

  Serial.println("");                               // 打印本地IP地址并启动Web服务器

  Serial.print("WiFi 已连接,IP 地址为 ");

  Serial.println(WiFi.localIP());

  server.begin();                                   // 启动服务器

}

无效循环()

{ WiFiClient client = server.available(); // 监听传入的客户端

  如果 (client)

    {   // 如果一个新客户端连接,

        currentTime = millis();

        previousTime = currentTime;

        Serial.println("新客户端。");                                                                                            // 在串口输出一条消息

        String currentLine = "";                                                                                                  // 创建一个字符串来保存来自客户端的输入数据

        当 (client.connected() && currentTime - previousTime <= timeoutTime)

            { // 当客户端连接时循环

              currentTime = millis();

              如果 (client.available())

                {   // 如果有字节从客户端读取,

总结
Raspberry Pi Pico W是一款基于RP2040微控制器的低成本开发板,内置2.4GHz WIFI功能,支持无线连接。该板使用Infineon CYW43439 WIFI+BLE芯片,适合构建各种AIoT解决方案的无线控制和远程监控设备。用户可以使用Micropython或C/C++进行编程。本文介绍了如何通过网页控制连接到Pico W的LED灯,用户可通过智能手机或电脑在全球范围内进行控制。Pico W具有40个引脚,支持多种I/O功能,并配备了高性能的双核处理器和多种数字外设选项。文章还详细说明了如何使用Arduino IDE对Pico W进行编程,包括安装RP2040板包、连接WiFi网络以及编写控制LED的代码。通过这些步骤,用户可以轻松实现对LED的远程控制,充分利用Pico W的无线功能。