【摘要】介绍GIGA R1的WIFI功能使用方法,并通过WIFI功能控制板载的RGB灯;
一、硬件介绍
1、产品特点
Arduino GIGA R1 WiFi 开发板,提供76个GPIO引脚(其中12个为模拟端口、12个PWM、4个串行端口、3个I2C、2个SPI、1个FDCAN、1个SAI);
采用双核STM32H747XI微控制器(480MHz的Cortex-M7内核和240 MHz的Cortex-M4内核);
配备2MB闪存、1MB内存,以及6MB外部闪存和8MB SDRAM;
通过板载Murata 1DX模块实现WiFi和低功耗蓝牙连接;
还有输入/输出3.5mm音频插孔、JTAG连接器、20Pin的Arducam相机连接器等;


主要特性
微控制器:STMicro STM32H747XI Cortex-M7@480 MHz + M4 @ 240 MHz MCU(2MB 双组闪存、1MB RAM)
内存:8MB SDRAM
存储:16MB QSPI NOR 闪存
无线功能:2.4GHz WiFi 802.11b/g/n和蓝牙 5.1 BR/EDR/LE(Murata 1DX 模块)
接口
显示屏:20pin接口
摄像头:20pin Arducam摄像头接口
USB1x USB Type-C 端口用于编程和 HID1x USB 2.0 主机 Type-A 端口
音频:3.5 毫米音频插孔
调试:JTAG 连接器
电源:通过VIN引脚提供6 ~ 24V输入
VRT(为RTC供电)和 OFF(关闭电路板电源)引脚
复位按钮、BOOT0按钮、RGB_LED、电源LED
安全功能:Microchip ATECC608A
每个 I/O 引脚 8mA
二、功能实现
1、硬件介绍
GIGA R1 WiFi 上的无线功能(2.4GHz Wi-Fi / 蓝牙)模块是 LBEE5KL1DX-883,芯片为Infineon(CYW4343W),该模块需使用外部天线;
主要原理图
2、功能效果
WIFI功能效果:通过开发板连接WIFI,并通过局域网内的IP地址的网页来远程控制开发板上的RGB灯;
板载RGB灯只有点亮和熄灭两种状态:因此只能实现独立R、G、B的(点亮 / 熄灭)以及组合方式;
网页文本显示当前组合颜色:
全开:全部灯亮,显示 “红 + 绿 + 蓝 = 白色”;
单色:如果只有一个灯亮,则直接显示该颜色名称;
全灭:全部灯熄灭,显示全灭 (黑色);
三、代码编写
主要相关代码
#include <WiFi.h> #define MY_SSID "WIFI名称" #define MY_PASS "WIFI密码" // WIFI 名称 / 密码 const char* ssid = MY_SSID; const char* pass = MY_PASS; WiFiServer server(80); // LED 状态 bool stateR = false; bool stateG = false; bool stateB = false; void setup() { Serial.begin(115200); pinMode(LEDR, OUTPUT); pinMode(LEDG, OUTPUT); pinMode(LEDB, OUTPUT); // 默认全部熄灭 digitalWrite(LEDR, HIGH); digitalWrite(LEDG, HIGH); digitalWrite(LEDB, HIGH); WiFi.begin(ssid, pass); while (WiFi.status() != WL_CONNECTED) { delay(3000); Serial.print("."); } // 显示 网页IP地址 server.begin(); Serial.println("\nWiFi连接成功 IP地址: " + WiFi.localIP().toString()); } void loop() { WiFiClient client = server.accept(); //监听连接 if (client) { String currentLine = ""; while (client.connected()) { if (client.available()) { char c = client.read(); if (c == '\n') { if (currentLine.length() == 0) { // 发送HTTP响应 client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html; charset=utf-8"); client.println(); // 生成网页html内容 client.print("<html><head><meta name='viewport' content='width=device-width, initial-scale=1.0'>"); client.print("<title>板载RGB 网页控制</title>"); client.print("<style>body{font-family:sans-serif; text-align:center; padding-top:30px; background-color:#f4f4f9;}"); client.print(".btn{display:inline-block; width:100px; height:45px; margin:10px; line-height:45px; color:white; font-weight:bold; cursor:pointer; border-radius:5px; text-decoration:none;}"); client.print(".on{background-color:#4CAF50;} .off{background-color:#f44336;}"); client.print(".status-box{margin-top:20px; padding:15px; border:1px solid #ccc; display:inline-block; border-radius:10px; background:#fff;}</style></head><body>"); client.print("<h1>板载RGB 网页控制</h1>"); // 控制按钮 client.print("<p>红色 LED (LEDR): " + String(stateR ? "<a href='/R/OFF' class='btn off'>关闭</a>" : "<a href='/R/ON' class='btn on'>开启</a>") + "</p>"); client.print("<p>绿色 LED (LEDG): " + String(stateG ? "<a href='/G/OFF' class='btn off'>关闭</a>" : "<a href='/G/ON' class='btn on'>开启</a>") + "</p>"); client.print("<p>蓝色 LED (LEDB): " + String(stateB ? "<a href='/B/OFF' class='btn off'>关闭</a>" : "<a href='/B/ON' class='btn on'>开启</a>") + "</p>"); // 组合颜色显示 client.print("<div class='status-box'><strong>当前组合颜色为:</strong>"); if (!stateR && !stateG && !stateB) { client.print("全灭 (黑色)"); } else if (stateR && stateG && stateB) { client.print("红 + 绿 + 蓝 = 白色"); } else if (stateR && stateG) { client.print("红 + 绿 = 黄色"); } else if (stateR && stateB) { client.print("红 + 蓝 = 品红(紫)"); } else if (stateG && stateB) { client.print("绿 + 蓝 = 青色"); } else if (stateR) { client.print("红色"); } else if (stateG) { client.print("绿色"); } else if (stateB) { client.print("蓝色"); } client.print("</div></body></html>"); break; } else { // 处理RGB开关请求 if (currentLine.indexOf("GET /R/ON") >= 0) { stateR = true; digitalWrite(LEDR, LOW); } if (currentLine.indexOf("GET /R/OFF") >= 0) { stateR = false; digitalWrite(LEDR, HIGH); } if (currentLine.indexOf("GET /G/ON") >= 0) { stateG = true; digitalWrite(LEDG, LOW); } if (currentLine.indexOf("GET /G/OFF") >= 0) { stateG = false; digitalWrite(LEDG, HIGH); } if (currentLine.indexOf("GET /B/ON") >= 0) { stateB = true; digitalWrite(LEDB, LOW); } if (currentLine.indexOf("GET /B/OFF") >= 0) { stateB = false; digitalWrite(LEDB, HIGH); } currentLine = ""; } } else if (c != '\r') { currentLine += c; } } } client.stop(); //释放资源 } }
四、程序烧录
1、连接USB数据线至开发板;
2、选择端口号对应的开发板;
3、点击 上传 烧录程序到开发板上;
五、效果演示





我要赚赏金
