一、开发板介绍
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的目标。


