数码之家

标题: 超简单DIY~制作自动授时64*32 LED单色大屏时钟(开源) [打印本页]

作者: fryefryefrye    时间: 2021-2-18 09:41
标题: 超简单DIY~制作自动授时64*32 LED单色大屏时钟(开源)
本帖最后由 fryefryefrye 于 2021-2-21 11:49 编辑

落叶风大侠的WiFi LED彩屏天气万年历时钟,确实非常不错,但是门槛太高了,很多人想做,但是力不从心啊。

我这边发布一个能够让更多人能够做出来的大屏时钟,有以下优点。

1:程序简单,只有一个Arduino工程,插上USB即可下载。
2:硬件简单,只需要两个元件,焊接10来根线,无需电路板。
3:成本便宜,LED板全新价格也就30元,再加一块10元的ESP8266 D1板就够了。
3:联网能力,ESP8266有联网能力,我开源的程序,已经做好了时间同步。以后可以继续扩展天气预报等功能。
4:中文显示,我开源的程序,已经集成了16*16中文字库,可以直接用UTF-8编码显示。显示天气,万年历等超级方便。
5:OTA能力,除了第一次需要用USB下载,以后可以使用WiFi下载程序了,无需把墙上的时钟拿下来。

所需的两个元件,淘宝采购:
[attach]1078828[/attach]
这种LED屏有红色单色的,也有红绿双色的。但是ESP8266的IO口有限,我只能搞定一种颜色。如果买红绿双色,只能用改变接线的方式,永久性的改变颜色,可以显示绿色,也可以显示橙色。


打开源代码,找到如下部分:
#define RowA D8            //行信号,驱动138  
#define RowB D7
#define RowC D6
#define RowD D5
#define STB D2         //595 刷新显示  SS  LAT
#define CLK D1         //时钟    SCK  
#define OE D0                         //  使能  
#define R1 D4          //上半屏列信号输出   
#define R2 D3          //下半屏列信号输出

照此定义,把LED屏和ESP8266 D1 板焊在一起。另外把5v供电线也给焊上。板上插一根USB线备用。
[attach]1078829[/attach]

硬件完工,下面搞软件:

Arduino的开发环境,下载下来后,需要在“开发板管理器”里面加入ESP8266的支持。
另外在“库管理器中”下载一个“u8g2”这是一个包含中文字库的显示屏驱动。

最后一步,修改源代码中的wifi名和密码,然后通过USB下载,就搞定啦。
[attach]1078831[/attach]

源代码在此:
https://github.com/fryefryefrye/ ... /OtherProject/clock


