数码之家

 找回密码
 立即注册
搜索
查看: 8216|回复: 19

ESP8266 驱动圆形60串WS2812全彩LED制作的模拟走时动画时钟

[复制链接]
发表于 2019-12-20 14:01:13 | 显示全部楼层 |阅读模式
本帖最后由 zengcym 于 2019-12-20 14:53 编辑

上一贴中介绍了使用ESP8266 安卓APP自定义控制WS2812B彩灯串
链接:ESP8266 安卓APP自定义控制WS2812B彩灯串

帖子中的圆形60串WS2812全彩LED可以拿来制作另一个新奇的另类时钟

该时钟链接到网络NTP服务器获取时间,间隔一定时间同步互联网时间,同时使用wifi热点配置wifi密码,方便使用。
效果图如下,在每分钟及小时整点时会有动态动画显示。



相关的工具,软件配置等可参考上贴。

硬件接线:



代码:

  1. // Based on code from https://github.com/umarsear/Esp8266_NeoPixel_clock
  2. // as described in https://www.instructables.com/id/NeoPixel-NTP-Clock-Using-ESP8266/

  3. #include <NtpClientLib.h>
  4. #include <ESP8266WiFi.h>         
  5. #include <DNSServer.h>            
  6. #include <ESP8266WebServer.h>     
  7. #include <WiFiManager.h>          //https://github.com/tzapu/WiFiManager WiFi Configuration Magic
  8. #include <Adafruit_NeoPixel.h>

  9. #define NUMPIXELS      60       // number of NeoPixel LEDs
  10. #define PIN            0        // digital pin on ESP8266 for the NeoPixel data line
  11. #define mirror_hands   0 //true     // In case the NeoPixel ring is wired anti-clockwise.

  12. #define minFrameMax 63
  13. #define hourFrameMax 60
  14. #define DELAY 50

  15. #define DAYBRIGHT 100
  16. #define DAYMID 20
  17. #define DAYLO 3

  18. #define NIGHTBRIGHT 20
  19. #define NIGHTMID 5
  20. #define NIGHTLO 2

  21. int bright = DAYBRIGHT;
  22. int mid = DAYMID;
  23. int lo = DAYLO;

  24. byte hour_hand, minute_hand, second_hand, previous_second;
  25. int minFrame=0;
  26. int hourFrame=0;
  27. byte hourPattern=1;
  28. byte minPattern=1;  

  29. int staticPattern[64] = {0,1,2,3,4,5,6,7,
  30.                          8,7,6,5,4,3,2,1,
  31.                          0,1,2,3,4,5,6,7,
  32.                          8,7,6,5,4,3,2,1,
  33.                          0,1,2,3,4,5,6,7,
  34.                          8,7,6,5,4,3,2,1,
  35.                          0,1,2,3,4,5,6,7,
  36.                          8,7,6,5,4,3,2,1};                        

  37. Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);



  38. void setup() {
  39.    Serial.begin(115200);
  40.    WiFiManager wifiManager; // wifi configuration wizard
  41.    wifiManager.autoConnect("NeoPixel_Clock", "secret"); // configuration for the access point, set your own secret.
  42.    Serial.println("WiFi Client connected!");
  43.    NTP.begin("ntp1.aliyun.com", 8, true); // get time from NTP server pool.
  44.    NTP.setInterval(63);
  45.    pixels.begin();
  46.    pixels.setBrightness(254);
  47. }



  48. // clear all the leds to off
  49. void clearHands() {
  50.    for (byte i=0; i<=NUMPIXELS;i++) {
  51.       pixels.setPixelColor(i,pixels.Color(0,0,0));
  52.    }

  53.    // set up static 'ticks' around face.
  54.    pixels.setPixelColor(0,pixels.Color(0,0,bright));    //blue
  55.    pixels.setPixelColor(30,pixels.Color(0,0,mid));
  56.    pixels.setPixelColor(15,pixels.Color(0,0,mid));
  57.    pixels.setPixelColor(45,pixels.Color(0,0,mid));

  58. /*  yellow
  59.    pixels.setPixelColor(0,pixels.Color(bright,bright,0));
  60.    pixels.setPixelColor(30,pixels.Color(mid,mid,0));
  61.    pixels.setPixelColor(15,pixels.Color(mid,mid,0));
  62.    pixels.setPixelColor(45,pixels.Color(mid,mid,0));
  63. */
  64.    
  65.    pixels.setPixelColor(5,pixels.Color(0,0,lo));
  66.    pixels.setPixelColor(10,pixels.Color(0,0,lo));
  67.    pixels.setPixelColor(20,pixels.Color(0,0,lo));
  68.    pixels.setPixelColor(25,pixels.Color(0,0,lo));
  69.    pixels.setPixelColor(35,pixels.Color(0,0,lo));
  70.    pixels.setPixelColor(40,pixels.Color(0,0,lo));
  71.    pixels.setPixelColor(50,pixels.Color(0,0,lo));
  72.    pixels.setPixelColor(55,pixels.Color(0,0,lo));

  73. }

  74. void animateStatics(int frame) {
  75.    for (int i =0; i<staticPattern[frame/2]; i++) {
  76.       pixels.setPixelColor(i,pixels.getPixelColor(i)+pixels.Color(0,0,mid));
  77.       pixels.setPixelColor(30+i,pixels.getPixelColor(30+i)+pixels.Color(0,0,mid));
  78.       pixels.setPixelColor(15+i,pixels.getPixelColor(15+i)+pixels.Color(0,0,mid));
  79.       pixels.setPixelColor((45+i)%60,pixels.getPixelColor((45+i)%60)+pixels.Color(0,0,mid));
  80.       pixels.setPixelColor((0-i+60)%60,pixels.getPixelColor((0-i+60)%60)+pixels.Color(0,0,mid));
  81.       pixels.setPixelColor(30-i,pixels.getPixelColor(30-i)+pixels.Color(0,0,mid));
  82.       pixels.setPixelColor(15-i,pixels.getPixelColor(15-i)+pixels.Color(0,0,mid));
  83.       pixels.setPixelColor(45-i,pixels.getPixelColor(45-i)+pixels.Color(0,0,mid));  
  84.    }
  85. }


  86. void drawHands(){
  87.    calcTime();
  88.    // show all the LED's, only the ones we have set with a color will be visible.
  89.    pixels.show();

  90.    // just a debug string, can be removed
  91.    Serial.printf("hour:%d (%d), minute:%d (%d) second:%d (%d)\n",hour(),hour_hand,minute(),minute_hand,second(),second_hand);
  92. }

  93. void calcTime() {
  94.    clearHands();
  95.    calcHour();
  96.    calcMinute();
  97.    calcSeconds();
  98. }

  99. /*
  100. void calcHour() {
  101.    pixels.setPixelColor(hour_hand,pixels.Color(bright,0,0));
  102.    pixels.setPixelColor((hour_hand+59)%60,pixels.Color(mid,0,0));
  103.    pixels.setPixelColor((hour_hand+1)%60,pixels.Color(mid,0,0));
  104. }

  105. void calcMinute() {   
  106.    // if hour and minute are the same led, use a different color to show that
  107.    pixels.setPixelColor(minute_hand,pixels.getPixelColor(minute_hand)+pixels.Color(0,bright,0));
  108. }

  109. void calcSeconds() {
  110.    // draw the second LED, using medium brightness white
  111.    pixels.setPixelColor(second_hand,pixels.Color(bright,bright,bright));
  112.    pixels.setPixelColor((second_hand+1)%60,pixels.getPixelColor((second_hand+1)%60)+pixels.Color(mid,mid,mid));
  113.    pixels.setPixelColor((second_hand+2)%60,pixels.getPixelColor((second_hand+2)%60)+pixels.Color(lo,lo,lo));
  114. }
  115. */

  116. void calcHour() {
  117.    pixels.setPixelColor(hour_hand,pixels.Color(0,bright,bright));  //rgb
  118. //  pixels.setPixelColor((hour_hand+59)%60,pixels.Color(mid,0,0));
  119. //   pixels.setPixelColor((hour_hand+1)%60,pixels.Color(mid,0,0));
  120. }

  121. void calcMinute() {   
  122.    // if hour and minute are the same led, use a different color to show that
  123.    pixels.setPixelColor(minute_hand,pixels.getPixelColor(minute_hand)+pixels.Color(bright,0,bright));
  124. }

  125. void calcSeconds() {
  126.    // draw the second LED, using medium brightness white
  127.    pixels.setPixelColor(second_hand,pixels.Color(bright,bright,bright));
  128. //   pixels.setPixelColor((second_hand+1)%60,pixels.getPixelColor((second_hand+1)%60)+pixels.Color(mid,mid,mid));
  129. //   pixels.setPixelColor((second_hand+2)%60,pixels.getPixelColor((second_hand+2)%60)+pixels.Color(lo,lo,lo));
  130. }

  131. void animateHour(int frame, byte pattern) {
  132.    Serial.printf("Animating for the hour change %d frame %d\n",hour(),frame);
  133.    calcHands();
  134.    clearHands();
  135.    calcMinute();
  136.    calcSeconds();

  137.    if (pattern == 4) {
  138.       calcHour();
  139.       calcMinute();
  140.       calcSeconds();
  141.       animateStatics(frame);
  142.       pixels.show();
  143.       return;
  144.    }

  145.    if (frame <= 30) {
  146.       int i=frame;
  147.       switch (pattern) {
  148.       case 1:
  149.          for (int j=0; j<i; j++) {
  150.             pixels.setPixelColor((hour_hand+j)%60,pixels.Color(bright,0,0));
  151.             pixels.setPixelColor((hour_hand+60-j)%60,pixels.Color(bright,0,0));
  152.          }
  153.          break;
  154.       case 2:
  155.          pixels.setPixelColor((hour_hand+i)%60,pixels.Color(bright,0,0));
  156.          pixels.setPixelColor((hour_hand+60-i)%60,pixels.Color(bright,0,0));
  157.          break;
  158.       case 3:
  159.          pixels.setPixelColor((hour_hand+i)%60,pixels.Color(bright,0,0));
  160.          pixels.setPixelColor((hour_hand+i+59)%60,pixels.Color(mid,0,0));
  161.          pixels.setPixelColor((hour_hand+i+1)%60,pixels.Color(mid,0,0));
  162.          break;
  163.       }
  164.    } else if (frame >30 && frame<=60) {
  165.       int i=minFrameMax-frame-3;
  166.       switch (pattern) {
  167.       case 1:  
  168.          for (int j=0; j<i; j++) {
  169.             pixels.setPixelColor((hour_hand+j)%60,pixels.Color(bright,0,0));
  170.             pixels.setPixelColor((hour_hand+60-j)%60,pixels.Color(bright,0,0));
  171.          }
  172.          break;
  173.       case 2:
  174.          pixels.setPixelColor((hour_hand+i)%60,pixels.Color(bright,0,0));
  175.          pixels.setPixelColor((hour_hand+60-i)%60,pixels.Color(bright,0,0));
  176.          break;
  177.       case 3:
  178.          pixels.setPixelColor((hour_hand+i)%60,pixels.Color(bright,0,0));
  179.          pixels.setPixelColor((hour_hand+i+59)%60,pixels.Color(mid,0,0));
  180.          pixels.setPixelColor((hour_hand+i+1)%60,pixels.Color(mid,0,0));
  181.          break;
  182.       }
  183.    }
  184.    pixels.show();
  185. }

  186. void animateMinute(int frame, byte pattern) {
  187.    Serial.printf("Animating for the minute change %d Frame %d pattern %d\n",minute(),frame, pattern);
  188.    calcHands();
  189.    clearHands();
  190.    calcHour();
  191.    calcSeconds();

  192.    if (pattern == 4) {
  193.       calcMinute();
  194.       animateStatics(frame);
  195.       pixels.show();
  196.       return;
  197.    }
  198.    
  199.    if (frame <= 30) {
  200.       int i=frame;
  201.       if (pattern == 1 || pattern == 3) {
  202.          pixels.setPixelColor((minute_hand+i)%60,pixels.getPixelColor((minute_hand+i)%60)+pixels.Color(0,bright,0));
  203.       }
  204.       if (pattern < 3) {
  205.          pixels.setPixelColor((minute_hand+60-i)%60,pixels.getPixelColor((minute_hand+60-i)%60)+pixels.Color(0,bright,0));
  206.       }
  207.       if (i>0) {
  208.          if (pattern == 1 || pattern == 3) {
  209.             pixels.setPixelColor((minute_hand+i+59)%60,pixels.getPixelColor((minute_hand+i+59)%60)+pixels.Color(0,mid,0));
  210.          }
  211.          if (pattern < 3) {
  212.             pixels.setPixelColor((minute_hand+61-i)%60,pixels.getPixelColor((minute_hand+61-i)%60)+pixels.Color(0,mid,0));   
  213.          }
  214.       }
  215.       if (i>1) {
  216.          if (pattern == 1 || pattern == 3) {
  217.             pixels.setPixelColor((minute_hand+i+58)%60,pixels.getPixelColor((minute_hand+i+58)%60)+pixels.Color(0,lo,0));
  218.          }
  219.          if (pattern < 3) {
  220.             pixels.setPixelColor((minute_hand+62-i)%60,pixels.getPixelColor((minute_hand+62-i)%60)+pixels.Color(0,lo,0));
  221.          }   
  222.       }
  223.    } else if (frame >30 && frame<=60) {
  224.       int i=minFrameMax-frame-3;
  225.       if (pattern == 1 || pattern == 3) {
  226.          pixels.setPixelColor((minute_hand+60-i)%60,pixels.getPixelColor((minute_hand+60-i)%60)+pixels.Color(0,bright,0));
  227.          pixels.setPixelColor((minute_hand+59-i)%60,pixels.getPixelColor((minute_hand+59-i)%60)+pixels.Color(0,mid,0));   
  228.          pixels.setPixelColor((minute_hand+58-i)%60,pixels.getPixelColor((minute_hand+58-i)%60)+pixels.Color(0,lo,0));   
  229.       }
  230.       if (pattern < 3) {
  231.          pixels.setPixelColor((minute_hand+i)%60,pixels.getPixelColor((minute_hand+i)%60)+pixels.Color(0,bright,0));
  232.          pixels.setPixelColor((minute_hand+i+1)%60,pixels.getPixelColor((minute_hand+i+1)%60)+pixels.Color(0,mid,0));
  233.          pixels.setPixelColor((minute_hand+i+2)%60,pixels.getPixelColor((minute_hand+i+2)%60)+pixels.Color(0,lo,0));
  234.       }
  235.    } else {
  236.       pixels.setPixelColor(minute_hand,pixels.getPixelColor(minute_hand)+pixels.Color(0,bright,0));
  237.       if (pattern == 1 || pattern == 3) {
  238.          pixels.setPixelColor((minute_hand+1)%60,pixels.getPixelColor((minute_hand+1)%60)+pixels.Color(0,lo,0));
  239.       }
  240.       if (pattern < 3) {
  241.          pixels.setPixelColor((minute_hand+59)%60,pixels.getPixelColor((minute_hand+59)%60)+pixels.Color(0,lo,0));   
  242.       }
  243.    }
  244.    pixels.show();
  245. }

  246. void calcHands() {
  247.   
  248.    byte hour_offset;
  249.   
  250.    minute_hand=minute();
  251.    if (minute_hand>=10) {
  252.       hour_offset=(minute_hand / 10)-1;
  253.    } else {
  254.       hour_offset=0;
  255.    }
  256.   
  257.    if (hour() >= 12) {
  258.       hour_hand = ((hour() - 12) * 5) + hour_offset;
  259.    }
  260.    else {
  261.       hour_hand = (hour() * 5) + hour_offset;
  262.    }
  263.    
  264.    if (mirror_hands) {
  265.       hour_hand=60-hour_hand;
  266.       minute_hand=60-minute_hand;
  267.       second_hand=(60-second());
  268.       if (second_hand==60) {
  269.          second_hand=0;
  270.       }
  271.       if (minute_hand==60) {
  272.          minute_hand=0;
  273.       }
  274.       if (hour_hand==60) {
  275.          hour_hand=0;
  276.       }
  277.    } else {
  278.       second_hand=second();
  279.    }

  280. }

  281. void loop() {
  282.    calcHands();

  283.    if (minute()==0 && second()<3 && hourFrame==0 ) {
  284.       hourFrame=hourFrameMax;
  285.       hourPattern=random(1,5);
  286.    } else if (second()==0 && minFrame==0) {
  287.       minFrame=minFrameMax;
  288.       minPattern=random(1,5);
  289.    }
  290.    if (hour()>=23 || hour()<=7) {
  291.       if (bright != NIGHTBRIGHT) {
  292.          bright = NIGHTBRIGHT;
  293.          mid = NIGHTMID;
  294.          lo = NIGHTLO;
  295.       }
  296.    } else if (bright == NIGHTBRIGHT) {
  297.       bright = DAYBRIGHT;
  298.       mid = DAYMID;
  299.       lo = DAYLO;   
  300.    }
  301.    delay(DELAY);
  302.   
  303.    if (hourFrame>0) {
  304.       animateHour(hourFrameMax-hourFrame, hourPattern);
  305.       hourFrame--;  
  306.    } else if (minFrame>0) {
  307.       animateMinute(minFrameMax-minFrame, minPattern);
  308.       minFrame--;  
  309.    } else if (second_hand!=previous_second) {
  310.       previous_second=second_hand;
  311.       drawHands();
  312.    }
  313. }
