« ドライアイス不要の霧箱 (4) | トップページ | WCH-LinkE とWCH-Link は別モノである »

2023年12月 1日 (金)

Arduinoで作ろう(63) UNO R4 WiFiでスクロールNTP時計

 Arduino UNO R4 WiFi を手に入れました。
2773981_2
 なんと言っても目を引くのはオンボードの 12×8ドットマトリクスLEDじゃないでしょうか。あと,ESP32-S3モジュールね。なんだか夢が広がりますなあ(^^)
 pinoutはこんな感じ ↓
Abx00087pinout

 せっかくESP32モジュールとLEDマトリクスを積んでるんだから,WiFiでネット接続してNTPサーバから時刻を取得してドットマトリクスLEDでスクロールする時計を作らないとね。( また時計かw )
んで,とりあえずできました。ライブラリは新たに2つくらい入れたんだったかな。NTPClientライブラリArduinoGraphicsライブラリです。たぶん。
Shotcut_00_01_54_087

// Arduino UNO R4 WiFi スクロールNTP時計
// NTPClient library (https://github.com/arduino-libraries/NTPClient)
// ArduinoGraphics library (https://github.com/arduino-libraries/ArduinoGraphics)


#include "RTC.h"
#include "NTPClient.h"
#include "ArduinoGraphics.h"
#include "Arduino_LED_Matrix.h"
#include "WiFiS3.h"
#include "WiFiUdp.h"
char ssid[] = "ここに無線LANのSSIDを書く" ;
char pass[] = "ここにパスワードを書く" ; // 
int wifiStatus = WL_IDLE_STATUS;
WiFiUDP Udp;
NTPClient timeClient(Udp);
ArduinoLEDMatrix matrix;

void printWifiStatus() {
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
}

void connectToWiFi(){
if (WiFi.status() == WL_NO_MODULE) {
Serial.println("Communication with WiFi module failed!");
while (true);
}

while (wifiStatus != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
wifiStatus = WiFi.begin(ssid, pass);
delay(10000);
}

Serial.println("Connected to WiFi");
printWifiStatus();
}

void setup(){
Serial.begin(9600);
while (!Serial);

connectToWiFi();
RTC.begin();
matrix.begin();
Serial.println("\nStarting connection to server...");
timeClient.begin();
timeClient.update();
auto timeZoneOffsetHours = 9;
auto unixTime = timeClient.getEpochTime() + (timeZoneOffsetHours * 3600);
Serial.print("Unix time = ");
Serial.println(unixTime);
RTCTime timeToSet = RTCTime(unixTime);
RTC.setTime(timeToSet);
RTCTime currentTime;
RTC.getTime(currentTime);
Serial.println("The RTC was just set to: " + String(currentTime));
}

void loop(){
char buff[16] ;
const char *wd[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
RTCTime currentTime;
RTC.getTime(currentTime);
sprintf(buff, " %04u/%02u/%02u(%s) ", currentTime.getYear(), Month2int(currentTime.getMonth()), currentTime.getDayOfMonth(),wd[(int)currentTime.getDayOfWeek()]) ;
matrix.beginDraw();
matrix.stroke(0xFFFFFFFF);
matrix.textScrollSpeed(50);
matrix.textFont(Font_5x7);
matrix.beginText(0, 1, 0xFFFFFF);
matrix.println(buff);
matrix.endText(SCROLL_LEFT);
matrix.endDraw();

sprintf(buff, " %02u:%02u:%02u ", currentTime.getHour(), currentTime.getMinutes(), currentTime.getSeconds()) ;
matrix.beginDraw();
matrix.stroke(0xFFFFFFFF);
matrix.textScrollSpeed(50);
matrix.textFont(Font_5x7);
matrix.beginText(0, 1, 0xFFFFFF);
matrix.println(buff);
matrix.endText(SCROLL_LEFT);
matrix.endDraw();
}

 サンプルスケッチを参考にして,ツギハギで作ったので あんまり美しいコードではないですが,とりあえず動いてます。Arduino IDE のシリアルモニタで,無線LANアクセスポイントに接続したことを確認できるようになってます。まあ確認しなくても大丈夫ですが。

| |

« ドライアイス不要の霧箱 (4) | トップページ | WCH-LinkE とWCH-Link は別モノである »

Arduino」カテゴリの記事