极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: cityant

基于ESP8266自动校时时钟

  [复制链接]
 楼主| 发表于 2019-7-20 15:03:13 | 显示全部楼层
zyii 发表于 2019-7-18 21:35
您好,请问您能帮我看看程序吗,我也做的是时钟 我想让他整点报时,用别的芯片或者nodered实现,但是我不会 ...

#include <ESP8266WiFi.h>

unsigned long lastupdate = millis();    //刷新标志


void setup() {
  Serial.begin(115200);
  Serial.println();
  WiFi.mode(WIFI_STA);
  WiFi.begin("GZY", "88888888");
  while (!WiFi.isConnected())
  {
    delay(100);
  }
  Serial.println(WiFi.localIP());
  configTime(8*3600, 0, "time.windows.com");
  //         时区偏移+8,夏令时,时间服务器
}

void alarm(){
//beep;

}

void loop() {

if (millis() - lastupdaate >= 1000){

  time_t now = time(0);     //获取当前绝对时间,从1970-1-1到现在的秒数
  Serial.print(ctime(&now));//将秒数转成字符串表示的时间
  }

if (minute(time(0)) == 0 && second(time(0)) == 0) alarm(); //只会响一秒,简单的嘀声够了;如果需要更长时间或一次触发,可使用一个变量进行标记处理;

  //delay(1000);
}
回复 支持 反对

使用道具 举报

发表于 2019-7-20 21:20:23 | 显示全部楼层
cityant 发表于 2019-7-15 14:26
你这个逻辑中如果lcddirection和lcdstatus都为false时,屏幕是关闭的。把lcdstatus变量定义时初始化为tru ...

大师求指导一下人体传感器加一个延时函数 收到低电平就延时N分钟然后再熄灭屏幕在此期间如果有高电平就重新计时
回复 支持 反对

使用道具 举报

发表于 2019-7-24 21:25:25 | 显示全部楼层
cityant 发表于 2019-7-20 15:03
#include

unsigned long lastupdate = millis();    //刷新标志

人呢????
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-27 13:38:25 | 显示全部楼层
78678967 发表于 2019-7-20 21:20
大师求指导一下人体传感器加一个延时函数 收到低电平就延时N分钟然后再熄灭屏幕在此期间如果有高电平就重 ...

自己尝试写一下啊,之前主循环中检测到高电平直接写lcdstatus值,类似151楼这样,加一个时间判断,当小于某一时间时进去减一下,然后再给lcdstatus变量赋值。
多动手试试,你这等的时间搜一搜例子早就弄出来了。
回复 支持 反对

使用道具 举报

发表于 2019-7-27 20:40:44 | 显示全部楼层
自己尝试过都失败了
不知道该怎么写
求指导指导一下 !lcdstatus是人体传感器的触发函数
void Display() {
  int num = 0;
  if ((!lcddirection) && (!lcdstatus)){
    for(int address=3; address>=0; address--){    //逐个扫描四个LED屏
    for(int col=0; col<8; col++) {    //每块LED屏逐列扫描;
      lc.setIntensity(address, lcdlight);   //设定Led亮度
      lc.setColumn(address, col, disp[num]);    //使用列方式显示;
      lc.shutdown(address,true);   //LCD显示状态,true点亮,false关闭
      num ++;
    }
    }
  }
  else if((lcddirection) && (!lcdstatus)){//翻转
    for(int address=0; address<=3; address++){    //逐个扫描四个LED屏
    for(int col=7; col>=0; col--) {    //每块LED屏逐列扫描;
      lc.setIntensity(address, lcdlight);   //设定Led亮度
      lc.setColumn(address, col, reverse_bit(disp[num]));    //使用列方式显示;
      lc.shutdown(address,true);   //LCD显示状态,true点亮,false关闭
      num ++;
    }
    }
  }
else if((lcddirection) && (lcdstatus)){
    for(int address=0; address<=3; address++){    //逐个扫描四个LED屏
    for(int col=7; col>=0; col--) {    //每块LED屏逐列扫描;
      lc.setIntensity(address, lcdlight);   //设定Led亮度
             delay(1);
      lc.setColumn(address, col, reverse_bit(disp[num]));    //使用列方式显示;
      lc.shutdown(address,false);   //LCD显示状态,true点亮,false关闭
      num ++;
    }
    }
  }
else{//翻转
     for(int address=3; address>=0; address--){    //逐个扫描四个LED屏
    for(int col=0; col<8; col++) {    //每块LED屏逐列扫描;
      lc.setIntensity(address, lcdlight);   //设定Led亮度
             delay(1);
      lc.setColumn(address, col, disp[num]);    //使用列方式显示;
      lc.shutdown(address,false);   //LCD显示状态,true点亮,false关闭
      num ++;
    }
    }
  }
}
回复 支持 反对

使用道具 举报

发表于 2019-7-28 20:22:51 来自手机 | 显示全部楼层
78678967 发表于 2019-7-27 20:40
自己尝试过都失败了
不知道该怎么写
求指导指导一下 !lcdstatus是人体传感器的触发函数

看到你的显示代码突然灵感来了谢谢大神
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-28 21:29:21 | 显示全部楼层
78678967 发表于 2019-7-27 20:40
自己尝试过都失败了
不知道该怎么写
求指导指导一下 !lcdstatus是人体传感器的触发函数

void loop() {

        ...

        lcdstatus = digitalRead(IRPIN); //IRPIN为你的人体红外传感器的引脚
       
        ...
}

void loop() {

        ...

       
        if((digitalRead(IRPIN)) || (millis() - lcddelaytime <= 10000)){//延迟10秒,需要在代码开始位置预先定义全局变量unsigned long lcddelaytime = millis()
                lcdstatus = true;
                if (digitalRead(IRPIN)) lcddelaytime = millis(); //高电平重置计时
        }
        else{
                lcdstatus = false;
        }
       
        ...
}
回复 支持 反对

使用道具 举报

发表于 2019-8-3 19:27:48 来自手机 | 显示全部楼层
本帖最后由 78678967 于 2019-8-3 21:36 编辑

大神怎么最近没更新了
回复 支持 反对

使用道具 举报

发表于 2019-8-13 20:12:57 | 显示全部楼层
楼主不更啦不教教其他授时方法
回复 支持 反对

使用道具 举报

发表于 2019-8-31 08:59:29 | 显示全部楼层
大神不见了?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-31 15:59:10 | 显示全部楼层
前一段有些忙,就没怎么来。这个时钟代码改的也差不多了吧,最近好像没有啥需要动的了。
回复 支持 反对

使用道具 举报

发表于 2019-8-31 20:30:46 来自手机 | 显示全部楼层
电路板原理图没人分享
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-1 18:08:57 | 显示全部楼层
78678967 发表于 2019-8-31 20:30
电路板原理图没人分享

最终版的电路原理图和pcb,基本不会改了。还有一个问题就是电源散热比较大,导致板子有温升,温度传感器直接焊在板子上温度会飙高,可使用导线引出固定在离电源远点儿的地方。
SCH_201909.png
pcb_201909.png

pcb工程文件
NtpClock_all_201909.rar (1017.45 KB, 下载次数: 3)
回复 支持 反对

使用道具 举报

发表于 2019-9-1 20:42:21 | 显示全部楼层
cityant 发表于 2019-9-1 18:08
最终版的电路原理图和pcb,基本不会改了。还有一个问题就是电源散热比较大,导致板子有温升,温度传感器 ...

这个原理图设计得合不合理?
Schematic_WiFi_Sheet-1_20190901204030.png
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2019-9-19 15:13 , Processed in 0.052414 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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