ESP8266+tm1650+48行arduino代码 制作迷你数码管NTP时钟 开源带库-Arduino中文社区 - Powered by Discuz! Archiver

zljcat 发表于 2019-9-13 13:59

ESP8266+tm1650+48行arduino代码 制作迷你数码管NTP时钟 开源带库

用esp8266 mini D1 开发板作为基础平台, 做一个NTP校时的迷你数码管时钟。原来想用一个成品Tm1650显示模块做,但不想用导线连接,已有的模块用起来不够利索,没有做到合适的,后来干脆自己画块板
自己画的这个板与mini d1开发板差不多大小,可以通过排针排座连接在一起,由于面积确实小,只能刚好用0.36的4位数码管,这个尺寸的数码有一点不好,
没有即有带4个小数点和时钟点的数码管0.36共阴的数码管只找到红色,白色2种,要想用其它颜色得用共阳的才有


开发环境为 arduino IDE 1.8.5 for ESP8266
代码很简单,只有48行肯定要用到库了,除自带库 用到了tm1650驱动库,NTPClient 2个库,这个两个库都可以在IDE库管理中找到
这个两个库都很简洁,有兴趣可以研究一下,实现更多功能

校时是初次上电校时,然后就按设定的时间间隔校一次,具体过程可以看一下NTPClient ,而计时是NTPClient 库中使用millis()时差实现
所以只要获取时分数据显示出来即可,loop中只负责跳秒点和刷新显示


只要连上了wfii,名称和密码不变,上电就自动连接NTP服务器校时,自动定时更新


基本功能有注释,这个只是一个框架代码,还有更大的发挥空间,比如加几行引用一个wifimanager库就可以实现ap配网了,可能除掉注释也不会超过50行







#include <NTPClient.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <Wire.h>
#include <TM1650.h>
TM1650 d;
//填入要连接的路由器的SSID和密码
const char *ssid   = "<SSID>";//
const char *password = "<PASSWORD>";//
WiFiUDP ntpUDP;
//时区北京时间,每隔10分钟同步时间stdtime.gov.hk(香港天文台服务器,快),cn.pool.ntp.org
NTPClient timeClient(ntpUDP, "stdtime.gov.hk", 8*3600, 10*60*1000);
int time_h=0,time_m=0;
String time_str="";
char time_show[]="    ";
void setup(){
    Serial.begin(115200);
    Wire.begin(12,14); //SDA-12,SCL-14 接TM1650 SDA,SCL
    d.init();
    d.setBrightnessGradually(5);
    d.displayString("boot");
    WiFi.begin(ssid, password);
    while ( WiFi.status() != WL_CONNECTED ) {
    delay ( 500 );
    Serial.print ( "." );
}
   timeClient.begin();
}
void loop() {
         if(timeClient.update()){
            time_h = timeClient.getHours();
            time_m = timeClient.getMinutes();
            time_str=Num2Str(time_h)+Num2Str(time_m);
            strcpy(time_show,time_str.c_str());
            d.displayString(time_show);
            d.setDot(1,true);
            delay(500);
            d.setDot(1,false);
             delay(500);
             Serial.println(timeClient.getFormattedTime());
         }
         else
         {d.displayString("-SN-"); d.setDot(1,false);}//
}
//数字首位补零
String Num2Str(int num) {
if (num<10) { return "0" + String(num);} else { return String(num);}
}

xxxx7 发表于 2020-1-18 17:19

学习学习:)

wadmm123 发表于 2020-2-3 18:42

ESP8266+tm1650+48行arduino代码 制作迷你数码管NTP时钟 开源带库
https://www.arduino.cn/forum.php?mod=viewthread&tid=91940&fromuid=204364
(出处: Arduino中文社区)

wasg68 发表于 2020-2-12 12:06

学习了,谢谢!

keliyuan 发表于 2020-4-14 22:11

做得好漂亮。
这要是能驱动WS2812灯条,做个大的放在客厅中的时钟了就更酷了:loveliness:

ylilike 发表于 2020-4-17 21:27

谢谢分享,不错的,学习了

playzlov 发表于 2020-6-16 12:50

标注一下,晚上去练习练习:lol

hupo99 发表于 2020-8-5 14:20

没见过这么帅的楼主!! 分享精神 太棒啦

lzm1019 发表于 2020-10-20 15:48

本帖最后由 lzm1019 于 2020-10-20 15:50 编辑

手头有不同尺寸的管子(0.36寸,0.4寸和0.56寸)。
只有0.4寸管子是时钟管,测试ok。一时好奇,换上0.36寸和0.56寸,也能工作,只是中间的2点闪烁切成了第2个8字符的dp点闪烁。
---

longjunling 发表于 2020-12-2 12:52

TM1637能用吗?
页: [1] 2
查看完整版本: ESP8266+tm1650+48行arduino代码 制作迷你数码管NTP时钟 开源带库