复制代码
相关说明:
1. 需要在上一贴的基础上再增加第三方库文件,可在库管理器中查找添加
NtpClientLib
Adafruit_NeoPixel
也可直接下载附件,解压到相关文件夹


2. 代码配置
  1. #define NUMPIXELS      60       // number of NeoPixel LEDs
  2. #define PIN            0        // digital pin on ESP8266 for the NeoPixel data line
  3. #define mirror_hands   0 //true     // In case the NeoPixel ring is wired anti-clockwise.
复制代码
#define NUMPIXELS      60, 设置LED数量60;
#define PIN            0, 设置驱动脚,使用gpio脚 0(D3);
#define mirror_hands   0 , 设置时钟逆时针或顺时针,这个和LED的接法相关,当发现时钟走时反向不对时可更改,值为0 或者 1;

  1.    wifiManager.autoConnect("NeoPixel_Clock", "secret"); // configuration for the access point, set your own secret.
复制代码
"NeoPixel_Clock" 引号内内容为屏配置wifi时热点名称,可任意配置里喜欢的名称。

  1.    NTP.begin("ntp1.aliyun.com", 8, true); // get time from NTP server pool.
  2.    NTP.setInterval(63);
  3.    pixels.begin();
  4.    pixels.setBrightness(254);
复制代码