现有功能与功能扩展:
现有的代码,会自动从ntp.org读取时间,并显示。已设置时区为8,如果在国外的同学请自行修改代码时区设置。
代码的最后一段,就是设置显示内容的,默认第一行大字显示时间,第二行小字显示日期,第三行小字显示英语的星期。大家可以自行修改显示的内容,语法就是和printf一样,非常方便。
最后几行我还写了如何显示中文的例子,如果有能力的同学可以从网上读取天气预报来显示。

  1. //D0 = GPIO16;
  2. //D1 = GPIO5;
  3. //D2 = GPIO4;        LED on esp8266
  4. //D3 = GPIO0;can not download when connected to low
  5. //D4 = GPIO2;        
  6. //D5 = GPIO14;  
  7. //D6 = GPIO12;
  8. //D7 = GPIO13;
  9. //D8 = GPIO15;  can not start when high input
  10. //D9 = GPIO3; UART RX
  11. //D10 = GPIO1; UART TX
  12. //LED_BUILTIN = GPIO16 (auxiliary constant for the board LED, not a board pin);

  13. #include<ESP8266WiFi.h>
  14. #include<WiFiUdp.h>
  15. #include<ESP8266mDNS.h>
  16. #include<ArduinoOTA.h>
  17. #include<ESP8266WiFiMulti.h>
  18. #include<ESP8266WiFiGeneric.h>
  19. #include<time.h>

  20. #include <U8g2lib.h>
  21. u8g2_t u8g2;

  22. #define timezone 8

  23. unsigned long Cycle = 1000;//刷新间隔,微秒
  24. unsigned long DisplayLight = 50;//亮度
  25. const char* ssid = "wang";  //Wifi名称
  26. const char* password = "12345678";  //Wifi密码

  27. char *time_str;   
  28. char H1,H2,M1,M2,S1,S2;

  29. unsigned long SecondsSinceStart = 0;
  30. unsigned long TenthSecondsSinceStart = 0;
  31. void TenthSecondsSinceStartTask();
  32. void OnSecond();
  33. void NonStopTask();

  34. #define RowA D8                    //行信号,驱动138  
  35. #define RowB D7
  36. #define RowC D6
  37. #define RowD D5
  38. #define STB D2         //595 刷新显示  SS  LAT
  39. #define CLK D1         //时钟    SCK  
  40. #define OE D0                         //  使能  
  41. #define R1 D4          //上半屏列信号输出   
  42. #define R2 D3          //下半屏列信号输出   

  43. void setup()
  44. {      
  45.         delay(50);                     
  46.         Serial.begin(115200);

  47.         pinMode(RowA, OUTPUT);
  48.         pinMode(RowB, OUTPUT);
  49.         pinMode(RowC, OUTPUT);
  50.         pinMode(RowD, OUTPUT); //138片选
  51.         pinMode(OE, OUTPUT); //138 使能
  52.         pinMode(R1, OUTPUT);//595 数据
  53.         pinMode(R2, OUTPUT);//595 数据
  54.         pinMode(CLK, OUTPUT); //595 时钟
  55.         pinMode(STB, OUTPUT); //595 使能

  56.         WiFi.disconnect();
  57.         WiFi.mode(WIFI_STA);//设置模式为STA
  58.         byte mac[6];
  59.         WiFi.softAPmacAddress(mac);
  60.         printf("macAddress 0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X\r\n",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);

  61.         Serial.print("Is connection routing, please wait");  
  62.         WiFi.begin(ssid, password); //Wifi接入到网络
  63.         Serial.println("\nConnecting to WiFi");
  64.         //如果Wifi状态不是WL_CONNECTED,则表示连接失败
  65.         unsigned char WiFiTimeOut = 0;
  66.         while (WiFi.status() != WL_CONNECTED) {  
  67.                 Serial.print(".");
  68.                 delay(1000);    //延时等待接入网络
  69.                 WiFiTimeOut++;
  70.                 if (WiFiTimeOut>10)
  71.                 {
  72.                         break;
  73.                         Serial.println("\nConnecting to WiFi Failed");
  74.                 }
  75.         }

  76.         //设置时间格式以及时间服务器的网址
  77.         configTime(timezone * 3600, 0, "pool.ntp.org", "time.nist.gov");
  78.         Serial.println("\nWaiting for time");
  79.         while (!time(nullptr)) {
  80.                 Serial.print(".");
  81.                 delay(1000);   
  82.         }
  83.         Serial.println("");


  84.         //开启OTA功能。除了第一次需要用USB下载,以后就可以使用WiFi下载程序了。
  85.         ArduinoOTA.onStart([]() {
  86.                 String type;
  87.                 if (ArduinoOTA.getCommand() == U_FLASH) {
  88.                         type = "sketch";
  89.                 } else { // U_SPIFFS
  90.                         type = "filesystem";
  91.                 }
  92.                 // NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end()
  93.                 Serial.println("Start updating " + type);
  94.         });
  95.         ArduinoOTA.onEnd([]() {
  96.                 Serial.println("\nEnd");
  97.         });
  98.         ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
  99.                 Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
  100.         });
  101.         ArduinoOTA.onError([](ota_error_t error) {
  102.                 Serial.printf("Error[%u]: ", error);
  103.                 if (error == OTA_AUTH_ERROR) {
  104.                         Serial.println("Auth Failed");
  105.                 } else if (error == OTA_BEGIN_ERROR) {
  106.                         Serial.println("Begin Failed");
  107.                 } else if (error == OTA_CONNECT_ERROR) {
  108.                         Serial.println("Connect Failed");
  109.                 } else if (error == OTA_RECEIVE_ERROR) {
  110.                         Serial.println("Receive Failed");
  111.                 } else if (error == OTA_END_ERROR) {
  112.                         Serial.println("End Failed");
  113.                 }
  114.         });
  115.         ArduinoOTA.begin();
  116.         Serial.println("Ready");
  117.         Serial.print("IP address: ");
  118.         Serial.println(WiFi.localIP());

  119.         u8g2_Setup_ssd1306_64x32_noname_f(&u8g2, U8G2_R0, NULL, NULL);  // init u8g2 structure

  120. }

  121. void hc138sacn(byte r)   //输出行线状态ABCD (A低,D高)
  122. {
  123.         digitalWrite(RowA,(r & 0x01));
  124.         digitalWrite(RowB,(r & 0x02));
  125.         digitalWrite(RowC,(r & 0x04));
  126.         digitalWrite(RowD,(r & 0x08));
  127. }

  128. void DisplayOneLine()
  129. {
  130.         //显示缓存扫描
  131.         static unsigned char row=0;
  132.         for (int i=0; i<64; i++)
  133.         {
  134.                 digitalWrite(CLK,0);
  135.                 digitalWrite(R1, ((u8g2.tile_buf_ptr[i%64+(row/8)*64]>>(row%8))&1));//发送上半屏
  136.                 digitalWrite(R2, ((u8g2.tile_buf_ptr[i%64+(row/8)*64+128]>>(row%8))&1));//发送下半屏
  137.                 digitalWrite(CLK,1);
  138.         }

  139.         hc138sacn(row);            //选行
  140.         digitalWrite(STB, 1);      //数据确认
  141.         digitalWrite(STB, 0);
  142.         if (DisplayLight>0)
  143.         {
  144.                 digitalWrite(OE, 0);  //开启显示
  145.         }
  146.         delayMicroseconds(DisplayLight) ;  //亮度调节
  147.         digitalWrite(OE, 1);  //关闭显示
  148.         row++;
  149.         if (row>15)
  150.         {
  151.                 row = 0;
  152.                 NonStopTask();
  153.         }
  154. }

  155. unsigned long CurrentDisplayTime;
  156. unsigned long LastDisplayTime;
  157. void DisplayTimerTask()
  158. {
  159.         CurrentDisplayTime = micros();
  160.         if (abs(CurrentDisplayTime - LastDisplayTime) > Cycle)
  161.         {
  162.                 LastDisplayTime = CurrentDisplayTime;
  163.                 DisplayOneLine();
  164.         }
  165. }

  166. void loop()
  167. {
  168.         DisplayTimerTask();
  169. }

  170. void NonStopTask()
  171. {
  172.         TenthSecondsSinceStartTask();
  173.         ArduinoOTA.handle();
  174. }

  175. void OnTenthSecond()
  176. {
  177.         if (TenthSecondsSinceStart % 10 == 0)
  178.         {
  179.                 OnSecond();
  180.                 SecondsSinceStart++;
  181.         }

  182. }

  183. unsigned long LastMillis = 0;
  184. void TenthSecondsSinceStartTask()
  185. {
  186.         unsigned long CurrentMillis = millis();
  187.         if (abs(CurrentMillis - LastMillis) > 100)
  188.         {
  189.                 LastMillis = CurrentMillis;
  190.                 TenthSecondsSinceStart++;
  191.                 OnTenthSecond();
  192.         }
  193. }


  194. char* WeekStr[7] = { "Sunday"
  195.                                                         ,"Monday"
  196.                                                         ,"Tuesday"
  197.                                                         ,"Wednesday"
  198.                                                         ,"Thursday"
  199.                                                         ,"Friday"
  200.                                                         ,"Saturday" };

  201. void OnSecond()
  202. {
  203.         static char sprint_buf[20];

  204.         time_t now = time(nullptr); //获取当前时间


  205.         //转换成年月日的数字,可以更加自由的显示。
  206.         struct   tm* timenow;
  207.         timenow = localtime(&now);
  208.         unsigned char tempHour = timenow->tm_hour;
  209.         unsigned char tempMinute = timenow->tm_min;
  210.         unsigned char tempSecond = timenow->tm_sec;
  211.         unsigned char tempDay = timenow->tm_mday;
  212.         unsigned char tempMonth = timenow->tm_mon + 1;
  213.         unsigned int tempYear = timenow->tm_year + 1900;
  214.         unsigned char tempWeek = timenow->tm_wday;


  215.         u8g2_ClearBuffer(&u8g2);//清空显存
  216.         u8g2_SetFont(&u8g2, u8g2_font_crox3t_tn);
  217.         //第一行大字,显示时间
  218.         sprintf(sprint_buf, "%02d:%02d:%02d"
  219.                 , tempHour
  220.                 , tempMinute
  221.                 , tempSecond
  222.         );
  223.         u8g2_DrawStr(&u8g2, 3, 12, sprint_buf);

  224.         //第二行小字,显示日期
  225.         u8g2_SetFont(&u8g2, u8g2_font_IPAandRUSLCD_tf);//字体5*7
  226.         sprintf(sprint_buf, "%04d-%02d-%02d"
  227.                 , tempYear
  228.                 , tempMonth
  229.                 , tempDay
  230.         );
  231.         u8g2_DrawStr(&u8g2, 0, 22, sprint_buf);

  232.         //第三行小字,显示星期
  233.         sprintf(sprint_buf, "%s"
  234.                 , WeekStr[tempWeek]
  235.         );
  236.         u8g2_DrawStr(&u8g2, 0, 31, sprint_buf);

  237.         //显示中文的方法  但是这个屏幕最多只能显示八个汉字。本身这个源文件,必须是UTF-8格式
  238.         //u8g2_SetFont(&u8g2, u8g2_font_wqy16_t_gb2312);
  239.         //u8g2_DrawUTF8(&u8g2, 0, 14, "好好学习");
  240.         //u8g2_DrawUTF8(&u8g2, 0, 30, "天天向上");
  241. }
