概要
本記事では、Arduino Uno R4 WiFi の要素検証として、
HTTPサーバーを立て、ブラウザからオンボードLEDのON/OFFを制御し、
その状態をドットマトリクスに表示する検証を行います。
「通信・制御・表示を一体として動作させること」を目的とした検証です。
実証の目的
- (ローカルエリア内での)HTTPサーバーとしての動作確認
- ブラウザからの入力によるLED制御の確認
- 状態(ON/OFF)のドット表示による可視化確認
対象機材
- Arduino Uno R4 WiFi
- Wi-Fiアクセスポイント(2.4GHz)
- PCまたはスマートフォン(ブラウザ)
実証内容
① Wi-Fi接続とHTTPサーバー起動
Arduino Uno R4 WiFi をWi-Fiに接続し、HTTPサーバーを起動します。
② ブラウザからの制御
ブラウザからアクセスし、LEDのON/OFFを切り替えます。
③ ドットマトリクス表示
LEDの状態(ON / OFF)をドットマトリクスに表示します。
サンプルコード
#include <WiFiS3.h>
#include "Arduino_LED_Matrix.h"
ArduinoLEDMatrix matrix;
WiFiServer server(80);
// --- 接続設定 ---
const char* ssid = "yourssid";
const char* password = "yourpassword";
// --- 表示・制御用 ---
#define CHAR_WIDTH 6
#define MAX_MSG 64
char message[MAX_MSG] = "READY";
uint8_t frame[8][12];
const int ledPin = LED_BUILTIN; // オンボードLED (D13)
// 5x7フォントデータ (0-9, '.', ' ', A-Z)
const uint8_t font_data[][5] = {
{0x3E,0x41,0x41,0x41,0x3E}, // 0
{0x00,0x42,0x7F,0x40,0x00}, // 1
{0x42,0x61,0x51,0x49,0x46}, // 2
{0x21,0x41,0x45,0x4B,0x31}, // 3
{0x18,0x14,0x12,0x7F,0x10}, // 4
{0x27,0x45,0x45,0x45,0x39}, // 5
{0x3C,0x4A,0x49,0x49,0x30}, // 6
{0x01,0x71,0x09,0x05,0x03}, // 7
{0x36,0x49,0x49,0x49,0x36}, // 8
{0x06,0x49,0x49,0x29,0x1E}, // 9
{0x00,0x60,0x60,0x00,0x00}, // .
{0x00,0x00,0x00,0x00,0x00}, // Space
{0x7E,0x11,0x11,0x11,0x7E}, // A (Index 12)
{0x7F,0x49,0x49,0x49,0x36}, // B
{0x3E,0x41,0x41,0x41,0x22}, // C
{0x7F,0x41,0x41,0x22,0x1C}, // D
{0x7F,0x49,0x49,0x49,0x41}, // E
{0x7F,0x09,0x09,0x09,0x01}, // F
{0x3E,0x41,0x49,0x49,0x7A}, // G
{0x7F,0x08,0x08,0x08,0x7F}, // H
{0x00,0x41,0x7F,0x41,0x00}, // I
{0x20,0x40,0x41,0x3F,0x01}, // J
{0x7F,0x08,0x14,0x22,0x41}, // K
{0x7F,0x40,0x40,0x40,0x40}, // L
{0x7F,0x02,0x04,0x02,0x7F}, // M
{0x7F,0x04,0x08,0x10,0x7F}, // N
{0x3E,0x41,0x41,0x41,0x3E}, // O (Index 26)
{0x7F,0x09,0x09,0x09,0x06}, // P
{0x3E,0x41,0x51,0x21,0x5E}, // Q
{0x7F,0x09,0x19,0x29,0x46}, // R
{0x46,0x49,0x49,0x49,0x31}, // S
{0x01,0x01,0x7F,0x01,0x01}, // T
{0x3F,0x40,0x40,0x40,0x3F}, // U
{0x1F,0x20,0x40,0x20,0x1F}, // V
{0x3F,0x40,0x38,0x40,0x3F}, // W
{0x63,0x14,0x08,0x14,0x63}, // X
{0x07,0x08,0x70,0x08,0x07}, // Y
{0x61,0x51,0x49,0x45,0x43} // Z
};
int getFontIndex(char c) {
if (c >= '0' && c <= '9') return c - '0';
if (c == '.') return 10;
if (c == ' ') return 11;
if (c >= 'A' && c <= 'Z') return (c - 'A') + 12;
return 11;
}
void setup() {
Serial.begin(115200);
matrix.begin();
pinMode(ledPin, OUTPUT);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
server.begin();
IPAddress ip = WiFi.localIP();
String(ip.toString()).toCharArray(message, MAX_MSG);
Serial.println("\nServer started at: " + ip.toString());
}
void handleClient() {
WiFiClient client = server.available();
if (!client) return;
String request = client.readStringUntil('\r');
client.flush();
if (request.indexOf("GET /on") != -1) {
digitalWrite(ledPin, HIGH);
strcpy(message, " ON ");
} else if (request.indexOf("GET /off") != -1) {
digitalWrite(ledPin, LOW);
strcpy(message, " OFF ");
}
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.println("<h1>LED Control</h1>");
client.println("<p><a href=\"/on\">Turn ON</a></p>");
client.println("<p><a href=\"/off\">Turn OFF</a></p>");
client.stop();
}
void scrollText() {
int len = strlen(message);
int totalWidth = len * CHAR_WIDTH;
for (int offset = 0; offset < totalWidth + 12; offset++) {
handleClient(); // スクロール中もリクエストをチェック
memset(frame, 0, sizeof(frame));
for (int i = 0; i < len; i++) {
int charPos = i * CHAR_WIDTH - offset;
if (charPos > 11 || charPos < -5) continue;
int fontIdx = getFontIndex(message[i]);
for (int col = 0; col < 5; col++) {
int x = charPos + col;
if (x < 0 || x > 11) continue;
uint8_t colData = font_data[fontIdx][col];
for (int row = 0; row < 7; row++) {
if (colData & (1 << row)) frame[row][x] = 1;
}
}
}
matrix.renderBitmap(frame, 8, 12);
delay(60);
}
}
void loop() {
scrollText();
}
結果
- HTTPサーバーとして動作することを確認
- 同じローカルエリア内でブラウザからLEDのON/OFF制御が可能
- 状態に応じてドットマトリクス表示が切り替わることを確認

考察
本検証により、Arduino Uno R4 WiFi 単体で、
通信(HTTP)・制御(LED)・表示(ドット)を連携できることを確認しました。
簡易的なWebインターフェースと可視化機能を組み合わせることで、
小規模なIoT機器としての構成が可能と考えられます。
位置づけ(要素検証として)
本検証は複数の機能を組み合わせていますが、
小規模な範囲での確認であり、要素レベルの実証に該当します。
今後はROS2連携などを含めた統合検証へ展開していきます。

