描述
<p>本项目是一款极其简单的高精度温湿度计,PCB尺寸60mm*20mm,外壳尺寸65mm*25mm*11mm,主打一个精致小巧,手搓成本不到10元,温湿度传感器与米家温湿度计同厂商,非常适合3D打印玩家。</p>
<p> </p>
<h3 style="line-height:1.8">* 更新记录</h3>
<hr>
<p><strong>2024年9月3日</strong></p>
<p>发布新固件,支持更多淘宝ST7735S屏幕。</p>
<p> </p>
<p><strong>2024年8月22日 (PY32F002A开头,以下简称V2版本)</strong><br>第一版发布后,受到了B站不少网友的鼓励和支持,还有多位网友复刻成功,这才有了动力进行这第二版。</p>
<p>第二版更多的是从产品的角度去考虑,共设计了3款:分别是纽扣电池版、锂电池版以及模块版,主控MCU换成了更便宜的普冉的 <a href="https://item.szlcsc.com/6036160.html" target="_blank">PY32F002AF15P6</a> 或者合宙的AIR001,这2个芯片其实是一样的,可以随意替换使用。</p>
<p>硬件上对PCB LAYOUT也进行了优化,把唤醒按键移到右边,这样按唤醒按键的时候手指就不会挡住传感器的风道了,同时把屏幕也往中间挪了挪。</p>
<p>锂电池版可以直接通过TYPEC进行充电,偶尔还能应急下当作锂电池的充电器用,另外加入了USB插入监测,一旦有外部供电就会保持屏幕常亮不进入休眠模式。</p>
<p>而模块版是采取尽可能的简化电路,减少元器件数量,采用TYPEC或者外接5V直接供电,屏幕常亮不进入休眠模式。可以作为其他系统的子模块使用,只要接入5V电源就可以有一个完整的温湿度测量单元。</p>
<p>同时还改进了软件代码,支持SHT4x全系列芯片,而且现在可以做到同一个固件支持GC9107和ST7735S驱动IC的屏幕了,<strong>固件已更新至最新版,在这之前复刻的朋友们可以重新下载烧录</strong>。</p>
<p>V2纽扣电池版功耗:运行模式23mA,休眠模式85uA。</p>
<p>V2版本演示视频:<a href="https://b23.tv/Xg4ONQv" target="_blank">https://b23.tv/Xg4ONQv</a></p>
<p> </p>
<p><strong>2024年7月25日 (PY32F003_SHT4x,以下简称V1版本)</strong><br>第一版发布,这是参加训练营的,主控MCU是普冉的PY32F003F1xPx系列(PY32F003F14P6、PY32F003F16Px、PY32F003F18Px都可以),温湿度传感器采用盛思锐的SHT40-AD1B-R2,一颗CR2032纽扣电池供电,屏幕是0.96寸TFT,万用表粗略测量一下功耗,运行模式20mA,休眠模式100uA,理论上CR2032电池能够坚持3个月左右,实际上会受限于屏幕的最低电压要求导致续航会打折扣。</p>
<p>V1版本演示视频:<a href="https://b23.tv/sPQD9rp" target="_blank">https://b23.tv/sPQD9rp</a></p>
<p style="line-height:1.8"> </p>
<h3 style="line-height:1.8">* 1、项目功能介绍</h3>
<hr>
<p>V1版本只有一个款式,电源采用一颗CR2032供电,电池容量大概220mAh左右,主控采用普冉的 <a href="https://item.szlcsc.com/3531927.html" target="_blank">PY32F003F1xPx系列</a>,正如该主控型号的开头2字母PY == 便宜,手头也正好有就用了,温湿度传感器芯片选用 <a href="https://list.szlcsc.com/brand/506.html" target="_blank">Sensirion(瑞士盛思锐)</a> 的高精度数字温湿度传感器 <a href="https://item.szlcsc.com/3188621.html" target="_blank">SHT40-AD1B-R2</a>,米家智能温湿度计也都是用的盛思锐的传感器芯片。还有一块0.96寸TFT IPS 显示屏用于显示温湿度数据,至于为什么采用这块屏幕也是因为手头有存货,实际做产品的话应该换成低功耗不带背光的段码LCD屏或者墨水屏之类的,毕竟带背光的屏都比较耗电,且最低供电电压也偏高。</p>
<p> </p>
<p>V2版本主要是换了主控,其他没变,保留CR2032纽扣电池版外,新增锂电池版和模块版,共有3个款式,分别应对不同场景,主控MCU换成了更便宜的普冉的<a href="https://item.szlcsc.com/6036160.html" target="_blank">PY32F002AF15P6</a> 或者合宙的AIR001,这2个芯片可以随意替换使用,我在开发过程中就是用PY32F002A的标准库写的,然后直接烧录AIR001芯片。</p>
<p> </p>
<p>项目功能框图如下所示:</p>
<p style="line-height:1.8"><img src="//image.lceda.cn/oshwhub/7658d3dfb11b431fb26ca026eb366db4.png" alt="" width="522" height="362"></p>
<p style="line-height:1.8"> </p>
<p>实物展示</p>
<p><img src="//image.lceda.cn/pullimage/Nwkhvzwmho7HfIGob6BONTVvtGSaCuaHfSCKf6g3.jpeg" alt="" width="4032" height="3024"></p>
<p style="line-height:1.8"><img src="//image.lceda.cn/pullimage/Do97UW7uD5UBjPIc8lNEYinKHh3dfq7Jrf9pBXmK.jpeg" alt="" width="4032" height="3024"></p>
<p style="line-height:1.8"><img src="//image.lceda.cn/oshwhub/fadd6f4278044f2bbe1c1e06f1913d85.jpg" alt="" width="1906" height="2355"></p>
<p style="line-height:1.8"> </p>
<p>3D外壳也是直接通过立创EDA画的,对于这类外壳用立创EDA设计已经足够,我也把立创EDA的3D外壳设计功能发挥的淋漓尽致!!!:-)</p>
<p> </p>
<p>下面是V1版本外壳装配图,使用4颗M2x9圆头十字自攻螺丝固定</p>
<p><img src="//image.lceda.cn/oshwhub/6f0b77f932594d518dd1cab106f92d23.png" alt="" width="1049" height="740"></p>
<p> </p>
<p>以下是V2版本外壳装配图</p>
<p><img src="//image.lceda.cn/oshwhub/422653c72d7e4c64908df400b7d93ed6.png" alt="" width="1100" height="690"></p>
<p> </p>
<h3 style="line-height:1.8">*2、硬件部分</h3>
<hr>
<p> </p>
<p>V1版本硬件部分主要就5大块:MCU主控、温湿度传感器、唤醒和复位按键、电池电压检测以及0.96寸TFT显示屏部分,简单的不能再简单了。</p>
<p> </p>
<p><img src="//image.lceda.cn/pullimage/uMl5fKyFmowUAqVz6zCmTTOXLKBgx3Q5IhLmqjiO.png" alt="" width="1174" height="830"></p>
<p> </p>
<p><strong>原理图中的一些物料大家可以根据自己手头物料进行选择替换,比如三极管S8050可以用S9013替换等等。</strong></p>
<p> </p>
<p><img src="//image.lceda.cn/oshwhub/c78bd5779ee349809abe898fe0913535.png" alt="" width="1906" height="634"></p>
<p><img src="//image.lceda.cn/oshwhub/dc44bf74bcd74ae28db3a54cf5578a2b.png" alt="" width="1906" height="634"></p>
<p>V1版本MCU主控采用普冉的<strong>PY32F003F1xPx系列</strong>,原理图里用的是PY32F003F16P6TU,这里之所以用系列这个词,意思就是同一块板子,你可以焊接PY32F003F14Px、PY32F003F16Px、PY32F003F18Px中的任一款芯片,这几个型号的芯片都是TSSOP20封装,引脚相同,唯一的区别就是FLASH和SRAM大小的区别,当然价格也随之不同,实际测试2K大小的SRAM就够了,也就是说用PY32F003F14Px最划算。</p>
<p><img src="//image.lceda.cn/pullimage/G5vL80nkvhnDvspKmLIboh1dxuaoLgPpCbgnXOgi.png" alt="" width="947" height="832"></p>
<p> </p>
<p> </p>
<p> </p>
<p>V2版本MCU主控换成普冉的 PY32F002A15P6,相对来说更便宜,20K的FLASH和3K的SRAM也足够了,大家可以编辑器打开工程自行查看原理图。</p>
<p> </p>
<p>V2纽扣电池版</p>
<p><img src="//image.lceda.cn/oshwhub/74eea2b31060412590d3f973c38e39ab.png" alt="" width="1906" height="634"></p>
<p><img src="//image.lceda.cn/oshwhub/2216fa4717b64443adba208541b3aac5.png" alt="" width="1906" height="634"></p>
<p>V2锂电池版主要增加了以下电路</p>
<p><img src="//image.lceda.cn/oshwhub/cfe6c955883e4d6fbb9e2fc5395be29a.png" alt="" width="1248" height="524"></p>
<p><img src="//image.lceda.cn/oshwhub/f0b88a60f2664d60ad3f7c358635f13f.png" alt="" width="1906" height="620"></p>
<p><img src="//image.lceda.cn/oshwhub/444e8405e9f647778163feeab010e714.png" alt="" width="1906" height="620"></p>
<p>V2模块版,预留TYPEC或者XH2.54接口,用于外接5V供电。<strong>如果也想外接锂电池,请确保不会接反的前提下,不要焊接二极管,用0Ω电阻或者一坨焊锡代替,因为二极管的压降会造成后续供电不稳。</strong></p>
<p><img src="//image.lceda.cn/oshwhub/537359e29d494e48bc63920c04aa6e1d.png" alt="" width="1906" height="620"></p>
<p><img src="//image.lceda.cn/oshwhub/6b97f4b2d9ea4847823c02aa24e9ea0b.png" alt="" width="1906" height="620"></p>
<p> </p>
<p> </p>
<h3>2.1 温湿度传感器</h3>
<p>温湿度传感器芯片选用的是 <a href="https://list.szlcsc.com/brand/506.html" target="_blank">Sensirion(瑞士盛思锐)</a> 的高精度数字温湿度传感器 <a href="https://item.szlcsc.com/3188621.html" target="_blank">SHT40-AD1B-R2</a>,精度很高,各位可以看下盛思锐官方的宣传手册以及数据手册。</p>
<p><img src="//image.lceda.cn/pullimage/LqNLExzmTi4JDlWrj3dbn6PcBtrU2MJKKSIVBeay.png" alt="" width="1091" height="903"></p>
<p><img src="//image.lceda.cn/pullimage/p6MBN8FK9bzv4yNrv0KH4kRIMmRpNAtnDzN7w7lj.png" alt="" width="1047" height="485"></p>
<p> </p>
<p><strong>由数据手册得知这块芯片的IIC地址为0x44,当地址最低位为0时,表示写数据;最低位为1时,表示读数据。</strong></p>
<p> </p>
<p><strong>温湿度传感器SHT40也可以换成SHT41、SHT43、SHT45,软件已对这些型号都做了兼容。</strong></p>
<p> </p>
<p><strong>温湿度传感器的LAYOUT可以参考一下盛思锐官方的<a href="https://sensirion.com/media/documents/3A740281/66681D22/Sensirion_Temperature_Sensors_Design_Guide_Chinese.pdf" target="_blank">设计指南文档</a>,我也是按照官方推荐的设计采用挖槽以及禁止铺铜处理,可以避免PCB热传导,从而影响温湿度传感器的测量精度。</strong></p>
<p> </p>
<p><img src="//image.lceda.cn/pullimage/vn20ctikPOWPWPcT5IUcgUwomqMEGWntmpIyHWjW.png" alt="" width="1045" height="736"></p>
<p> </p>
<h3>2.2 0.96寸TFT显示屏</h3>
<p>屏幕可以选用ST7735S或者GC9107驱动IC的,软件已对这2款芯片做了兼容,我自己实际测试的屏幕型号是N096-1608TBBIG47-H13 和 N096-1608TBBIG11-H13。</p>
<p> </p>
<p><img src="//image.lceda.cn/oshwhub/2180e05ab8bf4fedbcbb2ee793b7cd16.jpg" alt="" width="1906" height="1430"></p>
<p> </p>
<p> </p>
<p style="line-height:1.8"> </p>
<h3 style="line-height:1.8">*3、软件部分</h3>
<hr>
<p>代码采用标准库写的,实现逻辑如下图所示:</p>
<p><img src="//image.lceda.cn/pullimage/n0Il5FEHj2IaRpNYyBFppoZC5CagXxCh3DwOEWgH.png" alt="" width="429" height="501"></p>
<p>逻辑也很简单,就是上电后每秒检测一次并显示结果(出于展示需要,实际产品不需要每秒刷新一次),然后循环里判断超过10秒没响应后进入低功耗模式,同时也关闭显示屏背光。低功耗模式下如果检测到唤醒按键按下,那么重新开启显示屏背光,并再次检测。超过10秒没响应后再次进入低功耗模式。</p>
<p style="line-height:1.8"> </p>
<h3 style="line-height:1.8">3.1 温湿度UI展示</h3>
<p>测量结果是用LED数码字体展示的,左边显示的是温度数据,右边显示的是湿度数据,另外还根据温湿度区间做了下UI方面的考虑,用3种颜色分别表示不同的温湿度区间。</p>
<table style="border-collapse:collapse;width:100%;height:76px">
<tr style="height:19px">
<td style="width:33.0946%;height:19px">颜色</td>
<td style="width:33.0946%;height:19px">温度</td>
<td style="width:33.0946%;height:19px">相对湿度</td>
</tr>
<tr style="height:19px">
<td style="width:33.0946%;height:19px"><span style="background-color:#e03e2d;color:#ffffff">红色</span></td>
<td style="width:33.0946%;height:19px">> 26°C</td>
<td style="width:33.0946%;height:19px">0 – 40 %RH</td>
</tr>
<tr style="height:19px">
<td style="width:33.0946%;height:19px"><span style="background-color:#2dc26b;color:#ffffff">绿色</span></td>
<td style="width:33.0946%;height:19px">20 ~ 26°C</td>
<td style="width:33.0946%;height:19px">40 – 60 %RH</td>
</tr>
<tr style="height:19px">
<td style="width:33.0946%;height:19px"><span style="background-color:#3598db;color:#ffffff">蓝色</span></td>
<td style="width:33.0946%;height:19px">< 20°C</td>
<td style="width:33.0946%;height:19px">60 – 100 %RH</td>
</tr>
</table>
<h3 style="line-height:1.8"> </h3>
<h3>3.2 电池电量展示</h3>
<p>电池电压的计算是先采集MCU内部参考电压来获取MCU实际的供电电压,然后再采集电池电压进行换算。</p>
<p><img src="//image.lceda.cn/pullimage/n8bzqmwEGqdpxgxtWHqKVC4BzqQK1PHF48ez4rxR.png" alt="" width="849" height="270"></p>
<p> </p>
<p>根据CR2032电池数据手册得知,满电算3V,亏电算2V,经过分压电路后,ADC端测得电压在1V ~ 1.5V之间,所以代码就分5个等级分别显示不同的电量图标(图标来自:<a href="https://www.iconfont.cn/" target="_blank">iconfont-阿里巴巴矢量图标库</a>)</p>
<p><code>if (adcVbat <= 1100) {</code></p>
<p><code><span style="white-space:normal"> LCD_ShowBattery1(70, 4);</span></code></p>
<p><code><span style="white-space:normal">} else if (adcVbat <= 1200) {</span></code></p>
<p><code><span style="white-space:normal"> LCD_ShowBattery2(70, 4);</span></code></p>
<p><code><span style="white-space:normal">} else if (adcVbat <= 1300) {</span></code></p>
<p><code><span style="white-space:normal"> LCD_ShowBattery3(70, 4);</span></code></p>
<p><code><span style="white-space:normal">} else if (adcVbat <= 1400) {</span></code></p>
<p><code><span style="white-space:normal"> LCD_ShowBattery4(70, 4);</span></code></p>
<p><code><span style="white-space:normal">} else {</span></code></p>
<p><code><span style="white-space:normal"> LCD_ShowBattery5(70, 4);</span></code></p>
<p><code><span style="white-space:normal">}</span></code></p>
<p>当然这个代码只是很粗糙的展示一下电量等级情况,也仅在理想情况下而已,因为本项目用的IPS屏幕,可能电池电压低于2.5V就不显示了。</p>
<p> </p>
<p>据屏幕数据手册可知,这块屏幕最低供电需要2.5V以上且背光供电需要2.9V以上,实际情况如何还需要时间检验。</p>
<p><img src="//image.lceda.cn/pullimage/L8HJc65Q0TLDcuTtn8JkKyJYQZdXaRRyiIZ616SA.png" alt="" width="726" height="612"></p>
<p> </p>
<h3>3.3 固件空间占用</h3>
<p>由下图可见,16K的FLASH和2K的SRAM已经足够。</p>
<p><img src="//image.lceda.cn/pullimage/6vDlhMDTxE05hyimmalSlpfwR8XSb3fYP0U3JnH4.png" alt="" width="615" height="80"></p>
<p><img src="//image.lceda.cn/pullimage/MGkLZ2PEWu5jSPATxm5ZvLgQhmOETArvS3ycfSMv.png" alt="" width="625" height="131"></p>
<p> </p>
<h3 style="line-height:1.8">*4、固件烧录教程</h3>
<hr>
<p><strong>4.1 PWLink2 Lite烧录</strong></p>
<p>如果大家手头有PWLink2 Lite烧录器的话,烧录就非常简单,也推荐大家使用这种方式,烧录器也很便宜,9.9顺丰包邮。</p>
<p><img src="//image.lceda.cn/oshwhub/9684a79a893e471ca75f1bbc6a4136f3.png" alt="" width="1034" height="741"></p>
<p><img src="//image.lceda.cn/oshwhub/55651a06734a49079033f1cee7601561.png" alt="" width="1034" height="741"></p>
<p><img src="//image.lceda.cn/oshwhub/efbe62b3dcc44b75b6029dbd823d9a42.png" alt="" width="1034" height="741"><br>如还有不明白大家可以自行参考PWLink2 Lite的官方文档:</p>
<p><a href="https://docs.powerwriter.com/docs/next/faq/powerwriter/base/firmwareload" target="_blank">https://docs.powerwriter.com/docs/next/faq/powerwriter/base/firmwareload</a></p>
<p> </p>
<p><strong>4.2 其他DAPLink烧录</strong></p>
<p>如果手头只有JLink或者其他DAPLink,都可以通过这种方式进行烧录,只是步骤稍微麻烦一些,思路就是建立一个空白工程,然后配置DAPLink信息,把固件复制到这个新建工程的目录中,然后进行烧录,可以参考下图:</p>
<p><img src="//image.lceda.cn/oshwhub/913dd4dd0ec24b7eb7306ca1312fcc8b.png" alt="" width="834" height="420"></p>
<p><img src="//image.lceda.cn/oshwhub/3a083c10e17a4b0796f3c0a641ec44a7.png" alt="" width="982" height="569"></p>
<p><img src="//image.lceda.cn/oshwhub/46bb11e74af346088a87bf7949d601a9.png" alt="" width="650" height="494"></p>
<p><img src="//image.lceda.cn/oshwhub/23ed779ff8294587875940587949cd07.png" alt="" width="1023" height="803"></p>
<p><img src="//image.lceda.cn/oshwhub/75a971e8db8740b48a07b342d6feb542.png" alt="" width="1062" height="792"></p>
<p><img src="//image.lceda.cn/oshwhub/b7fd8ee1186a4b0699c9c655ee9ced27.png" alt="" width="650" height="494"></p>
<p><img src="//image.lceda.cn/oshwhub/4f9b8dd607ea444e9216293add85066d.png" alt="" width="626" height="470"></p>
<p><img src="//image.lceda.cn/oshwhub/900709f08c7146dd94297209a52d4cfc.png" alt="" width="777" height="632"></p>
<p><img src="//image.lceda.cn/oshwhub/1b2e3370ff344a65974590e53358da85.png" alt="" width="777" height="632"></p>
<p><img src="//image.lceda.cn/oshwhub/199e0dc52b1647a5bd2d7e25eceece5f.png" alt="" width="1062" height="792"></p>
<h3 style="line-height:1.8">*5、复刻常见问题</h3>
<hr>
<p><strong>5.1 屏幕只有文字,没有温湿度数据?</strong><br>一般发生在温湿度传感器没有焊接好,补焊一下就能解决。</p>
<p> </p>
<p><strong>5.2 屏幕红绿蓝颜色显示有异常,或者文字方向不对</strong><br>因为是在同一个固件支持GC9107和ST7735S驱动IC的屏幕,做法就是根据读取RDDID来驱动不同的屏幕,目前只适配了手头不同厂商的两块ST7735S和一块GC9107屏幕,不排除一些屏幕厂商会更改RDDID,如果遇到这种情况请烧录带TESTLCD后缀的固件:</p>
<p>V1版本请烧录SHT4x_PY32F003_TESTLCD.hex</p>
<p>V2版本请烧录SHT4x_PY32F002_AIR001_TESTLCD.hex</p>
<p>然后把屏幕显示结果私信我进行改进。</p>
<p> </p>
<p><strong>5.3 做了好几个,但是显示的温湿度数据各不相同,偏差有些大</strong><br>这种情况一般是焊接过程中污染了温湿度传感器,尤其不要用洗板水擦传感器。一般2、3天后能恢复正常,精度会返回到官方手册宣传的范围内。</p>
<p> </p>
<h3 style="line-height:1.8">*6、BOM清单</h3>
<hr>
<p>请看下面立创EDA自动生成的BOM列表。</p>
<p style="line-height:1.8"> </p>
<h3 style="line-height:1.8">*7、大赛LOGO验证</h3>
<hr>
<p style="line-height:1.8"><img src="//image.lceda.cn/pullimage/xfa3kNF5fyps2rXXT5hbOaBSyAxLz8tIlOx1Po2u.jpeg" alt="" width="3024" height="2375"></p>
<h3 style="line-height:1.8"> </h3>
<h3 style="line-height:1.8">* 8、演示您的项目并录制成视频上传</h3>
<hr>
<p style="line-height:1.8"> </p>
评论(47)