复制代码




作者: jjbboox    时间: 2021-2-18 09:53
用Arduino就是这么简单。
都不好意思打赏了。:lol:

作者: sunnyquan    时间: 2021-2-18 10:15
功耗怎么样的?
作者: paladina    时间: 2021-2-18 10:18
支持开源,看来要学学Arduino了
作者: ccp    时间: 2021-2-18 10:28
功耗怎么样的?------------------这个最关心
作者: suifengshiqu    时间: 2021-2-18 10:31
确实成本不高,有时间了仿制一个。
作者: fryefryefrye    时间: 2021-2-18 10:42
本帖最后由 fryefryefrye 于 2021-2-18 10:43 编辑
sunnyquan 发表于 2021-2-18 10:15
功耗怎么样的?

晕,这东西反正不可能脱离电线长期使用的,你们为啥这么关注功耗?

1万的充电宝,大概能用1天吧。大概2瓦。

@ccp
作者: hzw6834    时间: 2021-2-18 10:53
东西做的不错,适合放办公场所。
作者: yzice    时间: 2021-2-18 11:10
先收藏,等有空了仿制一个玩玩,谢谢楼主提供技术指导
作者: jjbboox    时间: 2021-2-18 11:43
可以打开路由器的NTP服务,这样只要连路由的IP作为NTP就可以了,同步时间更快,更准确
作者: fryefryefrye    时间: 2021-2-18 12:13
jjbboox 发表于 2021-2-18 11:43
可以打开路由器的NTP服务,这样只要连路由的IP作为NTP就可以了,同步时间更快,更准确 ...

没必要  pool.ntp.org 是默认的linux系统用的同步服务器池,有足够量的服务器,根本不怕出问题。
作者: jjbboox    时间: 2021-2-18 13:37
fryefryefrye 发表于 2021-2-18 12:13
没必要  pool.ntp.org 是默认的linux系统用的同步服务器池,有足够量的服务器,根本不怕出问题。 ...

