基于STC32G12K48与SHT40的无线温湿度计DIY全流程解析最近想给家里做个温湿度计方便随时查看环境情况。市面上的成品要么功能单一要么价格不菲不如自己动手做一个。正好手头有STC新出的32位单片机STC32G12K48性能不错价格也亲民就决定用它来当主控。这个项目会用到SHT40温湿度传感器、KT6368A蓝牙模块和一个小OLED屏最终做成一个能用锂电池供电、支持蓝牙无线传输数据的便携设备。整个制作过程我会从头到尾详细拆解包括硬件怎么选型、电路怎么设计、PCB怎么画再到程序怎么烧录。如果你是刚开始接触嵌入式或者电子DIY的朋友跟着这篇教程一步步来完全可以自己复现出来。咱们不搞那些虚的就讲实际动手过程中会遇到的问题和解决办法。1. 项目整体方案与硬件选型做项目第一步不是直接画图而是先想清楚要做什么、需要哪些东西。我这个无线温湿度计的核心需求很明确能测温湿度、能显示、能无线传输数据、用电池供电且能充电。基于这些需求我选定了下面这几个核心器件主控芯片STC32G12K48。这是STC新推出的32位8051内核单片机资源丰富有串口、I2C、ADC等我们需要的接口关键是性价比高非常适合学习和小项目。温湿度传感器SHT40。这是Sensirion公司出的一款高精度、低功耗的数字温湿度传感器直接通过I2C接口输出数字信号省去了我们自己做模拟信号调理的麻烦精度也足够家用。无线模块KT6368A蓝牙模块。这个模块同时支持经典蓝牙SPP和低功耗蓝牙BLE串口透传用起来非常简单。如果你特别在意功耗可以选它的兄弟型号KT6328A只支持BLE。显示屏0.91寸OLED屏128x32。单色OLED功耗低显示清晰尺寸正好适合显示温度和湿度两行数据。电源方案TP4047充电芯片 LDO。用一颗TP4047管理单节锂电池的充电再用一个低压差线性稳压器LDO将电池电压稳定到3.3V给整个系统供电。选型定了整个系统的框架也就清晰了电池供电经LDO得到3.3V系统电压。STC单片机通过I2C读取SHT40的数据一方面送到OLED屏显示另一方面通过串口发送给KT6368A蓝牙模块无线传输到手机。同时单片机还能通过ADC监测电池电压。USB口则负责给电池充电和给单片机下载程序。2. 核心电路设计与要点解析电路设计我用的是嘉立创EDA对新手非常友好。下面我把几个关键部分的电路和设计时要注意的坑点详细说一下。2.1 主控与电源电路主控电路其实不复杂主要是把STC32G12K48的电源、复位、晶振如果用到和程序下载接口引出来。STC单片机下载程序用的是串口所以要注意把串口引脚P3.0/RxD, P3.1/TxD接到USB转串口芯片上。注意STC单片机下载程序需要冷启动。也就是一定要先按住下载按键如果电路有设计再给单片机上电等电脑端软件识别到设备后再松开按键进行下载。这个步骤千万不能错否则会一直连不上。电源部分是保证系统稳定工作的基础。我用了两套供电方式USB供电Micro-USB口输入5V可以直接给系统供电同时也连接到充电芯片。电池供电采用一颗单节锂电池3.7V标称4.2V满电。充电芯片选用TP4047它支持1A的充电电流外围电路非常简单。电池电压经过一个LDO稳压到3.3V供给单片机、传感器、屏幕和蓝牙模块。这里有个细节为了监控电池电量我设计了一个分压采样电路。因为STC32G12K48的ADC参考电压是3.3V而电池满电电压是4.2V直接测量会超量程。所以用两个电阻比如都是100kΩ对电池电压进行分压大概降到一半2.1V再送到单片机的ADC引脚这样就能安全地测量电池电压了。2.2 传感器与蓝牙模块电路SHT40传感器电路非常简单就四根线VCC3.3V、GND、SDAI2C数据线、SCLI2C时钟线。记得在VCC附近放一个0.1uF的退耦电容。重点避坑SHT40的I2C地址不是固定的0x44它的地址取决于具体型号和配置。在写程序读取数据时一定要根据你手上芯片的具体型号去查它的数据手册确认正确的I2C地址。我一开始就是直接用了别人例程里的0x44结果死活读不出数据折腾了好久才发现是地址不对。KT6368A蓝牙模块电路也很简单主要是电源和串口连接。它的TXD要接单片机的RXD如P3.0RXD要接单片机的TXD如P3.1。又一个坑串口线必须交叉连接即模块的TX接MCU的RX模块的RX接MCU的TX。我画第一版PCB时脑子一抽画成了直连TX对TXRX对RX结果板子回来通讯不了只好飞线解决。大家在设计时一定要反复检查这一点。好在我的原理图上预留了0欧姆电阻图中的R6、R8飞线修改还算方便。另外蓝牙模块的天线部分需要特别注意。如果模块本身不带天线需要自己设计PCB天线那么天线区域下方和周围必须净空不能铺铜也不能走线要严格按照天线设计规范来否则无线信号会非常差。2.3 OLED显示电路我用的这款0.91寸OLED屏是I2C接口的和SHT40可以共用一组I2C总线SDA、SCL只需要注意它们的I2C地址不同就行。电路上就是接好电源、地、SDA、SCL。有些屏幕可能还需要接复位引脚具体看屏幕的规格书。这块屏是“即插即用”型的在立创商城等平台很容易买到价格也很便宜对于显示简单的温湿度数据来说完全够用。3. PCB设计与外壳制作3.1 PCB布局布线要点我用嘉立创EDA画的板子做了4层板厚度选了1.2mm没有特殊的阻抗控制要求。对于这种低频数字电路项目布局布线比追求高阶的PCB工艺更重要。布局上要遵循几个原则电源路径清晰从USB口或电池接口到LDO再到各个芯片的电源引脚路径要尽量短、粗。LDO的输入和输出端都要放置足够容量的滤波电容如10uF和退耦电容0.1uF并且靠近芯片引脚放置。模拟数字分离虽然我们这个项目模拟部分不多主要是ADC采样但最好将模拟地AGND和数字地DGND在单点连接比如在LDO的GND引脚附近。ADC采样走线要远离数字信号线特别是时钟线。蓝牙天线净空这是重中之重天线投影区域的所有层包括中间层都必须挖空不能有任何铜箔和走线。天线周围也要留出足够的空间。接口位置合理USB口、按键、OLED屏插座的位置要考虑到最终外壳的开口方便插拔和操作。3.2 外壳与面板设计为了让作品更美观、更耐用我直接用嘉立创EDA的3D外壳设计功能画了一个外壳。它分为顶盖和底盖通过螺丝固定。顶盖需要开孔露出OLED屏幕还要为可能的按键比如复位键或下载键开孔。底盖需要为Micro-USB接口开槽方便充电和下载。面板我本来也设计了打算贴在顶盖屏幕上方印上一些装饰性的图案和logo可惜当时没券了就没打印。大家如果感兴趣可以在立创EDA里找到面板打印服务自己设计一个。4. 软件开发与程序下载软件部分我用的是Keil MDK进行开发。STC单片机的资料、库函数和例程可以在STC的官方论坛https://www.stcaimcu.com/上找到这个论坛资源非常丰富社区也很活跃。程序的主要逻辑很简单就是一个大循环里干几件事定时比如每2秒通过I2C读取一次SHT40的温湿度数据。将数据格式化后通过I2C发送给OLED屏进行显示。将数据通过串口发送给KT6368A蓝牙模块。定时比如每30秒通过ADC读取一次电池电压并换算成电量百分比可选显示或发送。由于我本人也是初学者代码写得比较稚嫩就不在这里献丑了。但核心的驱动比如SHT40的读取、OLED的显示、串口的发送在STC论坛都能找到相关的示例代码大家整合一下就能用。这里必须再次强调程序下载的步骤这是新手最容易卡住的地方用USB线连接电脑和你的温湿度计板子。打开STC-ISP下载软件选择正确的单片机型号STC32G12K48。选择好要下载的.hex或.bin文件。最重要的一步按住板子上的“下载/复位”按键不放然后给板子上电如果之前没通电的话。此时STC-ISP软件界面通常会显示“正在检测目标单片机...”然后变成“正在连接...”。当软件提示连接成功或出现端口号时松开按键。点击“下载/编程”按钮等待下载完成提示。如果一直连接不上请检查USB线是否完好、串口驱动是否安装、串口号选择是否正确、以及是否严格执行了“先按住按键再上电”的操作。5. 效果展示与后续改进程序下载成功后OLED屏应该就能点亮并显示温湿度了。同时打开手机蓝牙搜索名为类似“KT6368A”的设备配对连接后再打开一个串口调试助手APP如“蓝牙串口”就能接收到单片机发送过来的温湿度数据字符串了。整个项目的演示视频我已经上传到了B站你可以更直观地看到成品效果和操作过程。这个项目做下来感觉STC32G12K48这款单片机确实挺好用的资源够价格低社区支持也好。通过这个完整的DIY流程你不仅能学会一个具体产品的制作更能掌握从需求分析、器件选型、电路设计、PCB绘制到软件调试的全套技能。以后你想做其他类似的小设备比如空气质量检测仪、智能开关等等思路都是相通的。希望这篇详细的解析能帮你少走一些弯路。如果在制作过程中遇到问题不妨多去STC官方论坛和立创社区逛逛那里有很多热心的朋友和大神。动手去做遇到问题解决问题这才是学习嵌入式最快的方式。