・液晶 SD1306
・リアルタイムクロック RTC DS3231


スケッチはこちら。
コピペOKです。
ご自由にどうぞ

/***************************************************
  ラズベリーパイ ピコ
 液晶1306 128x64     I2C=0x3C
 リアルタイムクロック RTC DS3231 I2C=0x68

 ラズベリーパイ ピコの使用端子
   3.3V(out) 36ピン
   GND       38ピン
  I2C SDA=GP16 21ピン
  I2C SCK=GP17 22ピン

  RTC DS3231の32K、SQW-は使用してません

  開発環境
   OS Windows11 PRO 64bit
  Arduino IDE 2.3.2
   ライブラリー
     液晶1306   Adafruit_SSD1306
     RTC DS3231  DS3231_TEST

 2024-06-28
 Program by.Tsurutsuru
 ***************************************************
*/

//液晶 SD1306
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
Adafruit_SSD1306 display = Adafruit_SSD1306(SCREEN_WIDTH, SCREEN_HEIGHT);

//リアルタイムクロック RTC3231
#include <DS3231.h>
DS3231 Clock;

void setup()
{
  //I2C setup
  //SDA=GP16、SCK=GP21の組み合わせでも動きました。他の組み合わせは試してません。
  //端の方が配線しやすく、間違えずらいので GP16,GP17で組みました

  Wire.setSDA(16);  // I2C0 SDA Raspberry Pi Pico GP16
  Wire.setSCL(17);  // I2C0 SCL Raspberry Pi Pico GP17
  Wire.begin();
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

  //LCD 1306 setup
  display.clearDisplay();     // 画面消去
  display.setTextSize(1);     // 文字サイズ 1
  display.setTextColor(SSD1306_WHITE);   //色の指定:指定しないと表示が出ない


//日付、時間の設定 一度書き込んだらコメントアウトして、もう一度書き込む
//    Clock.setSecond(0); // 秒
//    Clock.setMinute(20);// 分
//    Clock.setHour(16);  // 時
//    Clock.setDoW(5);    //  曜日 ライブラリでDoWになっている
//    Clock.setDate(28);  // 日
//    Clock.setMonth(6);  // 月
//    Clock.setYear(24);  // 年

} //setup

void loop()
{
  ReadDS3231();
  delay(500);
}

void ReadDS3231()
{
  bool Century=false;
  bool h12,PM;
  int second,minute,hour,date,month,year,temperature;
  Wire.beginTransmission(0x68);
  second=Clock.getSecond();
  minute=Clock.getMinute();
  hour=Clock.getHour(h12, PM);
  date=Clock.getDate();
  month=Clock.getMonth(Century);
  year=Clock.getYear();
  temperature=Clock.getTemperature(); //気温
  Wire.endTransmission(0x68); 

  display.clearDisplay();           // 画面消去
  display.setTextSize(1);           // 文字サイズ 1
  display.setCursor(0, 5);          // 座標を左上(0,5)
  display.print("SSD-1306  RTC3231"); 

  display.setCursor(0, 15);          // 座標を左上(0,15)
  display.print("20");               //西暦 下2桁しか表示されないため"20"を表示
  display.print(year); 
  display.print("/"); 
  display.print(month); 
  display.print("/"); 
  display.print(date);

  display.print("  kion:");
  display.print( temperature);          //気温を表示

  display.setTextSize(2);               // 文字サイズ 2
  display.setCursor(15, 35);            // 座標を左上(15,35)
  
  if(hour < 10)  display.print(" ");    //桁合わせ
  display.print(hour); 
  display.print(":"); 
  if(minute < 10)  display.print("0");  //桁合わせ
  display.print(minute);
  display.print(":");
  if(second < 10)  display.print("0");  //桁合わせ
  display.print( second);
 
  display.display();                    //表示の更新

 //デバック用 シリアルモニターに表示
/*
  Serial.print("20");
  Serial.print(year,DEC);
  Serial.print('-');
  Serial.print(month,DEC);
  Serial.print('-');
  Serial.print(date,DEC);
  Serial.print(' ');
  Serial.print(hour,DEC);
  Serial.print(':');
  Serial.print(minute,DEC);
  Serial.print(':');
  Serial.print(second,DEC);
  Serial.print('\t');
  Serial.print("Temperature=");
  Serial.println(temperature);
*/  
}