至少在断网的时候你的时钟还能走时,否则就要停了。
作者: fryefryefrye    时间: 2021-2-18 14:23
jjbboox 发表于 2021-2-18 13:37
至少在断网的时候你的时钟还能走时,否则就要停了。

不会停的,就算断网了,也是一直走,只不过依靠CPU晶振,精度可能会差点。

我这个项目,为了极简化,按键都没有,只能依靠网络同步。你说的路由器自带时间服务也是靠CPU时钟的,断网时间长了也不准。而且并不是每个人的路由器都有NTP服务。
作者: sunnyquan    时间: 2021-2-18 14:26
fryefryefrye 发表于 2021-2-18 10:42
晕,这东西反正不可能脱离电线长期使用的,你们为啥这么关注功耗?

1万的充电宝,大概能用1天吧。大概2瓦 ...

真的进入实用,关注的东西多着呢,如白天晚间亮度切换或可调,或定时关闭显示等:titter:
作者: 落花萧然    时间: 2021-2-18 14:30
什么接口?
是HUB75接口吗?
作者: flishmen    时间: 2021-2-18 15:05
落花萧然 发表于 2021-2-18 14:30
什么接口?
是HUB75接口吗?

单色应该是08的接口。
作者: fryefryefrye    时间: 2021-2-18 15:32
本帖最后由 fryefryefrye 于 2021-2-18 15:43 编辑
sunnyquan 发表于 2021-2-18 14:26
真的进入实用,关注的东西多着呢,如白天晚间亮度切换或可调,或定时关闭显示等 ...

在我家已经进入实用了。我家里的屏,都是读取我家的智能家居服务器上的数据显示,包括天气之类的。 这次我专门改了个可以独立工作的时钟开源一下。
ESP8266的数字口全部用完了,就剩一个A0口了,我自己的是接了一个亮度传感器。自动调整亮度,包括全黑之后关闭显示。定时关闭就用不着了。
调整亮度只需要改变一个变量值就行了,我写在最前面改参数的地方了。

这个屏我家里有好几个,不一定显示时间,可以通过网络获取各种数据显示,我一般用它来显示我DIY过程中需要一直看着的数据,比如给电池充电的电流电压等等。

还有一个显示屏背面绑着一个超薄的充电宝,可以移动显示。




作者: fryefryefrye    时间: 2021-2-18 15:37
flishmen 发表于 2021-2-18 15:05
单色应该是08的接口。

这个口是双色08接口。 不过兼容单色。单色的时候,一般只用红色。
R1是红色上半屏,R2是红色下半屏,
G1是绿色上半屏,G2是绿色下半屏.
作者: sunnyquan    时间: 2021-2-18 15:54
fryefryefrye 发表于 2021-2-18 15:32
在我家已经进入实用了。我家里的屏,都是读取我家的智能家居服务器上的数据显示,包括天气之类的。 这次我 ...

:praise:期待您的更多分享~
作者: fryefryefrye    时间: 2021-2-18 16:05
sunnyquan 发表于 2021-2-18 15:54
期待您的更多分享~

我这个分享只能算是个抛砖引玉而已,个人DIY的东西,每个人的功能求差异巨大。不可能直接分享一个别人需要的东西。

我这个就是个“网络实时显示屏”,自我感觉最棒的是集成了汉字字库。

只是做了一个大家最常用的,时间显示的功能。大家可以在此基础上做自己想要显示的东西。

或者有什么需求,说说看啊。

其实我也知道天气预报也是大家需要的功能,但是这个确实比较麻烦,服务器难找。更加麻烦的是现在服务器都升级成ssl了,单片机很难处理。我自己做的是申请一个免费天气的api账号,然后用一个树莓派通过ssl获取天气,然后通过UDP协议发给显示屏,然后就可以显示天气了。只是这一套系统不是很方便分享,如果有需求,我倒是可以想想怎么分享。


超简单DIY之二~制作64*32 LED单色大屏天气预报(开源)
https://www.mydigit.cn/forum.php?mod=viewthread&tid=237853
作者: 触景情伤    时间: 2021-2-18 17:06
再拖个3231就实用了,刚试了我的一个NTP时钟,没有网络的时候就不行了
作者: hecat    时间: 2021-2-18 20:22
赞楼主开源。
学习来了。
作者: cxw0102    时间: 2021-2-19 20:56
fryefryefrye 发表于 2021-2-18 15:37
这个口是双色08接口。 不过兼容单色。单色的时候,一般只用红色。
R1是红色上半屏,R2是红色下半屏,
G1 ...

楼主,这种屏是一进一出的串行。所以一个颜色out接另一个颜色的in,就可以只用一个io发送data了。三色也是可以的哦。io少可以考虑一下。
作者: 虫行天下    时间: 2021-2-19 21:06
我感觉用ESP32更好,差不了几块钱,多很多IO口,可以加上温感显示温度,光感改变亮度,可以接双色屏,自己能力有限
顺便打个广告,我还有二三百片双色3.75点阵屏,无死点坏点,只要14元一片三片以上15包邮
作者: fryefryefrye    时间: 2021-2-19 22:03
本帖最后由 fryefryefrye 于 2021-2-19 22:11 编辑
cxw0102 发表于 2021-2-19 20:56
楼主,这种屏是一进一出的串行。所以一个颜色out接另一个颜色的in,就可以只用一个io发送data了。三色也 ...