NTP.begin("ntp1.aliyun.com", 8, true);  "ntp1.aliyun.com"为设置NTP服务器地址,可替换腾讯或国家授时中心等,这里使用的阿里的NTP服务器。第二个参数8,为时区设置,北京时间为8.
NTP.setInterval(63); NTP同步时间间隔,单位为秒,可以设置大些的值,比如24小时:24*60*60,同步后即断开链接,使用ESP8266内部计时器走时,间隔一定时间同步足以保证时间精度。
pixels.setBrightness(254);  设置亮度

  1.    pixels.setPixelColor(0,pixels.Color(0,0,bright));    //blue
  2.    pixels.setPixelColor(30,pixels.Color(0,0,mid));
  3.    pixels.setPixelColor(15,pixels.Color(0,0,mid));
  4.    pixels.setPixelColor(45,pixels.Color(0,0,mid));

  5. /*  yellow
  6.    pixels.setPixelColor(0,pixels.Color(bright,bright,0));
  7.    pixels.setPixelColor(30,pixels.Color(mid,mid,0));
  8.    pixels.setPixelColor(15,pixels.Color(mid,mid,0));
  9.    pixels.setPixelColor(45,pixels.Color(mid,mid,0));
  10. */
  11.    
  12.    pixels.setPixelColor(5,pixels.Color(0,0,lo));
  13.    pixels.setPixelColor(10,pixels.Color(0,0,lo));
  14.    pixels.setPixelColor(20,pixels.Color(0,0,lo));
  15.    pixels.setPixelColor(25,pixels.Color(0,0,lo));
  16.    pixels.setPixelColor(35,pixels.Color(0,0,lo));
  17.    pixels.setPixelColor(40,pixels.Color(0,0,lo));
  18.    pixels.setPixelColor(50,pixels.Color(0,0,lo));
  19.    pixels.setPixelColor(55,pixels.Color(0,0,lo));
