//Deepsleep後の起動時は先頭から実行
//
#include <NTPClient.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
const char *ssid = "your SSID";
const char *password = "your password";
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "ntp.nict.jp", 32400, 86400000);
String NTPstring; //18:02:24
#include <DS1302.h>
DS1302 rtc(14, 13, 12);
#include <Adafruit_NeoPixel.h>
#define PIN 15
#define NUMPIXELS 28
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
String StringHHMM, pStringHHMM="", StringDisp;
String WiFiHHMM="1800";//NTPにアクセスする1分前はWiFi_ONで起動する
String NTPHHMM="1801";//NTPにアクセスする時刻
boolean Awaked=HIGH;
int r,g,b;
void setup() {
delay(100);
Serial.begin(9600);
Serial.println("Wakeup&Setup");
rtc.halt(false);
rtc.writeProtect(false);
pixels.begin(); // This initializes the NeoPixel library.
}
void loop() {
int lum=analogRead(A0);
StringHHMM=rtc.getTimeStr(FORMAT_SHORT);
StringHHMM.remove(2,1);
Serial.println(StringHHMM);
Serial.println(lum);
if(StringHHMM!=pStringHHMM){
Serial.println("WriteLED");
if(lum<275){
r=5, g=10, b=10; //Night mode
//r=1, g=2, b=2; //Night mode
}
else{
r=random(190,255), g=random(190,255), b=random(190,255); //Demo mode
}
for(int i=0;i<4;i++){
StringDisp=StringHHMM.substring(i,i+1);
Seven_seg(3-i,StringDisp.toInt());
}
pixels.show();
Awaked=LOW;
if(StringHHMM==NTPHHMM){
Serial.println("NTP");
ntpAdjust();
//Awaked=HIGH;
}
}
else if(Awaked==LOW){
Serial.println("Deepsleep");
Awaked=HIGH;
if(StringHHMM!=WiFiHHMM){
ESP.deepSleep(50 * 1000 * 1000 , WAKE_RF_DISABLED);
}
else{
ESP.deepSleep(50 * 1000 * 1000 , WAKE_RF_DEFAULT);
}
//deepsleepモード移行までのダミー命令
delay(1000);
}
Serial.println("idle");
pStringHHMM=StringHHMM;
delay(950);
}
void Seven_seg(int d,int i){
boolean led[7];
switch(i){
case 0:
led[0]=HIGH,led[1]=HIGH,led[2]=HIGH,led[3]=HIGH,led[4]=HIGH,led[5]=HIGH,led[6]=LOW;
break;
case 1:
led[0]=LOW,led[1]=HIGH,led[2]=HIGH,led[3]=LOW,led[4]=LOW,led[5]=LOW,led[6]=LOW;
break;
case 2:
led[0]=HIGH,led[1]=HIGH,led[2]=LOW,led[3]=HIGH,led[4]=HIGH,led[5]=LOW,led[6]=HIGH;
break;
case 3:
led[0]=HIGH,led[1]=HIGH,led[2]=HIGH,led[3]=HIGH,led[4]=LOW,led[5]=LOW,led[6]=HIGH;
break;
case 4:
led[0]=LOW,led[1]=HIGH,led[2]=HIGH,led[3]=LOW,led[4]=LOW,led[5]=HIGH,led[6]=HIGH;
break;
case 5:
led[0]=HIGH,led[1]=LOW,led[2]=HIGH,led[3]=HIGH,led[4]=LOW,led[5]=HIGH,led[6]=HIGH;
break;
case 6:
led[0]=HIGH,led[1]=LOW,led[2]=HIGH,led[3]=HIGH,led[4]=HIGH,led[5]=HIGH,led[6]=HIGH;
break;
case 7:
led[0]=HIGH,led[1]=HIGH,led[2]=HIGH,led[3]=LOW,led[4]=LOW,led[5]=LOW,led[6]=LOW;
break;
case 8:
led[0]=HIGH,led[1]=HIGH,led[2]=HIGH,led[3]=HIGH,led[4]=HIGH,led[5]=HIGH,led[6]=HIGH;
break;
case 9:
led[0]=HIGH,led[1]=HIGH,led[2]=HIGH,led[3]=LOW,led[4]=LOW,led[5]=HIGH,led[6]=HIGH;
break;
}
for(int j=0;j<7;j++){
if(led[j]){
pixels.setPixelColor(j+7*d, pixels.Color(r,g,b));
}
else{
pixels.setPixelColor(j+7*d, pixels.Color(0,0,0));
}
}
}
void ntpAdjust(){
WiFi.begin(ssid, password);
int tries=100;
while ( WiFi.status() != WL_CONNECTED && tries>0) {
delay ( 500 );
Serial.print ( "." );
tries=tries-1;
}
if(tries>0){
timeClient.begin();
timeClient.update();
NTPstring=timeClient.getFormattedTime();
String Now = NTPstring;
String sH=Now.substring(0,2);
String sM=Now.substring(3,5);
String sS=Now.substring(7,9);
int hnow=sH.toInt();
int mnow=sM.toInt();
int snow=sS.toInt();
Serial.print(hnow),Serial.print(":");
Serial.print(mnow),Serial.print(":");
Serial.println(snow);
rtc.setTime(hnow, mnow, snow);
}
}