数码之家

 找回密码
 立即注册
搜索
查看: 4919|回复: 27

[家电] 家用彩屏智能时钟与温湿度表DIY

[复制链接]
发表于 2020-8-6 10:25:35 | 显示全部楼层 |阅读模式

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

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

x
最近坛子里表哥的帖子比较火,于是想蹭一下热点,做一个自动对时的时钟
刚好手上有个ESP8266开发板,加一块OLED显示屏(I2C接口),应该很容易

1 开发环境
之前测试时ESP8266是用LUA脚本开发的,因为LUA用得很少,写起来很难受,
而且脚本语言,你懂的,效率低,虽然用起来可能感觉不到
网上看到Arduino IDE支持ESP8266开发,于是建好了环境,试了下,C++比LUA顺眼多了
不过Arduino IDE不支持自动代码完成,也不能跳转到变量或函数的定义,这样读写代码很不方便
最终,选择了VSCODE+PLATFORMIO插件 的方式
传送门:
[url=https://blog.csdn.net/gengyuchao/article/details/84928771]NodeMCU开发环境搭建之PlatformIO (ESP8266)[/url]

环境基本建好了,就需要下载相关的库了,没必要重复造轮子
很多常用库可以在PlatformIO中找到,找到后安装一下就可以引用了
    关于WIFI的连接,基础环境自带,不需要另外找库,因为是自用,SSID和密码固定在代码里就行了
    如果想商业化,就要考虑配置的问题,可能需要相关的库支持
    再就是显示屏的库,OLED用的主控是SD1306 128*64,选了u8g2,支持模拟spi i2c 或硬件的spi i2c,带中文字库
    剩下就是时间和NTP对时,可用的库有NTPClient,NTPClientlib,或者用UDP协议自己写也行

2 撸代码,调试
代码略....
后面再放代码

3 初版完成
可惜初版的成品没拍照,已经没有了。比较简陋,屏幕太小,0.96寸的,显示了时分秒 年月日 和 星期

用了几天后,自己总结了一下:
    1 可以自动对时,永远不用人为的干预
    2 屏幕太小,所以字也小,远了看不清,如果老花眼体验更差
    3 这个OLED是单色的,只能显示黑和白,效果不理想
    3 功能太少,没有温度、湿度、农历等显示
总而言之,优点太少,缺点太多,看来还需要继续努力了

打赏

参与人数 3家元 +38 收起 理由
8139 + 18 謝謝分享
hongo + 10 原創內容
prc3 + 10 優秀文章

查看全部打赏

 楼主| 发表于 2020-8-6 10:51:56 | 显示全部楼层
..........................................续.......................................

现在看来,主要受制于屏幕大小,导致了其它的功能的实现,所以先解决屏幕的问题
某宝上找了好久,找到了一款2.8寸的TFT屏,有SPI接口,当然也有并口的,但一是ESP8266IO口不够,
二是太多线了接线和调试很麻烦,三是屏小刷新速度够,没必要用并口
下单后,第2天就到了,然后找卖家要了技术资料

1 新屏的接线
旧屏只用了4根线,新屏虽然用的SPI,但多了一些其它的线,一共有8根线与ESP8266相连(省掉MISO就是7根线):
     3.3V电源   地    SPI时钟    SPI-MISO(这个可以省略)    SPI-MOSI      片选信号     复位信号    数据命令选择信号
屏上还有4个共阳极的背光灯,为了简单,阳极接3.3V,阴极并联后串了个小电阻再接地,我用的17欧,想亮点可以用10欧

2 屏的测试
屏的主控是ILI9431,先在platformio上找一下有没有现成的库,就它了: TFT_eSPI
可惜这个库不带中文字库,而且即使u8g2有,也是很小的字库,不适合在大屏上用,后面再想办法吧
先测试点亮屏幕吧,还好这些库都带有例程,根据实际接线配置好引脚就行了
上图:
333.jpg 111.jpg 222.jpg
第3张图是把之前的代码移植过来的,是不是很简陋

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-6 11:20:10 | 显示全部楼层
....................................续...........................................

屏解决了,剩下的事就可以开展了,计划增加温度和农历显示(为什么不是温湿度?后面再解释)

1 UI设计
既然是彩屏,当然不能显示几个字符就完事了,先找几张漂亮的背景图 要求是320*240,而且颜色要深,否则影响数据显示
就这张吧:
timg.jpg
前面提到,这个TFT_eSPI库不带中文字库,所以直接把要显示的汉字画到背景图上就解决了这个问题,
该PS出马了,本来windows的画图也行,但如果想修改就得重新来过。字体用楷体吧,颜色用白色
图先不上了,后面直接看整体效果图

2 农历算法
网上找了一下,找到现成的公历转农历的算法了,然后再修改了一下,测试了几个日期,结果都正确,搞定

3 温度显示
刚好手上用一颗MCP9701A,3PIN的类三极管的插件封装,分别是 电源 输出 地
在0度时输出为400mV,然后每升1度增加19mV。这样,只要测量出输出的电压就能计算出当前温度了
ESP8266刚好有一个ADC引脚,10位精度,好像没有地方接基准电压,只能用3.3V电源当基准电压
不管了,先试用一下吧

4 第二版完成,上图

1.jpg 2.jpg
重新数了下,是8根线没错吧


用了一天,总结如下:
    大部分之前的问题都解决了,但温度是个大问题,误差大的时候估计有3度了


---------------------------------待续------------------------------

打赏

参与人数 1家元 +20 收起 理由
8139 + 20 優秀文章

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2020-8-6 11:21:49 | 显示全部楼层
我床头边的就是1.96寸OLED,显示了日期与星期,时间,温湿度,时间是用的DS3231SN,虽然没有校时,但走时还是很精准

打赏

参与人数 1家元 +6 收起 理由
testmu + 6 熱心會員

查看全部打赏

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-6 11:57:03 | 显示全部楼层
本帖最后由 testmu 于 2020-8-6 18:10 编辑

....................................续...........................................
1 温度问题

如果能把温度的问题解决就接近完美了,分析了下,
主要原因应该是ESP8266的ADC参考电压为电源电压,而电源电压并不稳定导致的
为了解决温度的问题,网上找了下,发现几个传感器好像还不错,都是单线数字接口的
DHT11 DHT22 DS18B20,比较如下:

33333.jpg

比较的原文在这里:https://randomnerdtutorials.com/dht11-vs-dht22-vs-lm35-vs-ds18b20-vs-bme280-vs-bmp180/

DHT11精度太低,不考虑,就剩下DHT22和DS18B20了,
后者只有温度没有湿度,但便宜,前者有温湿度,但稍微有点贵
犹豫不决时,突然想到家里有几个不用的温湿度控制器,也许有现成的说不定
拆了一个,发现是个湿度传感器,也是三线的,而且是模拟的,不考虑
又拆了一个,好像有戏,白色的4PIN,看了下型号,AM2303,和DHT22(也叫AM2302)差一个字,应该能用

接好线后,就要写测试代码了,刚好有现成的库,参考了这篇文章,写得非常详细:
https://randomnerdtutorials.com/esp8266-dht11dht22-temperature-and-humidity-web-server-with-arduino-ide/

然后测试,用串口打印温湿度信息,碰到点问题(接线问题,ESP那边不能随便接),解决后,可以看到正确的温湿度了

2 温度与湿度的显示

既然采集到了湿度,那界面得修改并增加湿度显示了,好像屏幕剩余空间不多,干脆把农历的年省掉吧
界面弄好了,转成字节数组(忘记说了,自己写了一个工具,用来把jpg转成字节数组,platformio有jpg库JPEGDecoder,可以解析jpg文件)
然后增加并更新数据的位置显示,同时有些细节做了处理:
       比如对时失败或者温湿度传感器异常时在屏幕上进行提示

3 最终成品如下:

3.jpg
应该还行吧

4 后续展望

界面应该还可以再美化一下
可以考虑增加天气显示(调用网络API)
可以考虑接入物联网(比如ONENET BLINKER),并实现电子留言版功能,不在家时可以用手机发布留言,推送到屏幕显示 酷吧?:lol:

更多精彩留给有创意的坛友去完成!

代码在此: tft-clock.rar (1.94 MB, 下载次数: 4, 售价: 8 家元)


=============The END================
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-6 12:03:42 | 显示全部楼层
lbdj88 发表于 2020-8-6 11:21
我床头边的就是1.96寸OLED,显示了日期与星期,时间,温湿度,时间是用的DS3231SN,虽然没有校时,但走时还 ...

我放客厅用的,放路由器上面,用路由器的USB供电
主要是手上有现成的ESP8266,就用网络对时的方案了

后面还可能接入物联网做电子留言板
回复 支持 0 反对 1

使用道具 举报

发表于 2020-8-6 13:47:53 | 显示全部楼层
坛友弓马娴熟,都玩出花来了:titter:

打赏

参与人数 1家元 +6 收起 理由
testmu + 6 熱心會員

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2020-8-6 14:15:44 来自手机浏览器 | 显示全部楼层
厉害了,前排围观

打赏

参与人数 1家元 +6 收起 理由
testmu + 6 熱心會員

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2020-8-6 14:23:05 | 显示全部楼层
还是要搞汉字库,农历一定要用汉字显示出来才够味,还有星期几也是。

再搞个自动白天黑夜模式,否则晚上太亮反而看不清,还刺眼;也可以在晚上几点后只全屏显示时间。

打赏

参与人数 1家元 +6 收起 理由
testmu + 6 歡迎探討

查看全部打赏

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-6 14:45:44 | 显示全部楼层
苏州熊猫 发表于 2020-8-6 14:23
还是要搞汉字库,农历一定要用汉字显示出来才够味,还有星期几也是。

再搞个自动白天黑夜模式,否则晚上太 ...

时间有限,暂时没弄汉字库,农历和星期,只要这几个字就够了:零一二三四五六七八九十廿
计划是想做个取模软件,从TrueType Font 里面提取的,没空弄就放弃了,
如果商用肯定是用汉字显示了,自用到是问题不大,看个人了

自动白天黑夜模式,背光直接通过电阻接电源了,没用PWM调光,
不过我的背光调得不算亮,晚上感觉还好
或者晚上可以用较深的颜色显示来降低亮度
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-6 18:11:28 | 显示全部楼层
代码已上传,第5楼
回复 支持 反对

使用道具 举报

发表于 2020-8-6 19:33:00 | 显示全部楼层
不如用手机当显示屏,毕竟旧手机不值钱
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-6 20:00:26 | 显示全部楼层
胡奚曷 发表于 2020-8-6 19:33
不如用手机当显示屏,毕竟旧手机不值钱

手机没有温湿度传感器,只能通过网络获取个大概值
重要的是,用手机就不是diyer了,:giggle:
回复 支持 反对

使用道具 举报

发表于 2020-8-6 20:11:58 | 显示全部楼层
温湿度用单片机或ES8266采集,通过蓝牙或者WIFI传给手机……
也可以DIY
回复 支持 反对

使用道具 举报

发表于 2020-8-6 21:16:15 | 显示全部楼层
这些年,见过比较好看的就下面这个了。
204907wxacubzu0xyysaos.jpg
回复 支持 反对

使用道具 举报

发表于 2020-8-6 21:34:49 | 显示全部楼层
1 瑞士Sensirion 数字温度传感器 SHT30
1.1 官网手册描述
        Humidity and Temperature Sensor
        Fully calibrated, linearized, and temperaturecompensated digital output
        Wide supply voltage range, from 2.4 to 5.5 V
        I2C Interface with communication speeds up to 1MHz and two user selectable addresses
        Typical accuracy of  2%RH and 0.3°C
        Very fast start-up and measurement time
        Tiny 8-Pin DFN package


1.2 产品描述:
SHT30建立在全新和优化的CMOSens® 芯片之上,进一步提高了产品可靠性和精度规格。SHT3x提供了一系列新功能,如增强信号处理、两个独特和用户可选I2C地址、一个可编程温湿度极限的报警模式,以及高达1 MHz的通信速度。
    新型数字湿度传感器SHT3x系列将传感器技术提升到了一个新水平。作为SHT2x系列的继承者,它将定义湿度传感的下一个行业标准。SHT3x湿度传感器系列包括低成本版本SHT30、标准版本SHT31,以及高端版本SHT35。SHT3x湿度传感器系列结合了多种功能和各种接口(I2C、模拟电压输出),应用友好,工作电压范围宽(2.4至5.5 V),适合各类应用。
    SHT30建立在全新和优化的CMOSens® 芯片之上,进一步提高了产品可靠性和精度规格。SHT30提供了一系列新功能,如增强信号处理、两个独特和用户可选I2C地址、一个可编程温湿度极限的报警模式,以及高达1 MHz的通信速度。
    DFN封装的占位面积为2.5 × 2.5 mm2,高度为0.9 mm。这有助于SHT30集成到多种应用。此外,2.4至5.5 V的宽电源电压范围和多种可选接口可保证与不同集成要求的兼容性。总之,SHT30湿度传感器系列融入了Sensirion作为行业领导者15年的经验和心血,是一款超高性价比的产品。
回复 支持 反对

使用道具 举报

发表于 2020-8-6 22:41:14 | 显示全部楼层
这是我自己做的一个钟,温湿度用SHT30无线回传,这个温湿度很准确,而且价格不贵,我不太喜欢使用WIFI连接的功能所以用GPS校时,一般一年点一次就够了,壳体用整块木头CNC
P81027-224739.jpg
P81027-230818.jpg
P81027-231941.jpg
P81027-232007.jpg
P81027-232027.jpg
P81027-232102.jpg

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-7 09:40:07 | 显示全部楼层
wzr200408 发表于 2020-8-6 22:41
这是我自己做的一个钟,温湿度用SHT30无线回传,这个温湿度很准确,而且价格不贵,我不太喜欢使用WIFI连接 ...

壳做得不错,可惜没CNC资源
你的SHT30用什么无线传输的?
回复 支持 反对

使用道具 举报

发表于 2020-8-7 15:29:38 来自手机浏览器 | 显示全部楼层
testmu 发表于 2020-8-7 09:40
壳做得不错,可惜没CNC资源
你的SHT30用什么无线传输的?

用nrf24l01+,三对一
回复 支持 反对

使用道具 举报

发表于 2020-8-8 11:29:49 | 显示全部楼层
wzr200408 发表于 2020-8-6 22:41
这是我自己做的一个钟,温湿度用SHT30无线回传,这个温湿度很准确,而且价格不贵,我不太喜欢使用WIFI连接 ...

这个做得好
回复 支持 反对

使用道具 举报

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

本版积分规则

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

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-27 05:35 , Processed in 0.109200 second(s), 13 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

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