数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 3691|回复: 8

[Arduino] ESP8266 Arduino1637 时钟。求源码合并

[复制链接]
发表于 2019-8-28 19:13:44 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

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

x
本帖最后由 Never。 于 2019-8-30 15:47 编辑
  1. #include <ESP8266WiFi.h>
  2. #include <time.h>
  3. #include <TM1637Display.h>

  4. // WiFi Config
  5. #define WIFI_SSID     "YourSSID"
  6. #define WIFI_PASSWORD "yourPASSWORD"

  7. // NTP Config
  8. int timezone = 7 * 3600;
  9. int dst = 0;

  10. // Module connection pins (Digital Pins)
  11. #define CLK D5
  12. #define DIO D7
  13. #define AmPm D1
  14. #define TEST_DELAY   2000

  15. const uint8_t SEG_CONN[] = {
  16.   SEG_A | SEG_D | SEG_E | SEG_F,                   // C
  17.   SEG_C | SEG_D | SEG_E | SEG_G,                   // o
  18.   SEG_C | SEG_E | SEG_G,                           // n
  19.   SEG_C | SEG_E | SEG_G                            // n
  20.   };

  21. const uint8_t SEG_PASS[] = {
  22.   SEG_A | SEG_B | SEG_E | SEG_F | SEG_G,           // P
  23.   SEG_A | SEG_B | SEG_C | SEG_E | SEG_F | SEG_G,   // A
  24.   SEG_A | SEG_C | SEG_D | SEG_F | SEG_G,           // S
  25.   SEG_A | SEG_C | SEG_D | SEG_F | SEG_G            // S
  26.   };  

  27. const uint8_t SEG_FAIL[] = {
  28.   SEG_A | SEG_E | SEG_F | SEG_G,                   // F
  29.   SEG_A | SEG_B | SEG_C | SEG_E | SEG_F | SEG_G,   // A
  30.   SEG_F | SEG_G,                                   // I
  31.   SEG_D | SEG_F | SEG_G                            // L
  32.   };   

  33. const uint8_t SEG_DONE[] = {
  34.   SEG_B | SEG_C | SEG_D | SEG_E | SEG_G,           // d
  35.   SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F,   // O
  36.   SEG_C | SEG_E | SEG_G,                           // n
  37.   SEG_A | SEG_D | SEG_E | SEG_F | SEG_G            // E
  38.   };  

  39. TM1637Display display(CLK, DIO);

  40. String lastTimeStr;
  41. unsigned long lastShowColon = 0;
  42. bool showColon = false;
  43. bool hourcheck=false;
  44.   
  45. void setup()
  46. {
  47.   pinMode(AmPm, INPUT);
  48.   display.setBrightness(0x0e);
  49.   
  50.   // Connect WiFi
  51.   WiFi.mode(WIFI_STA);
  52.   WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  53.   display.setSegments(SEG_CONN);

  54.   while (WiFi.status() != WL_CONNECTED)
  55.   {
  56.     delay(500);
  57.   }
  58.   display.setSegments(SEG_PASS);
  59.   delay(1000);

  60.   // Get time from NTP server
  61.   configTime(timezone, dst, "ntp.ku.ac.th", "fw.eng.ku.ac.th", "ilm.live.rmutt.ac.th");
  62.   while (!time(nullptr))
  63.   {
  64.     delay(500);
  65.   }
  66.   display.setSegments(SEG_DONE);
  67.     delay(1000);
  68. }

  69. void loop()
  70. {
  71.   while (WiFi.status() != WL_CONNECTED)
  72.   {
  73.     connect_wifi();
  74.   }
  75.   uint8_t hour;
  76.   bool hourcheck;
  77.   time_t now = time(nullptr);
  78.   struct tm* p_tm = localtime(&now);
  79.   
  80.   hour=p_tm->tm_hour;
  81.   if(digitalRead(AmPm)==LOW)
  82.   {
  83.     if(hour>12)
  84.     {
  85.       hour=hour-12;  
  86.     }
  87.   }
  88.   if(hour<1)
  89.   {
  90.     hourcheck=true;
  91.   }
  92.   else
  93.   {
  94.     hourcheck=false;
  95.   }
  96.   if((p_tm->tm_sec % 2) == 0)
  97.   {
  98.     display.showNumberDecEx(hour*100+p_tm->tm_min,0x40 ,hourcheck);
  99.   }
  100.   else
  101.   {
  102.     display.showNumberDecEx(hour*100+p_tm->tm_min,0x00, hourcheck );
  103.   }
  104.   
  105. }
  106. void connect_wifi()
  107. {
  108.    WiFi.mode(WIFI_STA);
  109.   WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  110.   display.setSegments(SEG_CONN);
  111. }