这也行?想想确实可以。学习了,有时间试试看。

不过这样显存和刷新时间就要翻倍了,不知道会不会闪。
=====================================================

再思考了一下,两个颜色的锁存和时钟信号都在一起,分不开啊。

作者: fryefryefrye    时间: 2021-2-19 22:08
虫行天下 发表于 2021-2-19 21:06
我感觉用ESP32更好,差不了几块钱,多很多IO口,可以加上温感显示温度,光感改变亮度,可以接双色屏,自己 ...

ESP8266我用的熟了,接这个板子,还剩一个A0口,还是可以接光感的,其他的就接不了了,只能通过网络获取各类数据显示了,其实天气实况的温度湿度都没问题,只是不能接传感器.

ESP32淘宝好好找,只要15元,我只买了一个,开发环境也搞好了。但是8266性能够了,ESP8266我都买了估计有50个了。

真的要搞多色,肯定搞RGB三色了,双色有啥意思。
作者: barve    时间: 2021-2-19 22:11
、请问楼主,HUB08接口16*64的单红的可以用这个嘛
作者: fryefryefrye    时间: 2021-2-19 22:17
barve 发表于 2021-2-19 22:11
、请问楼主,HUB08接口16*64的单红的可以用这个嘛

这个是我发的那个板的“半版”
我的发的板子有R1 R2 两根信号线,上下半屏各一根。 你这种的应该只有一根。
按理说,程序直接能用,但是只能显示一半。
作者: digitking    时间: 2021-2-20 07:02
我做了4.75单色的,跟楼主的基本一样。某宝8.8一块。
out的R1接in的R2,可以省去一个io,有成熟的库,叫PxMatrix。扫描用的ticker,已经打板在路上。
思路跟楼主一样,一切从简,ntp,ota,没有用按钮。星期是中文的。晚上到时间熄屏
作者: fryefryefrye    时间: 2021-2-20 13:27
digitking 发表于 2021-2-20 07:02
我做了4.75单色的,跟楼主的基本一样。某宝8.8一块。
out的R1接in的R2,可以省去一个io,有成熟的库,叫PxM ...

8*8的中文字体还是看的不是很舒服。16*16是底线了。

我那个布局,把年和日月上下布置,应该就能让出16*16的位置来显示中文星期了。
不过我做给上学的女儿用的,算是给她点英文环境,所以连月份都用的英语。

[attach]1080677[/attach]


作者: 虫行天下    时间: 2021-2-20 14:12
fryefryefrye 发表于 2021-2-19 22:08
ESP8266我用的熟了,接这个板子,还剩一个A0口,还是可以接光感的,其他的就接不了了,只能通过网络获取各类 ...

[attach]1080737[/attach]
个人感觉 3264的屏还是双色屏看起来舒服 全彩的要做到12864的分辨率才看着顺眼点


作者: chaichai    时间: 2021-2-20 17:31
请问代码里的STB是led表贴针脚LAT吗
作者: amo73    时间: 2021-2-20 23:08
digitking 发表于 2021-2-20 07:02
我做了4.75单色的,跟楼主的基本一样。某宝8.8一块。
out的R1接in的R2,可以省去一个io,有成熟的库,叫PxM ...

:praise:
单色纯显示时间的话,建议用数码管;或自己用贴片LED发光+黑泡沫切割数模+外覆半透光板。显示效果会好很多
作者: 什么支架    时间: 2021-2-20 23:37
mark一下,紫薯布丁

作者: 慕名而来    时间: 2021-2-21 08:52
ccp 发表于 2021-2-18 10:28
功耗怎么样的?------------------这个最关心

这么大的LED点阵屏也没办法用电池供电,既然用市电供电也就没必要太纠结耗电量了。
作者: xiaowei0304    时间: 2021-2-21 09:07
我做的双色时钟,用了好多年了,在一乐发过帖子

作者: xiaowei0304    时间: 2021-2-21 09:18
虫行天下 发表于 2021-2-20 14:12
个人感觉 3264的屏还是双色屏看起来舒服 全彩的要做到12864的分辨率才看着顺眼点

...

农历为啥不向左移一下?有点强迫症哈
作者: flishmen    时间: 2021-2-21 09:40
fryefryefrye 发表于 2021-2-19 22:03
这也行?想想确实可以。学习了,有时间试试看。

不过这样显存和刷新时间就要翻倍了,不知道会不会闪。

这个可以的,有个老外开源的库就是这么处理的,RGB的信号全部送完之后再锁存。
作者: flishmen    时间: 2021-2-21 09:42
xiaowei0304 发表于 2021-2-21 09:07
我做的双色时钟,用了好多年了,在一乐发过帖子

这个很多人走的,基本上都是基于Belin老师的13中显示模式的代码更改的。
作者: 李拜天    时间: 2021-2-21 10:23
牛年牛思路,再多些细节会更好
作者: life1900    时间: 2021-2-21 10:41
楼主有心了,确实不错
作者: digitking    时间: 2021-2-21 11:47
xiaowei0304 发表于 2021-2-21 09:07
我做的双色时钟,用了好多年了,在一乐发过帖子

