IVRC2024_Hataage

Arduino UNO R4 の LED Matrix

はじめに

Arduino UNO R4 にはLEDマトリックスが内蔵されている。

LEDマトリックスにはスケッチを利用して文字やイラストなどを書き込むことができるので、今回はここにWi-Fi通信を行う上で必要となる Arduino 本体のローカルIPアドレスを表示させてみた。

alt

(画像: 公式ドキュメントより)

実装

利用したスケッチ (抜粋) は以下の通り。なおWi-Fi通信のセットアップで取得したIPアドレスを利用しているので、併せてこちらも見ておくといいかもしれない。

#include "ArduinoGraphics.h"
#include "Arduino_LED_Matrix.h"

// LED マトリックスのインスタンス
ArduinoLEDMatrix matrix;

void loop(){
  printWifiStatusOnLedMatrix();
}

void printWifiStatusOnLedMatrix(){
  IPAddress ip = WiFi.localIP();
  char text[25];
  snprintf(text, sizeof(text), "   %u.%u.%u.%u", ip[0], ip[1], ip[2], ip[3]); // 文字列に変換

  matrix.beginDraw(); // 表示開始
  matrix.stroke(0xFFFFFFFF);
  matrix.textScrollSpeed(100);
  matrix.textFont(Font_5x7);
  matrix.beginText(0, 1, 0xFFFFFF);
  matrix.println(text);
  matrix.endText(SCROLL_LEFT);
  matrix.endDraw(); // 表示終了
  delay(1000);
}

それぞれ解説する。

まずヘッダ部でライブラリをインクルードする。 ArduinoGraphics.h については Arduino IDE のライブラリマネージャからインストールする必要がある。また、この順番で記載しなければ動かないらしい。

#include "ArduinoGraphics.h"
#include "Arduino_LED_Matrix.h"

表示するローカルIPアドレス文字列に変換し、格納する。文字列バッファのサイズはIPアドレスの文字数+アドレスの前に入れる半角空白の分を確保している。

Wi-Fiインスタンスの作成などはこちらを参照されたし。

IPAddress ip = WiFi.localIP();
char text[25];
snprintf(text, sizeof(text), "   %u.%u.%u.%u", ip[0], ip[1], ip[2], ip[3]); // 文字列に変換

matrix.beginDraw() から matrix.endDraw() の間で ArduinoGraphics による表示の設定を、matrix.beginText(); から matrix.endText(); の間で文字の表示の設定を行う。

matrix.stroke(0xFFFFFFFF) はデフォルトの文字の色を指定している。これは ArduinoGraphics は多色LEDの表示に対応したデバイスでも用いられるためであり、今回はデフォルト (赤色) しか使えないが明記する必要がある。

matrix.textScrollSpeed(100) は文字列がスクロールする速さを指定する。数字が大きいほど遅くなるので注意。

matrix.textFont(Font_5x7) で文字の大きさを指定する。この他にも Font_4x6 などが指定できるが、5x7 が最大だとおもう。

matrix.beginText(0, 1, 0xFFFFFF) は左から、文字のX座標、文字のY座標、文字の色を示す。上記の通り色はデフォルトを指定する。

matrix.println(text) で表示するテキストを指定し、matrix.endText(SCROLL_LEFT) でスクロールする方向を指定する。ここは SCROLL_RIGHT もしくは何も入力しない (スクロールなし) にもできる。

matrix.beginDraw(); // 表示開始
matrix.stroke(0xFFFFFFFF);
matrix.textScrollSpeed(100);
matrix.textFont(Font_5x7);
matrix.beginText(0, 1, 0xFFFFFF);
matrix.println(text);
matrix.endText(SCROLL_LEFT);
matrix.endDraw(); // 表示終了

参考

公式ドキュメント: Using the Arduino UNO R4 WiFi LED Matrix