・液晶 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);
*/
}