|

楼主 |
发表于 2024-7-23 18:19:08
|
显示全部楼层
wifi时钟代码 没语音功能
- #include <ESP8266WiFi.h>
- #define NTP1 "ntp2.aliyun.com"
- #define NTP2 "ntp1.aliyun.com"
- #define NTP3 "ntp3.aliyun.com"
- struct tm timeinfo;
- const char* ssid = "abc"; //改SSID
- const char* password = "abc"; //改password
- const size_t MaxString = 15;
- char oldTimeString[MaxString] = { 0 };
- char newTimeString[MaxString] = { 0 };
- char oldTimeString1[MaxString] = { 0 };
- char newTimeString1[MaxString] = { 0 };
- byte tm_buffer[16] = { 0x00 };
- int tm_wday,ww,hour,minute,second;
- const unsigned char tm_digit[13] = {
- 0b1111110, 0b0110000, 0b1101101, 0b1111001, 0b0110011, // 0-4
- 0b1011011, 0b1011111, 0b1110000, 0b1111111, 0b1111011, // 5-9
- 0b0001001, // 10
- 0b0000000, // 11
- 0b1000001 // 12 绿灯+红M
- };
- int tm_dio = 1; // D6 nodemcu // 1 tx esp01-s
- int tm_clk = 3; // D7 // 3 rx
- int tm_stb = 2; // D8 // 2 io2
- void setup() {
- // Serial.begin(115200);
- startSTA();
- setClock();
- init(4);
- }
- void loop() {
- setClock();
- int sec_ge = second % 10;
- int sec_shi = second / 10;
- putDigitAt(sec_shi, 0);
- putDigitAt(sec_ge, 1);
- putDigitAt(sec_shi, 2);
- putDigitAt(sec_ge, 3);
- putDigitAt(12, 13);
- int hour_ge = hour % 10;
- int hour_shi = hour / 10;
- putDigitAt(hour_shi, 8);
- putDigitAt(hour_ge, 9);
- int min_ge = minute % 10;
- int min_shi = minute / 10;
- putDigitAt(min_shi, 10);
- putDigitAt(min_ge, 11);
- putDigitAt(ww, 12);
- writeBuffer();
- }
- void putDigitAt(byte digit, int pos) {
- for (int i = 0; i < 7; i++) {
- bitWrite(tm_buffer[pos], i, bitRead(tm_digit[digit], 6 - i));
- }
- }
- void writeBuffer() {
- tm_sendCommand(0x40);
- digitalWrite(tm_stb, LOW);
- tm_sendByte(0xc0);
- for (int i = 0; i < 16; i++) {
- tm_sendByte(tm_buffer<i>);
- }
- digitalWrite(tm_stb, HIGH);
- }
- void tm_sendCommand(byte data) {
- digitalWrite(tm_stb, LOW);
- tm_sendByte(data);
- digitalWrite(tm_stb, HIGH);
- }
- void tm_sendByte(byte data) {
- for (int i = 0; i < 8; i++) {
- digitalWrite(tm_clk, LOW);
- digitalWrite(tm_dio, data & 1 ? HIGH : LOW);
- data >>= 1;
- digitalWrite(tm_clk, HIGH);
- }
- }
- void init(int intensity) {
- pinMode(tm_dio, OUTPUT);
- pinMode(tm_clk, OUTPUT);
- pinMode(tm_stb, OUTPUT);
- digitalWrite(tm_stb, HIGH);
- digitalWrite(tm_clk, HIGH);
- delay(200);
- tm_sendCommand(0x40);
- digitalWrite(tm_stb, LOW);
- tm_sendByte(0xc0);
- for (int i = 0; i < 16; i++)
- tm_sendByte(0x0);
- digitalWrite(tm_stb, HIGH);
- tm_sendCommand(0x03);
- setIntensity(intensity);
- }
- void setIntensity(int intensity) {
- if (intensity < 0) {
- tm_sendCommand(0x80);
- return;
- }
- tm_sendCommand(0x88 | (intensity % 8));
- }
- void startSTA() {
- WiFi.disconnect();
- WiFi.mode(WIFI_STA);
- WiFi.begin(ssid, password);
- while (WiFi.status() != WL_CONNECTED) {
- delay(500);
- }
- Serial.println("WiFi connected");
- }
- void setClock() {
- if (!getLocalTime(&timeinfo)) {
- configTime(8 * 3600, 0, NTP1, NTP2, NTP3);
- return;
- }
- sprintf(
- newTimeString,
- "%d",
- timeinfo.tm_min);
- if (strcmp(newTimeString, oldTimeString) != 0) {
- ww = timeinfo.tm_wday;
- if (ww == 0) ww = 8;
- hour = timeinfo.tm_hour;
- minute = timeinfo.tm_min;
- if (hour < 7) {
- setIntensity(0);
- } else {
- setIntensity(4);
- }
- strcpy(oldTimeString, newTimeString);
- }
- sprintf(
- newTimeString1,
- "%d",
- timeinfo.tm_sec);
- if (strcmp(newTimeString1, oldTimeString1) != 0) {
- second = timeinfo.tm_sec;
- Serial.println(second);
- strcpy(oldTimeString1, newTimeString1);
- if (minute == 0 && second == 0) // 整点预警
- {
- //
- }
- }
- }
复制代码
|
|