复制代码
这段代码可以设置显示的钟盘几个基点的颜色和亮度。

  1. void calcHour() {
  2.    pixels.setPixelColor(hour_hand,pixels.Color(0,bright,bright));  //rgb
  3. //  pixels.setPixelColor((hour_hand+59)%60,pixels.Color(mid,0,0));
  4. //   pixels.setPixelColor((hour_hand+1)%60,pixels.Color(mid,0,0));
  5. }

  6. void calcMinute() {   
  7.    // if hour and minute are the same led, use a different color to show that
  8.    pixels.setPixelColor(minute_hand,pixels.getPixelColor(minute_hand)+pixels.Color(bright,0,bright));
  9. }

  10. void calcSeconds() {
  11.    // draw the second LED, using medium brightness white
  12.    pixels.setPixelColor(second_hand,pixels.Color(bright,bright,bright));
  13. //   pixels.setPixelColor((second_hand+1)%60,pixels.getPixelColor((second_hand+1)%60)+pixels.Color(mid,mid,mid));
  14. //   pixels.setPixelColor((second_hand+2)%60,pixels.getPixelColor((second_hand+2)%60)+pixels.Color(lo,lo,lo));
  15. }
复制代码
设置时,分,秒的颜色及亮度。

熟悉代码后可以根据自己的喜好调整各种显示颜色及亮度。