你这个农历和温度怎么来的?8x8的汉字不错啊
作者: digitking    时间: 2021-2-21 11:48
amo73 发表于 2021-2-20 23:08
单色纯显示时间的话,建议用数码管;或自己用贴片LED发光+黑泡沫切割数模+外覆半透光板。显示效 ...

主要是懒。而且这个点阵的可以换字体。

一个懒字,省去无数烦恼
作者: fryefryefrye    时间: 2021-2-21 11:52
amo73 发表于 2021-2-20 23:08
单色纯显示时间的话,建议用数码管;或自己用贴片LED发光+黑泡沫切割数模+外覆半透光板。显示效 ...

你这个太费工时了。估计耗时要以天计。

我发的这个,真是10分钟搞定。
作者: fryefryefrye    时间: 2021-2-21 11:59
本帖最后由 fryefryefrye 于 2021-2-21 12:00 编辑
flishmen 发表于 2021-2-21 09:40
这个可以的,有个老外开源的库就是这么处理的,RGB的信号全部送完之后再锁存。 ...

你这样就不方便级联啦。 我早期还用Mega2560的单片机做过一个两块板子级联的,现在还挂在我家客厅的墙上呢。
只是接线等等做的太复杂,太烂的,就没有分享了。
后来发现8266的引脚也够驱动,才简化出此次分享的。
以后看有时间,把这个级联的也改成8266了。


[attach]1081789[/attach]



作者: xiaowei0304    时间: 2021-2-21 12:50
digitking 发表于 2021-2-21 11:47
你这个农历和温度怎么来的?8x8的汉字不错啊

农历是查表,温度是NTC
作者: digitking    时间: 2021-2-21 12:51
xiaowei0304 发表于 2021-2-21 12:50
农历是查表,温度是NTC

求个代码。懒字当头。谢谢!
作者: 莫名11    时间: 2021-2-21 14:46
论坛牛人多,每天都想来学习
作者: 虫行天下    时间: 2021-2-21 14:53
xiaowei0304 发表于 2021-2-21 09:18
农历为啥不向左移一下?有点强迫症哈

这个是人家写的代码 哈哈
作者: 亚历山大    时间: 2021-2-21 16:08
这个东西可以玩,再添加个定时提醒功能就好了
作者: xiaowei0304    时间: 2021-2-21 16:49
本帖最后由 xiaowei0304 于 2021-2-21 16:53 编辑
digitking 发表于 2021-2-21 12:51
求个代码。懒字当头。谢谢!

一时找不到了,刚下载了一个,或者你到这里下载也行https://www.yleee.com.cn/thread-14267-1-1.html

好几年前写的程序,农历查表那块也是网上找的,参考。。。

[attach]1082126[/attach]

作者: miaomiaojjyy    时间: 2021-2-21 19:56
先收藏,有时间试一下,话说楼主没有贴成品图片啊
作者: fryefryefrye    时间: 2021-2-21 22:09
本帖最后由 fryefryefrye 于 2021-2-21 22:11 编辑
miaomiaojjyy 发表于 2021-2-21 19:56
先收藏,有时间试一下,话说楼主没有贴成品图片啊

你指的是挂在墙上的样子?参考30,45楼吧。这两个才是我家真正在用的

开源的代码是我专门为降低门槛而写的简易版。1楼也有这个代码的实际成品照片啊。

作者: fryefryefrye    时间: 2021-2-21 22:21
李拜天 发表于 2021-2-21 10:23
牛年牛思路,再多些细节会更好

你难道指的是如何组装外壳,挂墙上?
根本不需要,买4个LED单元专用的磁吸脚,然后往冰箱上一吸,最简单方便。
如果要挂其他地方,就先用螺丝订一块铁板,然后磁吸。
或者用做两个铁丝钩子挂起来。
参考30楼,45楼的图片。这东西本身就是个无边框显示屏,只要能把控制板放在屏幕后面,就能完美的挂墙上。唯一麻烦的就是供电线路,我家客厅的是在后面打了个洞,把线拉到楼梯间了。

作者: fyzlzm    时间: 2021-2-22 08:57
很好的,我也学着做一个,谢谢分享。
作者: encnlee    时间: 2021-2-22 13:40
很好很实用,,感谢分享!
作者: se7ens    时间: 2021-2-22 13:42
谢谢分享,可以提供下原理图或者接线方法吗
作者: worldlyguest    时间: 2021-2-22 16:04
有意思,学习学习了!:praise:
作者: jjbboox    时间: 2021-2-22 17:52
fryefryefrye 发表于 2021-2-21 11:59
你这样就不方便级联啦。 我早期还用Mega2560的单片机做过一个两块板子级联的,现在还挂在我家客厅的墙上呢 ...

这么大一个屏挂在家里,不会有光污染吗?
我就做了一个数码管的,亮度调到最小,老婆都说太亮了。:loveliness:
作者: monicalike    时间: 2021-2-22 19:53
楼主,想请教下,这LED板用几V几A的电源哈?NodeMcu的供电如何解决?
橙色的字如何显示,看到网上双色屏显示的好像是黄色不是橙色哈。
谢谢!
作者: fryefryefrye    时间: 2021-2-22 20:41
se7ens 发表于 2021-2-22 13:42
谢谢分享,可以提供下原理图或者接线方法吗

