【DigiKey好物畅享】+Arduino UNO R4 WIFI开发板分享Web点灯

一、开发板介绍

Arduino UNO R4 WiFi 是 Arduino 家族的最新成员,它不仅保留了广受欢迎的标准外形和 5V 工作电压,更在性能、存储和连接性上实现了质的飞跃 。

Arduino UNO R4 WiFi 最大的特点是采用双处理器架构

主处理器:Renesas RA4M1(Arm Cortex-M4,48MHz)

负责传统 I/O 操作、模拟读取、PWM 输出等

工作电压 5V,保持与 R3 扩展板的兼容性

内置 12 位 DAC、运算放大器、CAN 总线等新外设

协处理器:ESP32-S3(Wi-Fi/蓝牙模块)

提供 2.4GHz Wi-Fi 和蓝牙 5.0 连接

最高运行频率 240MHz,拥有独立的 512KB SRAM

通过电平转换芯片与主 MCU 通信

板载特色功能:

LED 矩阵
UNO R4 WiFi 最引人注目的特性是板载的 12x8 红色 LED 矩阵(共 96 个 LED)。无需任何外部连接,就可以显示文字、动画、传感器数据可视化,甚至运行简单游戏。

Qwiic/I2C 连接器
板载一个 Qwiic 连接器,可以快速连接各种 I2C 传感器和模块,无需焊接 。

实时时钟(RTC)
内置 RTC 并配有独立的 VRTC 引脚,可用外部电池保持时间,即使主芯片断电也能继续计时 。

HID 支持
通过 USB-TypeC 连接,可以模拟键盘、鼠标或游戏控制器,为交互项目提供无限可能 。

二、环境搭建

首先安装 Arduino 集成开发环境(IDE),然后安装UNO R4 WIFI开发板支持包。

打开 Arduino IDE,点击菜单栏 工具 → 开发板 → 开发板管理器

在搜索框中输入 Arduino Uno R4

找到 “Arduino Uno R4 Boards”,点击安装按钮,等待几分钟安装完成。安装好了开发板,接下来就可以编写代码测试了。

下面首先来测试一下开发板编译下载,这里我找了一个点亮led矩阵图案的例子。

#include “Arduino_LED_Matrix.h” // Include the LED_Matrix library

#include “frames.h” // Include a header file containing some custom icons

ArduinoLEDMatrix matrix; // Create an instance of the ArduinoLEDMatrix class

void setup() {

Serial.begin(115200); // Initialize serial communication at a baud rate of 115200

matrix.begin(); // Initialize the LED matrix

}

void loop() {

// Load and display the “chip” frame on the LED matrix

matrix.loadFrame(chip);

delay(500); // Pause for 500 milliseconds (half a second)

// Load and display the “danger” frame on the LED matrix

matrix.loadFrame(danger);

delay(500);

// Load and display the “happy” frame on the LED matrix

matrix.loadFrame(happy);

delay(500);

// Load and display the “big heart” frame provided by the library

matrix.loadFrame(LEDMATRIX_HEART_BIG);

delay(500);

// Turn off the display

matrix.clear();

delay(1000);

// Print the current value of millis() to the serial monitor

Serial.println(millis());

}

编译下载之后可以看到LED矩阵显示图案了。

三、网页点灯测试

下面写一个网页点灯例子测试一下。要注意初始化部分代码,在初始化连接wifi之前要检查WIFI模块的状态WiFi.status()和模块固件版本 WiFi.firmwareVersion(),要不然连接wifi不成功。

代码如下:

#include <WiFiS3.h>

// Wi-Fi配置

const char* ssid = “***********”; //WIFI SSID

const char* password = “*********”; //WIFI PASSWORD

int status = WL_IDLE_STATUS;

// LED配置

#define LED_PIN LED_BUILTIN // 使用板载LED

int ledState = LOW;

// 创建Wi-Fi服务器,监听端口80

WiFiServer server(80);

void printWifiStatus() {

// print the SSID of the network you’re attached to:

Serial.print("SSID: ");

Serial.println(WiFi.SSID());

// print your board’s IP address:

IPAddress ip = WiFi.localIP();

Serial.print("IP Address: ");

Serial.println(ip);

// print the received signal strength:

long rssi = WiFi.RSSI();

Serial.print(“signal strength (RSSI):”);

Serial.print(rssi);

Serial.println(" dBm");

}