代码打包














本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 2家元 +70 收起 理由
慕名而来 + 20 優秀文章
家睦 + 50

查看全部打赏

发表于 2019-12-20 14:57:45 | 显示全部楼层
哈哈,不行,我分不清小时分秒:titter:
回复 支持 反对

使用道具 举报

发表于 2019-12-20 15:22:49 | 显示全部楼层
没有表针,看着好别扭啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-20 15:47:10 | 显示全部楼层
renpeng009 发表于 2019-12-20 15:22
没有表针,看着好别扭啊

可以创意一下,灯光向内,加导光带模拟指针。
回复 支持 反对

使用道具 举报

发表于 2019-12-20 17:37:49 | 显示全部楼层
zengcym 发表于 2019-12-20 15:47
可以创意一下,灯光向内,加导光带模拟指针。

这个可以有
回复 支持 反对

使用道具 举报

发表于 2019-12-22 00:34:50 | 显示全部楼层
本帖最后由 40560335 于 2019-12-22 00:39 编辑

也想玩玩8266,搞不懂各种8266都有什么不同,有8266、NodeMCU、还有个什么NodeMCU Lua、NodeMCU-32S Lua。。。:dizzy:
回复 支持 反对

使用道具 举报

发表于 2019-12-22 09:35:23 | 显示全部楼层
真正考验技术的时刻到了。
回复 支持 反对