复制代码
能和下面开关源码合并吗 ? 能远程开关同时显示时间,或者和别的天猫可以连接控制的也行
  1. /*
  2.   注意 :Arduino IDE版本请使用1.6.5-1.8.2
  3.   ESP8266模块在接Arduino之前请确定透传稳定性,在串口查看ESP8266是否能多次收到WELCOME TO BIGIOT,
  4.   能多次收到说明透传稳定且能自动重连。
  5.   时间:2018.12.4
  6.   作者:www.bigiot.net
  7. */

  8. #include <aJSON.h>
  9. //=============  此处必须修该============
  10. String DEVICEID = "11111"; // 你的设备ID   ==
  11. String  APIKEY = "11111111111"; //设备密码=
  12. //=======================================

  13. const int LED = 4;// LED正极连接针脚4
  14. unsigned long lastCheckStatusTime = 0; //记录上次报到时间
  15. const unsigned long postingInterval = 40000; // 每隔40秒向服务器报到一次
  16. unsigned long checkoutTime = 0;//登出时间

  17. void setup() {
  18.   pinMode(LED, OUTPUT);
  19.   Serial.begin(115200);
  20.   delay(5000);//等一会儿ESP8266
  21. }
  22. void loop() {
  23.   //每一定时间查询一次设备在线状态,同时替代心跳
  24.   if (millis() - lastCheckStatusTime > postingInterval) {
  25.     checkStatus();
  26.   }
  27.   //checkout 50ms 后 checkin
  28.   if ( checkoutTime != 0 && millis() - checkoutTime > 50 ) {
  29.     checkIn();
  30.     checkoutTime = 0;
  31.   }
  32.   //读取串口信息
  33.   while (Serial.available()) {
  34.     String inputString = Serial.readStringUntil('\n');
  35.     //检测json数据是否完整
  36.     int jsonBeginAt = inputString.indexOf("{");
  37.     int jsonEndAt = inputString.lastIndexOf("}");
  38.     if (jsonBeginAt != -1 && jsonEndAt != -1) {
  39.       //净化json数据
  40.       inputString = inputString.substring(jsonBeginAt, jsonEndAt + 1);
  41.       int len = inputString.length() + 1;
  42.       char jsonString[len];
  43.       inputString.toCharArray(jsonString, len);
  44.       aJsonObject *msg = aJson.parse(jsonString);
  45.       processMessage(msg);
  46.       aJson.deleteItem(msg);
  47.     }
  48.   }
  49. }
  50. //设备登录
  51. //{"M":"checkin","ID":"xx1","K":"xx2"}\n
  52. void checkIn() {
  53.   Serial.print("{"M":"checkin","ID":"");
  54.   Serial.print(DEVICEID);
  55.   Serial.print("","K":"");
  56.   Serial.print(APIKEY);
  57.   Serial.print(""}\r\n");
  58. }
  59. //处理网络接收到到指令,执行相关动作
  60. void processMessage(aJsonObject *msg) {
  61.   aJsonObject* method = aJson.getObjectItem(msg, "M");
  62.   if (!method) {
  63.     return;
  64.   }
  65.   String M = method->valuestring;
  66.   if (M == "WELCOME TO BIGIOT") {
  67.     checkOut();
  68.     checkoutTime = millis();
  69.     return;
  70.   }
  71.   if (M == "connected") {
  72.     checkIn();
  73.   }
  74.   if (M == "say") {
  75.     aJsonObject* content = aJson.getObjectItem(msg, "C");
  76.     aJsonObject* client_id = aJson.getObjectItem(msg, "ID");
  77.     String C = content->valuestring;
  78.     String F_C_ID = client_id->valuestring;
  79.     if (C == "play") {
  80.       digitalWrite(LED, HIGH);
  81.       say(F_C_ID, "LED on!");
  82.     }
  83.     if (C == "stop") {
  84.       digitalWrite(LED, LOW);
  85.       say(F_C_ID, "LED off!");
  86.     }
  87.   }
  88. }

  89. //发送say指令,用于设备与用户、设备与设备间通讯
  90. //{"M":"say","ID":"xx1","C":"xx2","SIGN":"xx3"}\n
  91. void say(String ID, String c) {
  92.   Serial.print("{"M":"say","ID":"");
  93.   Serial.print(ID);
  94.   Serial.print("","C":"");
  95.   Serial.print(c);
  96.   Serial.print(""}\r\n");
  97. }
  98. //强制设备下线,用消除设备掉线延时
  99. //{"M":"checkout","ID":"xx1","K":"xx2"}\n
  100. void checkOut() {
  101.   Serial.print("{"M":"checkout","ID":"");
  102.   Serial.print(DEVICEID);
  103.   Serial.print("","K":"");
  104.   Serial.print(APIKEY);
  105.   Serial.print(""}\n");
  106. }
  107. //查询设备在线状态
  108. //{"M":"status"}\n
  109. void checkStatus() {
  110.   Serial.print("{"M":"status"}\n");
  111.   lastCheckStatusTime = millis();
  112. }
复制代码

发表于 2019-8-28 20:56:05 | 显示全部楼层
源码都有了,还不会么。。。
回复 支持 反对

使用道具 举报

发表于 2019-8-28 22:17:11 来自手机浏览器 | 显示全部楼层
没什么不能的,只是懒得费神
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-29 09:44:13 | 显示全部楼层
水表君 发表于 2019-8-28 20:56
源码都有了,还不会么。。。

这真心不会,就是跟风买了模块,买回来傻眼了,不会编程,请教做时钟的大神也没帮助。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-29 09:49:48 | 显示全部楼层
ploestar 发表于 2019-8-28 22:17
没什么不能的,只是懒得费神

实在不会来求助大神把源码合并一下,多个diy的乐趣吧
回复 支持 反对

使用道具 举报

发表于 2019-8-29 11:03:35 | 显示全部楼层
第一个是ESP8266自己跑的,第二个是arduino通过ESP连接BIGIOT
不同的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-29 16:20:03 | 显示全部楼层
bg4rff 发表于 2019-8-29 11:03
第一个是ESP8266自己跑的,第二个是arduino通过ESP连接BIGIOT
不同的

想让8266可以做个开关加时钟,单独做一样感觉屈才了,能时钟和开关合并么,能联网控制就行
回复 支持 反对

使用道具 举报

发表于 2019-8-30 22:20:58 | 显示全部楼层
理论是没问题, 但是你又控制,又当时钟,不是很不方便么。

第二个代码 本来就可以和天猫绑定,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-11 14:54:06 | 显示全部楼层
zipcord 发表于 2019-8-30 22:20
理论是没问题, 但是你又控制,又当时钟,不是很不方便么。

第二个代码 本来就可以和天猫绑定, ...

开关8266io也用不完况且开关一直通电,想加个钟,看时间,没网的话就不显示时间了 也能看有么有网,
回复 支持 反对

使用道具 举报

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

本版积分规则

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

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-16 12:34 , Processed in 0.109200 second(s), 10 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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