1楼里面有接线定义啊。 ESP8266上 标识的针脚  D0 到 D8, 直接和LED单元输入口的相应引脚焊接起来就行了。
另外给LED单元板的5v供电入口接上电源。
作者: fryefryefrye    时间: 2021-2-22 20:42
jjbboox 发表于 2021-2-22 17:52
这么大一个屏挂在家里,不会有光污染吗?
我就做了一个数码管的,亮度调到最小,老婆都说太亮了。:loveli ...

放客厅的,算是有光污染吧,基本上出来上厕所是不需要开灯了。

放在房间里的,ESP8266上还剩余了一个模拟输入接口,正好接了一个光线传感器。这样就可以亮度自动调整,而且,关灯之后,自动关屏。
作者: fryefryefrye    时间: 2021-2-22 20:46
monicalike 发表于 2021-2-22 19:53
楼主,想请教下,这LED板用几V几A的电源哈?NodeMcu的供电如何解决?
橙色的字如何显示,看到网上双色屏显 ...

5v供电,大概200毫安,NodeMCU和ESP8266 D1板子,就是一模一样的,只是一个大点,一个小点。
USB线插在NodeMCU上供电就行了。然后从NodeMCU上的5v引脚焊接一根供电线到LED板的供电5v引脚。
把R和G 红色和绿色两根线并接起来就是橙色(黄色)。我也不知道算什么颜色,就是30楼的那个颜色,自己看照片吧。
作者: monicalike    时间: 2021-2-23 11:46
fryefryefrye 发表于 2021-2-22 20:46
5v供电,大概200毫安,NodeMCU和ESP8266 D1板子,就是一模一样的,只是一个大点,一个小点。
USB线插在No ...

感谢楼主,就是觉得36楼的温度显示橙色很喜欢,想用这个颜色。红的实在太刺眼,绿的晚上比较阴森。没接触过这类硬件,但一直想要个自动对时的大屏钟。:lol:
作者: fryefryefrye    时间: 2021-2-23 12:15
monicalike 发表于 2021-2-23 11:46
感谢楼主,就是觉得36楼的温度显示橙色很喜欢,想用这个颜色。红的实在太刺眼,绿的晚上比较阴森。没接触 ...

36楼的屏是用“点阵”模块做的,30楼的屏是用“表贴”发光二极管做的。

两种屏幕淘宝都有的卖,用不同的关键字搜索就可以了。
作者: ljlun    时间: 2021-2-23 13:25
很久没玩单片机了,汇编用起来还是没C方便
作者: 虫行天下    时间: 2021-2-23 13:45
fryefryefrye 发表于 2021-2-23 12:15
36楼的屏是用“点阵”模块做的,30楼的屏是用“表贴”发光二极管做的。

两种屏幕淘宝都有的卖,用不同的 ...

双色点阵我有 论坛朋友只要10元一块 运费按实际收取
作者: whalerwu    时间: 2021-2-23 15:16
最近想弄个LED 显示屏 大家说说 要注意什么
作者: 猫抓刺    时间: 2021-2-23 16:41
原来就玩过了,只不过ping屏要小些,想挂时钟的地方没插座,最终吃灰了
作者: 虫行天下    时间: 2021-2-23 20:21
大家有喜欢这个屏的 可以在我淘宝店购买https://item.taobao.com/item.htm?ft=t&id=637915708910 拍完我改价格
作者: jpdd521    时间: 2021-2-24 16:57
提一个小意见,增加网页配置ntp源的页面,并且可以切换时区等功能,本坛有很多范例。
作者: fryefryefrye    时间: 2021-2-24 20:20
jpdd521 发表于 2021-2-24 16:57
提一个小意见,增加网页配置ntp源的页面,并且可以切换时区等功能,本坛有很多范例。 ...

打开网页之前也要先配wifi的用户名和密码,还不如直接在源文件里把所有的配置信息全部改好。一次性下载进去。

这个代码就是给会Arduino开发环境的人自己改的。
作者: 成哥哥哈    时间: 2021-2-25 08:05
真。大佬。。。
作者: 虫行天下    时间: 2021-2-25 11:05
这两天测试LED屏 有些个别死点的 不影响使用的 还有些有飞线的 只要6元一张 需要的可以去淘宝店购买
作者: 180066542    时间: 2021-2-25 15:05
红色放在家里有点太丑了,可以试试橙色,看起来会高大上很多
作者: ssn2    时间: 2021-2-26 13:42
fryefryefrye 发表于 2021-2-18 10:42
晕,这东西反正不可能脱离电线长期使用的,你们为啥这么关注功耗?

1万的充电宝,大概能用1天吧。大概2瓦 ...

这个很好了,拉磨大的LED屏主打不是功耗是方便和精度吧,楼主搞个电子表给大家,功耗很小的
作者: fryefryefrye    时间: 2021-2-26 13:56
ssn2 发表于 2021-2-26 13:42
这个很好了,拉磨大的LED屏主打不是功耗是方便和精度吧,楼主搞个电子表给大家,功耗很小的 ...

精度没问题,这个钟要求wifi一直连着的,时间实时同步,分秒不差。
作者: tjjtds1    时间: 2021-2-27 15:13
谢谢up主,帮顶一下。
作者: zenghl    时间: 2021-2-28 11:29
@楼主,整屏反白显示了,求助怎样改?