使用道具 举报

发表于 2019-12-22 15:30:12 来自手机浏览器 | 显示全部楼层
不熟悉8266
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-23 09:45:09 | 显示全部楼层
40560335 发表于 2019-12-22 00:34
也想玩玩8266,搞不懂各种8266都有什么不同,有8266、NodeMCU、还有个什么NodeMCU Lua、NodeMCU-32S Lua。 ...

只要是ESP8266芯片的都差不多,无非就是集成开发板一些IO,或是转串口芯片,或者上传固件的方式差异,NodeMCU最方便
回复 支持 反对

使用道具 举报

发表于 2019-12-23 09:46:17 | 显示全部楼层
空闲了,可以玩玩
回复 支持 反对

使用道具 举报

发表于 2020-2-12 11:33:00 | 显示全部楼层
注意:NtpClientLib库不能用最新版的,编译不通过,尝试2.0版的可以
回复 支持 反对

使用道具 举报

发表于 2020-2-24 12:11:33 | 显示全部楼层
本帖最后由 sunnyquan 于 2020-2-24 12:19 编辑
zhihuaqiu 发表于 2020-2-12 11:33
注意:NtpClientLib库不能用最新版的,编译不通过,尝试2.0版的可以

换用2.0版本的还是编译不过,字面理解是缺TimeLib.h,去库文件夹里看果然没有,要怎么搞呢。。。:sweat:

