概要
NTPで時刻同期を行い、12球のNeoPixelのカラーリングLEDを使用して時刻(時、分、秒)を表示する時計です。
スケッチ
NeoPixel用の5Vの信号出力を持つESP8266-LEAF用に作成しました。
#include <Adafruit_NeoPixel.h>
#include <ESP8266WiFi.h>
#define LED_PIN 2
#define LED_COUNT 12
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_RGB + NEO_KHZ800);
const char *ssid = "yourssid";
const char *password = "yourpasswd";
time_t t ;
struct tm *timeInfo;
int n = 0;
void setup() {
uint32_t color = strip.Color(127, 127, 127) ;
Serial.begin(115200);
strip.begin();
strip.show();
strip.setBrightness(50);
if (WiFi.begin(ssid, password) != WL_DISCONNECTED) {
ESP.restart();
}
while (WiFi.status() != WL_CONNECTED) {
strip.setPixelColor(n++, color);
if (n >= 12) {
n = 0 ;
color = strip.Color(255, 0, 0) ;
}
strip.show();
delay(1000);
}
n = 0 ;
configTzTime("JST-9", "ntp.nict.jp", "ntp.jst.mfeed.ad.jp");
t = time(NULL) ;
}
void loop() {
uint32_t color = strip.Color(0, 0, 255) ;
for(int i=0; i<strip.numPixels(); i++) {
strip.setPixelColor(i, 0);
}
t = time(NULL) ;
timeInfo = localtime(&t) ;
if (timeInfo->tm_year != 70) {
n = timeInfo->tm_hour % 12 ;
strip.setPixelColor(n, strip.Color(255, 0, 0));
n = timeInfo->tm_min / 5 ;
color = strip.getPixelColor(n) | strip.Color(0, 255, 0) ;
strip.setPixelColor(n, color);
n = timeInfo->tm_sec / 5 ;
color = strip.getPixelColor(n) | strip.Color(0, 0, 255) ;
strip.setPixelColor(n, color);
strip.show();
} else {
strip.setPixelColor(n++, color);
if (n >= 12) {
n = 0 ;
color = strip.Color(255, 0, 0) ;
}
strip.show();
}
delay(500);
}