void setup() {

Serial.begin(115200);

while (!Serial);

pinMode(LED_PIN, OUTPUT);

digitalWrite(LED_PIN, ledState);

// 连接Wi-Fi

Serial.print("正在连接到 ");

Serial.println(ssid);

// check for the WiFi module:

if (WiFi.status() == WL_NO_MODULE) {

Serial.println(“Communication with WiFi module failed!”);

// don’t continue

while (true);

}

String fv = WiFi.firmwareVersion();

if (fv < WIFI_FIRMWARE_LATEST_VERSION) {

Serial.println(“Please upgrade the firmware”);

}

// attempt to connect to WiFi network:

while (status != WL_CONNECTED) {

Serial.print("Attempting to connect to SSID: ");

Serial.println(ssid);

// Connect to WPA/WPA2 network. Change this line if using open or WEP network:

status = WiFi.begin(ssid, password);

// wait 10 seconds for connection:

delay(10000);

}

Serial.println(“\nWi-Fi连接成功!”);

Serial.print("IP地址: ");

Serial.println(WiFi.localIP());

// 启动服务器

server.begin();

Serial.println(“HTTP服务器已启动”);

// you’re connected now, so print out the status:

printWifiStatus();

}

void loop() {

WiFiClient client = server.available(); // 监听客户端

if (client) {

Serial.println(“新客户端连接”);

String currentLine = “”;

while (client.connected()) {

if (client.available()) {

char c = client.read();

Serial.write(c);

if (c == ‘\n’) {

// 如果收到空行,表示HTTP请求结束

if (currentLine.length() == 0) {

// 发送HTTP响应头

client.println(“HTTP/1.1 200 OK”);

client.println(“Content-type:text/html”);

client.println(“Connection: close”);

client.println();

// 发送HTML页面

client.println(“”);

client.println(“<meta name=\“viewport\” content=\“width=device-width, initial-scale=1\”>”);

client.println(“”);

client.println(“body { font-family: Arial; text-align: center; margin-top: 50px; }”);

client.println(“.button { background-color: #4CAF50; border: none; color: white; padding: 15px 32px; text-align: center; font-size: 16px; margin: 4px 2px; cursor: pointer; }”);

client.println(“.button2 { background-color: #f44336; }”);

client.println(“”);

client.println(“Arduino UNO R4 WiFi Led Ctrl”);

// 根据LED状态显示不同的按钮

if (ledState == LOW) {

client.println(“LED Status: OFF”);

} else {

client.println(“LED Status: ON”);

}

client.println(“OPEN LED”);

client.println(“<button class=\“button button2\”>CLOSE LED”);

client.println(“”);

client.println();

break;

} else {

currentLine = “”;

}

} else if (c != ‘\r’) {

currentLine += c;

}

// 检查GET请求

if (currentLine.endsWith(“GET /on”)) {

ledState = HIGH;

digitalWrite(LED_PIN, ledState);

}

if (currentLine.endsWith(“GET /off”)) {

ledState = LOW;

digitalWrite(LED_PIN, ledState);

}

}

}

client.stop();

Serial.println(“客户端断开”);

}

}

编译下载之后通过串口可以看到输出信息,找到连接的IP地址输入浏览器地址栏,可以看到一个led控制界面。点击网页按钮就可以控制点亮板载的led灯了。

四、总结

非常有幸参加得捷的畅享好物活动,这次体验了Arduino UNO R4 WIFI开发板。这个板子是Arduino 新出的开发板,使用双处理器架构,包含Renesas RA4M1和ESP32-S3。本次主要尝试了板载的led应用方法和网络应用,整体来说使用很方便,是DIY的好帮手。在使用网络应用过程中遇到了一点问题,参考之前的网络应用代码导致WIFI一直连不上。后来看到Arduino UNO R4 WIFI开发板的网络应用例子才发现,初始化部分有些不同。经过调整之后终于可以连接网络了,完美的实现了网络控制led的目标。