"NtpClientLib.h" 对应多个库
In file included from D:\Documents\RGBclock\RGBclock.ino:5:0:

已使用: D:\Documents\Arduino\libraries\NtpClientLib
D:\Documents\Arduino\libraries\NtpClientLib/NtpClientLib.h:33:21: fatal error: TimeLib.h: No such file or directory
回复 支持 反对

使用道具 举报

发表于 2020-3-12 22:27:10 | 显示全部楼层
编译问题终于解决,来这儿回个贴,给其它有需要的人!
1 Arduino 8266服务包要安装2.5.2版本,装2.6.3版本有问题,编译不了;
2 库文件,需安装Adafruit_NeoPixel   ESPAsyncTCP-master   NtpClientLib   Time-master  WiFiManager-master这五个库
回复 支持 反对

使用道具 举报

发表于 2020-4-11 22:22:19 | 显示全部楼层
有视频效果吗  我看看  好看我也想做一个
回复 支持 反对

使用道具 举报

发表于 2020-4-16 18:39:47 来自手机浏览器 | 显示全部楼层
esp8266  Adafruit_NeoPixel pixels 控制ws2812 各种案例都不受控制
回复 支持 反对

使用道具 举报

发表于 2021-1-7 22:10:12 来自手机浏览器 | 显示全部楼层
老大,编译好的固件有吗?
回复 支持 反对

使用道具 举报

发表于 2022-2-11 15:51:52 | 显示全部楼层
请教老师:NtpClientLib编译总是不通过是什么原因?
回复 支持 反对

使用道具 举报

发表于 2022-2-11 16:49:28 | 显示全部楼层
sunnyquan 发表于 2020-3-12 22:27
编译问题终于解决,来这儿回个贴,给其它有需要的人!
1 Arduino 8266服务包要安装2.5.2版本,装2.6.3版本 ...

老师好:我这边遇到的问题是neopixel库文件中“RAM_ATTR void espShow”这句话是错误的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-26 05:37 , Processed in 0.124800 second(s), 10 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表