作者: fryefryefrye    时间: 2021-2-28 21:59
zenghl 发表于 2021-2-28 11:29
@楼主,整屏反白显示了,求助怎样改?

153,154 行,写入的数据反一下试试看呢。加个 ! 号。

  1.                 digitalWrite(R1,! ((u8g2.tile_buf_ptr[i%64+(row/8)*64]>>(row%8))&1));//发送上半屏
  2.                 digitalWrite(R2,! ((u8g2.tile_buf_ptr[i%64+(row/8)*64+128]>>(row%8))&1));//发送下半屏
复制代码

作者: lgspace    时间: 2021-3-1 17:15
这个好啊,赶紧收藏学习
作者: wturbot    时间: 2021-3-2 16:59
学习了,谢谢
作者: dalian    时间: 2021-3-2 22:26
不错,简单易用,非常适合上手。

作者: 社會忒墟僞    时间: 2021-3-6 14:42
楼主好   我想请教一下怎么实现8266获取天气显示到屏幕上面
作者: fryefryefrye    时间: 2021-3-6 22:25
社會忒墟僞 发表于 2021-3-6 14:42
楼主好   我想请教一下怎么实现8266获取天气显示到屏幕上面

我已经另发了一个帖子。

https://www.mydigit.cn/forum.php ... d=237853&extra=
作者: loadbxh    时间: 2021-3-7 08:56
fryefryefrye 发表于 2021-2-18 12:13
没必要  pool.ntp.org 是默认的linux系统用的同步服务器池,有足够量的服务器,根本不怕出问题。 ...

除非有人玩中间人MIMT
作者: loadbxh    时间: 2021-3-7 08:58
fryefryefrye 发表于 2021-2-18 14:23
不会停的,就算断网了,也是一直走,只不过依靠CPU晶振,精度可能会差点。

我这个项目,为了极简化,按 ...

何不加入一块2块钱的DS1306?或者再增加点成本用GOS授时?
作者: fryefryefrye    时间: 2021-3-7 21:15
loadbxh 发表于 2021-3-7 08:58
何不加入一块2块钱的DS1306?或者再增加点成本用GOS授时?

奥卡姆剃刀定律:如无必要,勿增实体。

另举一个例子,树莓派,单板计算机,也和我这个一样,没有类似DS1306的东西,完全靠网络同步时间,CPU运行计时。 如果真的断网的话,计时误差会比较大。
作者: 常睿    时间: 2021-3-9 15:23
真厉害,科技感满满
作者: 重庆老坛酸菜    时间: 2021-3-13 14:42
自己写代码吗?我反正看不懂!
作者: skywolflin    时间: 2021-3-18 13:57
显示效果很一般哦。
作者: 上官梦舞    时间: 2021-3-19 09:50
建议放在gitee上面,github时不时被封一下很头疼。
作者: fryefryefrye    时间: 2021-3-19 10:53
skywolflin 发表于 2021-3-18 13:57
显示效果很一般哦。

想要好的显示效果,首先要有艺术细胞,我是没有的。这个LED屏也不会有太好的效果的。

给你个提示,你可以用ESP8266或者ESP32,通过几个阻容原件,就可以产生VGA信号,驱动一个液晶显示器。
作者: duliwu    时间: 2021-3-19 22:41
期待您的更多分享~

作者: kindzhon    时间: 2021-3-22 09:44
//显示中文的方法  但是这个屏幕最多只能显示八个汉字。本身这个源文件,必须是UTF-8格式
        //u8g2_SetFont(&u8g2, u8g2_font_wqy16_t_gb2312);
        //u8g2_DrawUTF8(&u8g2, 0, 14, "好好学习");
        //u8g2_DrawUTF8(&u8g2, 0, 30, "天天向上");
这里被注释掉了,是不能正常使用吗?u8g2_font_wqy16_t_gb2312这个字库有318389字节,esp8266好像没有办法直接使用这个字库啊,编译总说.bss不够,这个楼主解决了吗?
作者: fryefryefrye    时间: 2021-3-22 10:55
kindzhon 发表于 2021-3-22 09:44
//显示中文的方法  但是这个屏幕最多只能显示八个汉字。本身这个源文件,必须是UTF-8格式
        //u8g2_S ...

能用啊。 检查你的设置呢。[attach]1113133[/attach]

作者: kindzhon    时间: 2021-3-22 20:45
fryefryefrye 发表于 2021-3-22 10:55
能用啊。 检查你的设置呢。

我是7.5寸的墨水屏,用的Gxepd2 ,u8g2 for GFX,就是不能用大于40K字库,总说8266的内存不够,非要ESP32才行。唉。
作者: fryefryefrye    时间: 2021-3-22 21:52
kindzhon 发表于 2021-3-22 20:45
我是7.5寸的墨水屏,用的Gxepd2 ,u8g2 for GFX,就是不能用大于40K字库,总说8266的内存不够,非要ESP32才 ...

不大懂。搞这类技术就是这样,知识太多了,没办法全部搞懂。
作者: 风影欣    时间: 2021-3-31 06:52
谢谢分享
作者: hthuangtao    时间: 2021-4-2 06:39
收藏了,感谢分享。谢谢。




欢迎光临 数码之家 (https://www.mydigit.cn/) Powered by Discuz! X3.4