WiFi 时钟+本地温度

[ WiFi 时钟 ]         
[ WiFi 天气时钟 ]         
[ WiFi 时钟+本地温度 ]     

夏天到了,显示器上放一个时钟,顺便实时测量本地室温,看看空调工作是否正常也算是个实用制作。 

用到零件共 4 个:

        400孔面包板 ( 大号830孔的也行,不过粘在显示器上面显的有些突兀)

        NodeMCU     ( 其他的ESP8266应该也差不多,需要注意引脚排列 )

        0.96' OLED   ( SSD1306 )

        AHT20传感器  ( 手里有AHT10也可以,程序一样的 )

  

 上面已经给出连接示意图,仔细点看应该没什么难度。

不废话,直接上代码:( 修改SSID即可 )

#include <U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(/*旋转0123*/U8G2_R0, /*reset=255*/U8X8_PIN_NONE, /*SCL*/D1, /*SDA*/D2);   #include <Adafruit_AHT10.h>  
Adafruit_AHT10 aht; #include <TimeLib.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <NTPClient.h>
WiFiUDP   Udp;
NTPClient timeClient(Udp, "cn.pool.ntp.org");   // 哪个服务器稳定就用哪个,比如还可以选 ntp1.aliyun.com
time_t    currentDisplayTime;
String    Sync_status;
int       Sync_status_display_seconds;
String    HH;
String    MM;
String    Sec;  //SS变量名已被占用
String    t;
String    h;void setup(){  aht.begin();u8g2.begin();u8g2.enableUTF8Print();                       // 启用中文显示,但库不全  u8g2.setContrast(0);u8g2.setFont(u8g2_font_ncenB14_tr);   u8g2.clearBuffer();     u8g2.setCursor( 0,32); u8g2.print("WiFi");  u8g2.sendBuffer();  WiFi.begin("SSID", "your_password");while(WiFi.status()!= WL_CONNECTED){delay(1000);u8g2.print(".");u8g2.sendBuffer();}Udp.begin(8888);                              // UDP 侦听端口,任意指定   u8g2.setCursor( 0,60); u8g2.print("Connected!");  u8g2.sendBuffer();delay(2000);setSyncProvider(getNtpTime);setSyncInterval(60);                          // NTP网络同步间隔时间,单位秒
} void loop(){if (now()!= currentDisplayTime){ currentDisplayTime = now();prepare_data();refresh_OLED_display();}
}void prepare_data(){sensors_event_t  aht_humidity, aht_temp;      // 定义两个结构体aht.getEvent(&aht_humidity, &aht_temp);       // 采集一次传感器,写入两个结构体t = String(aht_temp.temperature,1);h = String(aht_humidity.relative_humidity,0);int years = year(),months = month(),days = day(),hours = hour(),minutes = minute(),seconds = second(),weekdays = weekday();HH="";MM="";Sec="";if (hours   < 10)HH += 0; HH += hours;if (minutes < 10)MM += 0; MM += minutes;if (seconds < 10)Sec += 0; Sec += seconds;  
}void refresh_OLED_display(){u8g2.clearBuffer();   u8g2.setCursor( 0,41); u8g2.setFont(u8g2_font_logisoso42_tr); u8g2.print(HH+":"+MM);u8g2.setCursor(54,29); u8g2.setFont(u8g2_font_unifont_t_chinese2);u8g2.print(Sec); u8g2.drawHLine(0,43,128);  if(Sync_status_display_seconds > 0){Sync_status_display_seconds --;u8g2.setCursor(12,62); u8g2.setFont(u8g2_font_ncenB14_tr); u8g2.print(Sync_status);       }   else{u8g2.setCursor( 60,64); u8g2.print("C");   u8g2.setCursor(110,64); u8g2.print("%"); u8g2.setCursor( 10,64); u8g2.setFont(u8g2_font_ncenB18_tr);u8g2.print(t);   u8g2.setCursor( 80,64); u8g2.setFont(u8g2_font_ncenB18_tr);u8g2.print(h);      }u8g2.sendBuffer();
}time_t getNtpTime(){Sync_status_display_seconds = 5;if(timeClient.update()) Sync_status="Sync OK!";else Sync_status="Sync Failed!";return(timeClient.getEpochTime()+28800);   // GMT+8, 3600*8
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/14653.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ系列(29)--RabbitMQ搭建Shovel

前言&#xff1a; Federation具备的数据转发功能类似&#xff0c;Shovel能够可靠、持续地从一个Broker中的队列(作为源端&#xff0c;即source)拉取数据并转发至另一个Broker中的交换器(作为目的端&#xff0c;即destination)。作为源端的队列和作为目的端的交换器可以同时位于…

windows设置右键一键打开文件的配置

在安装软件时一般通过msi或者exe安装&#xff0c;这是一般会有提示绑定到鼠标右键&#xff0c;如果没有勾选则安装后就无法通过右键打开&#xff0c;这是需要把文件拖到快捷方式上面才可以使用该软件打开。 另外如何下载的是zip的压缩包源码格式根本没有设置的选项&#xff0c…

MySQL数据库——表操作的练习

题目一 &#xff08;1&#xff09; mysql> create database Market; &#xff08;2&#xff09; mysql> use Market; Database changed mysql> create table customers(->c_num INT(11) primary key auto_increment,->c_name varchar(50),->c_contact varcha…

45. 跳跃游戏 II (贪心)

题目链接&#xff1a;力扣 解题思路&#xff1a;贪心&#xff0c;尽可能地找到下一跳能够跳到的最远距离&#xff0c;这样到达终点时&#xff0c;所需跳跃次数最少 以nums [2,3,1,1,4,2]为例&#xff1a; 以当前位置begin作为起跳点&#xff0c;能够跳跃的最远距离为m&#…

B067-基础环境-抽取Basegit

目录 抽取base抽取domain和querymapper接口抽取service抽取 Git优点&#xff1a;Git安装及操作Git Bash命令行操作图形化客户端TortoiseGit操作Git集成Idea操作idea会把workspace作为本地仓库gitee操作idea解决代码冲突 抽取base 抽取domain和query domain&#xff1a;所有实体…

抖音seo矩阵源码*开发搭建*代码打包部署(开源)分享

1一、 抖音seo矩阵源码开发搭建&#xff08;支持二开&#xff09;概述 抖音SEO矩阵指的是一系列通过搜索引擎优化&#xff08;SEO&#xff09;技术和策略来提升抖音账号在搜索结果中排名的方法和工具。在抖音上&#xff0c;用户可以通过搜索关键词来查找与其相关的视频和账号…

Oracle-奇怪的expdp备份报错LPX-00217

问题背景: 接用户报障&#xff0c;数据库每天晚上正常的expdp备份&#xff0c;从2天前开始出现奇怪的备份报错LPX-00217: invalid character 3 问题分析: 检查expdp备份的日志&#xff0c;从2天前晚上开始的备份均出现LPX-00217: invalid character 3的报错&#xff0c;报错均…

两个好用到爆的Python模块,建议收藏!

在日常开发工作中&#xff0c;经常会遇到这样的一个问题&#xff1a;要对数据中的某个字段进行匹配&#xff0c;但这个字段有可能会有微小的差异。比如同样是招聘岗位的数据&#xff0c;里面省份一栏有的写“广西”&#xff0c;有的写“广西壮族自治区”&#xff0c;甚至还有写…

如何修复ssh漏洞进行版本升级

目录 一、ssh低版本漏洞信息 OpenSSH GSSAPI 处理远端代码执行漏洞 OpenSSH GSSAPI认证终止信息泄露漏洞 OpenSSH X连接会话劫持漏洞 二、升级ssh版本进行修复漏洞 第一步 安装Telnet服务 第二步 重启服务 第三步 安装依赖环境 第四步 备份ssh老版本文件 第五步 导入…

【动态规划上分复盘】下降路径最小和|礼物的最大价值

欢迎 前言一、动态规划五部曲二、下降路径最小和思路&#xff1a;动态规划解法具体代码如下 三、礼物的最大价值思路&#xff1a;动态规划具体代码如下: 总结 前言 本文主要讲述动态规划思路的下降路径最小和以及礼物的最大价值两道题。 一、动态规划五部曲 1.确定状态表示&a…

python_day3_str

字符串str 按索引下标查找 str Hi, world, follow, admin print(str[0]) print(str[-1])index() str Hi, world, follow, admin print(str.index(world)) #首字母下标 print(str.index(w))字符串.replace&#xff08;字符串1&#xff0c;字符串2&#xff09;&#xff1a;…

【Elasticsearch】初识elasticsearch

目录 初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 1.1.2.ELK技术栈 1.1.3.elasticsearch和lucene 1.1.4.为什么不是其他搜索技术&#xff1f; 1.1.5.总结 1.2.倒排索引 1.2.1.正向索引 1.2.2.倒排索引 1.2.3.正向和倒排 1.3.es的一些概念 1.3.1.文档…