JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

Arduino UNO R4 WiFi RTC その1

2024-02-20 20:45:47 | お知らせ
 Arduino UNO R4(WiFi)のMCU(マイクロコントローラ)RA4M1は、RTC(Real Time Clock)を内蔵しています。

 このRTCの使い方を勉強します。参考にしたのは、ArduinoチュートリアルのRTCのページ「作りながら学ぶArduin+=電子工作入門」というサイトです。

 とりあえず、現在の時刻をRTCに書き込んで、I2C LCD1602に時刻を表示してみることにします。

 I2C LCD1602の接続は、前の記事と同じです。回路図です。


 スケッチです。
--------------------------------------------------
#include "RTC.h"
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);
String lcdData;

void setup() {
  //Serial.begin(9600);
lcd.begin(16,2);
lcd.init(); 
lcd.backlight(); 
lcd.print("DATE");
lcd.setCursor(0,1);
lcd.print("TIME");

RTC.begin();
  RTCTime startTime(20, Month::FEBRUARY, 2024, 20, 40, 00, DayOfWeek::TUESDAY, SaveLight::SAVING_TIME_ACTIVE);
RTC.setTime(startTime);
}

void loop() {
  RTCTime currentTime;

  // Get current time from RTC
RTC.getTime(currentTime);
  lcdData = String(currentTime.getYear()) + "/";
uint8_t Mon = Month2int(currentTime.getMonth());
if( Mon < 10){lcdData = lcdData + "0";}
  lcdData = lcdData + String(Mon) + "/";

uint8_t Day = currentTime.getDayOfMonth();
if( Day <10 ){lcdData = lcdData + "0";}
  lcdData = lcdData + String(Day);
lcd.setCursor(6,0);
lcd.print(lcdData);

uint8_t Hor = currentTime.getHour();
if( Hor < 10){lcdData = "0";}
  lcdData = String(Hor)+":";

uint8_t Min = currentTime.getMinutes();
if( Min < 10){lcdData = lcdData +"0";}
  lcdData = lcdData + String(Min)+":";

uint8_t Sec = currentTime.getSeconds();
if( Sec < 10){lcdData = lcdData +"0";}
  lcdData = lcdData + String(Sec);
lcd.setCursor(6,1);
lcd.print(lcdData);

delay(1000);
}

--------------------------------------------------
月、日、時間、分、秒の値が1桁の場合は、数字の前に0を入れて、年以外の数値はすべて2桁表示するようにしました。

 RTCを表示させた様子です。1秒ごとに時刻が表示されます。

 次回は、ネットに接続して時刻を取得するようにしてみます。

Arduino UNO R4 I2C LCD1602

2024-02-19 20:14:42 | Arduino
 Arduino UNO R4 (WiFi)で、I2C LCD1602の表示テストをします。

 Arduino UNO R4では、I2C用のSCLとSDAが独立していますので、下の回路図のように接続します。I2Cのプルアップ抵抗は、I2C LCD1602モジュールに内蔵されているので、つけていません。


 スケッチです。
--------------------------------------------
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{
lcd.begin(16,2);
lcd.init(); 
lcd.backlight(); 
lcd.setCursor(2, 0); 
lcd.print("Hello World!");
delay(1000);
}

void loop() {
lcd.setCursor(5, 1); 
lcd.print(millis()/1000);
}
--------------------------------------------

 

 1行目に「Hello World!」が、2行目に、millis()/1000の値が1sec毎に表示されます。

 ネット上を見るとArduino UNO R4には、プルアップ抵抗が内蔵されていないため、I2C LCDの種類によっては、外付けのプルアップ抵抗が必要になるようです。

Arduino UNO R4 WiFi Simple Web Server WiFi テスト

2024-02-16 20:56:49 | Arduino
 Arduino UNO R4のWiFi機能をテストします。

 スケッチ例のWiFiS3にあるSimple Web Server WiFi.inoを開き、スケッチの31行目と32行目に無線LANルーターのSSID(***********)とPASS(***********)を記入します。(周波数は2.4GHzを使います。)

char ssid[] = "***********";        // your network SSID (name)
char pass[] = "***********"; // your network password (use for WPA, or use as key for WEP)

 記入後、コンパイル書き込みをするとシリアルモニタ(9600baudにする)に
SSIDとIP Addressが表示されます。

 パソコンのブラウザを立ち上げ、表示されたIP Address(http://***.***.**.**)にアクセスすると下のような画面が表示されます。



 上の行のhereをクリックするとArduino UNO R4 WiFiのbuiltin LEDが点灯します。つまり、ネット上のサーバーからArduinoに命令が届きLEDが点灯したのです。
 次に下の行のhereをクリックするとLEDが消えます。

 当然ですが、スマホのブラウザからも同じ操作ができます。

 これで一応WiFi接続開通ということになります。

Arduino UNO R4 WiFi LEDマトリクス その3(文字をスクロール表示する)

2024-02-16 13:23:34 | Arduino
 Arduino UNO R4 WiFiのLEDMatrixにテキスト(文字)をスクロール表示してみます。

 Arduino IDE(2/16現在、v2.3.1にアップデートされています)のスケッチ例を開き、「LED_Matrix」の中の「TextWithArduinoGraphics.ino」を開きます。

 これをコンパイルするとエラーになります。ライブラリにArduinoGraphics.hがないためです。ライブラリマネージャーを開き、「検索をフィルタ」にArduinoGraphics.h を書き入れて、検索するとArduinoGraphics by Arduinoが表示されますので、インストールします。


 これは、インストール済みの画面です。

 コンパイル、書き込みをすると「Scrolling text!」という文字が右から左にスクロール表示されます。

Arduino UNO R4 WiFi LEDマトリクス その2(文字を表示する)

2024-02-14 12:56:48 | Arduino
 Arduino UNO R4 WiFi LEDMatrixに文字を表示してみます。

 ネット上を探すと、ARDUINO GET STARTEDというサイトに数字と文字の表示デモがありました。こちら

 プログラム(スケッチ)とフォントをArduino IDEにコピーして、コンパイル書き込みをすると1sec毎に、0~9.A~Zの数字と文字が表示されました。



 フォントは、いくつかの文字を自分好みに若干手を入れました。
 なお、add_to_frame(char c, int pos)関数のposは、数字文字を描画する時の左端の位置ですので、posの値を0,6と使い分ければLEDMatrixに2文字表示することができます。

 このスケッチを利用して、シリアルモニタでパソコンから送った文字をArduino UNO R4 WiFiに表示させるスケッチを書いてみました。
 loop(){}
を次のように書き直しました。
------------------------------------------
void loop() {
if(Serial.available() > 0){
char data = Serial.read();
Serial.println(data);
clear_frame();
add_to_frame(data,4);
display_frame();
}
}
------------------------------------------

 シリアルモニタで改行なしで数字(0~9)と文字(A~Z)を送るとArduinoに表示されます。
 それ以外の文字(改行コードなども含む)を送ると
WARNING: unsupported character とシリアルモニタに表示されます。