macsbug

Just another WordPress.com site

ESP8266 + I2C DS1307 RTC + OLED

leave a comment »

ESp8266 で I2C DS1307 RTC を動かしてみました           2015.12.02

Tiny RTC I2C module への電源、SDA, SCL は、3.3V で動作しています。


 OLED_


準備:
RTC Library:Adafruit に感謝。
RTClib.cpp を変更:8行目を除く、4行目から13行目までを削除。

#include <Wire.h>
#include "RTClib.h"
//#ifdef __AVR__
//#include <avr/pgmspace.h>
#define WIRE Wire
//#else
// #define PROGMEM
// #define pgm_read_byte(addr) (*(const unsigned char *)(addr))
// #define WIRE Wire1
//#endif

部品:ESP8266 / I2C OLED / Battery = CR2032 /
部品:I2C DS1307:ebay価格:1個 100円
日時の設定:スケッチ:日時の設定を参照の事。
配線:(例) 電源、接続抵抗を除き、I2C  2本の配線のみです。
_ ESP8266 pin 0 — DS1307 SDA、OLED SDA
_ ESP8266 pin 2 — DS1307 SCL、 OLED SCL
日時の設定:スケッチ:「日時の設定」を参照の事。
_     PCの時刻を設定します。:rtc.adjust(DateTime(__DATE__, __TIME__));
_     UTC(JST)で設定する方法:rtc.begin(); で初期化し、rtc.adjust(DateTime(JST)); で設定。
_     NTPで設定する方法:DS1307 RTC を ESP8266 + UTC(JST)で初期化する


メモ:
秋月通商の DS1307 I2C RTC (1個750円) は、試していません。
DS1307のライブラリーは、幾つかありますが ESP8266 では動かないものがあります。
DS1307は5V仕様だと思うが3.3Vで動いている。
DS3231 という I2C RTC は、電源が 3.3-5.5Vで動作する。ebayで1個202円。


スケッチ:日時の設定。( PCの時刻を設定する方法 ) ( NTPによる方法はこちら
// DS1307 TIME SET
#include <Wire.h>
#include <RTClib.h>
RTC_DS1307 rtc;

void setup(void) {
  Serail.begin(115200);
  Wire.begin(0,2);                          // Initialisiere I2C
  rtc.begin();
  rtc.adjust(DateTime(__DATE__, __TIME__)); // PCの時刻を設定する。
}

void loop(){
  DateTime now = rtc.now(); 
  Serial.print  (now.year(),  DEC);Serial.print(".");
  Serial.print  (now.month(), DEC);Serial.print(".");
  Serial.print  (now.day(),   DEC);Serial.print(" ");
  Serial.print  (now.hour(),  DEC);Serial.print(":");
  Serial.print  (now.minute(),DEC);Serial.print(":");
  Serial.println(now.second(),DEC);
  delay(1000);
}

 


 

スケッチ:日時の表示
// ESP8266 + DS1307 + OLED                       // 2015.12.02
#include <Wire.h>
#define DS1307_ADDRESS 0x68                      // DS1307 I2C Address
#include <RTClib.h>                              // RTC Module            
RTC_DS1307 rtc;                                  // RTC Module
#include <Adafruit_GFX.h>                        // OLED
#include <ESP_Adafruit_SSD1306.h>                // OLED
#define OLED_RESET 4                             // OLED
Adafruit_SSD1306 display(OLED_RESET);            // OLED
char* y[]={"Sun","Mon","Tru","Wed","Thu","fri","Sat"};

void setup() { 
  //Serial.begin(115200);
  Wire.begin(0, 2); delay(10);                   // I2C : SDA,SCL
  display.begin(SSD1306_SWITCHCAPVCC,0x78>>1);   // OLED:I2C_ADDRESS
  display.clearDisplay();                        // all pixels off 
  display.setTextSize(2);                        // printable sizes 1 to 8
  display.setTextColor(WHITE);                   // WHITE, BLACK, INVERSE
}

void loop() {
  DateTime now=rtc.now();                        // Current time geting from RTC
  display.clearDisplay(); display.setCursor(0,0);// Display Clear,loc 0,0
  //---------------------------------------------// yyyy.mm.dd 2015.12.02
  display.print(now.year());  display.print(".");// year display
  if(now.month()<10){         display.print(0);} // mon  add 0
  display.print(now.month()); display.print(".");// mon  display
  if(now.day()  <10){         display.print(0);} // day  add 0
  display.print(now.day());                      // day  display
  //---------------------------------------------// Week Wed
  uint8_t w = now.dayOfWeek();                   // Weak Read
  String Week = y[w];                            // Week
  display.println(Week);display.println();       // Week
  //---------------------------------------------// Time 12:34:56
  if(now.hour()  <10){        display.print(0);} // hour add 0
  display.print(now.hour());  display.print(":");// hour display
  if(now.minute()<10){        display.print(0);} // min  add 0
  display.print(now.minute());display.print(":");// min  display
  display.print(":");                            // :
  if(now.second()<10){        display.print(0);} // sec  add 0
  display.println(now.second());                 // sec  display
  display.display();                             //
  //---------------------------------------------//
  delay(1000);                                   // 1 sec  
}


参考:
DS1307 64 x 8、シリアル、I2Cリアルタイムクロック
DS1307 data sheet
Time Library
Tiny RTC
JUNKHACK:Tiny RTC DS1307 I2C
JUNKHACK:Tiny RTC DS1307 I2C その2


Written by macsbug

12月 2, 2015 @ 7:49 am

カテゴリー: ESP8266

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。