立创EDA开源项目基于ESP8266与Python的“舔狗”天气提醒挂件设计与实现大家好最近在立创开源广场看到一个挺有意思的项目叫“舔狗挂件”。这名字乍一听有点调侃但实际是一个融合了硬件设计、物联网和Python编程的实用小玩意儿。它是一个便携式的智能挂件核心功能是查询天气并且能根据天气情况给出“多喝热水”之类的提醒还能通过按键切换不同城市的天气信息。我仔细研究了项目的原理图和代码发现它麻雀虽小五脏俱全。从用立创EDA画PCB到ESP8266的MicroPython编程再到调用天气API整个流程非常完整很适合想入门物联网硬件开发的朋友学习。今天我就来手把手带大家复现这个项目咱们一起从硬件选型、PCB设计到软件烧录、代码调试把这个小挂件做出来。1. 项目整体设计与硬件选型这个项目的目标是做一个便携、低功耗的智能挂件。既然是便携的那肯定离不开电池供电。咱们先来拆解一下它的硬件构成看看作者是怎么考虑的。1.1 核心控制单元ESP8266项目的大脑选用了ESP8266模块。这个选择非常经典ESP8266本身集成了Wi-Fi功能性能足够价格便宜社区支持也好。更重要的是它支持MicroPython固件这意味着我们可以用Python语言来开发对于不熟悉C语言的开发者来说门槛大大降低。在项目中ESP8266负责连接Wi-Fi、从网络获取天气数据并控制屏幕显示。1.2 电源管理充电与稳压既然是挂件就要考虑续航和供电的稳定性。硬件设计上主要解决了两个问题充电和稳压。充电方案采用了TP4056芯片。这是一个非常常见的单节锂电池充电管理芯片使用起来很简单外围电路元件少可以稳定地给挂件里的锂电池充电。稳压方案采用了DC-DC降压芯片。锂电池的电压一般在3.7V-4.2V之间波动而ESP8266等芯片需要稳定的3.3V供电。使用DC-DC降压芯片比如常见的MP1584EN、AMS1117-3.3等的效率比线性稳压器LDO更高能延长电池的使用时间。1.3 人机交互屏幕与按键显示部分从实物图看使用了一块小尺寸的OLED屏幕应该是I2C接口的。这种屏幕功耗低、显示清晰非常适合这种便携设备用来显示城市、温度、湿度、天气状况和提醒语。输入部分设计了2-3个按键。根据描述这些按键用于切换城市。一个很实用的设计是市面上很多天气设备不支持切换城市而这个挂件通过按键实现了这个功能增加了实用性。1.4 PCB设计工具立创EDA整个电路的原理图和PCB布局都是在立创EDA上完成的。这是一个国产的、非常好用的在线电路设计工具对个人用户免费库文件丰富特别适合初学者和创客使用。项目的PCB已经完成了设计并提供了3D视图我们可以直接查看或导出生产文件去打样。2. 软件架构与实现步骤硬件搭好了台子软件才是让挂件“活”起来的关键。这个项目的软件部分完全基于MicroPython流程清晰咱们一步步来操作。2.1 第一步给ESP8266刷入MicroPython固件ESP8266出厂时通常运行的是AT指令固件。我们要先把它“改造”成能运行Python代码的环境。准备工具你需要一根USB转串口TTL的下载线比如CH340、CP2102模块。按照TX-RX,RX-TX,GND-GND的方式连接到ESP8266模块并确保ESP8266的GPIO0引脚在下载时拉低到GND进入下载模式。下载固件去MicroPython官网找到针对ESP8266的固件文件.bin文件。使用烧录工具可以使用esptool.py这个命令行工具。一个典型的烧录命令如下请根据你的串口号和固件路径修改esptool.py --port COM3 erase_flash esptool.py --port COM3 --baud 460800 write_flash --flash_sizedetect 0 esp8266-firmware.bin第一条命令擦除原有固件第二条命令写入新的MicroPython固件。2.2 第二步连接Wi-Fi与获取天气数据刷好固件后ESP8266就变成一个Python解释器了。项目代码主要做两件事连网和获取数据。连接Wi-Fi代码里会使用MicroPython的network模块来连接指定的Wi-Fi网络。根据项目“设计注意事项”里的提示你需要将自己的路由器或个人热点的名称SSID改为WIFI123密码改为12345678这样设备才能自动连接。在实际开发中你当然可以修改代码来连接你自己的Wi-Fi。# 示例代码片段 (连接Wi-Fi) import network sta_if network.WLAN(network.STA_IF) sta_if.active(True) sta_if.connect(WIFI123, 12345678) # 修改这里为你自己的Wi-Fi信息 while not sta_if.isconnected(): pass print(Network config:, sta_if.ifconfig())获取天气数据项目使用了心知天气的API。你需要去心知天气的官网注册一个账号获取免费的API密钥。代码中会通过HTTP请求向心知天气的服务器发送请求包含API Key和城市代码服务器会返回一个JSON格式的数据包里面就包含了温度、湿度、天气现象、风向等信息。# 示例代码片段 (获取天气数据) import urequests import json API_KEY “你的心知天气API密钥” CITY “beijing” # 城市代码 url “https://api.seniverse.com/v3/weather/now.json?key{}location{}languagezh-Hansunitc”.format(API_KEY, CITY) response urequests.get(url) data json.loads(response.text) temperature data[‘results’][0][‘now’][‘temperature’] # 温度 weather_text data[‘results’][0][‘now’][‘text’] # 天气状况2.3 第三步逻辑处理与显示拿到天气数据后程序会根据预设的逻辑进行处理并显示。数据处理代码会解析从API返回的JSON数据提取出我们关心的信息比如温度、湿度。生成提醒根据不同的温度、湿度条件生成对应的提醒语。例如如果温度较低可能会显示“天冷了多喝热水”如果空气干燥则提醒“空气干燥注意补水”。这就是项目“舔狗”功能的体现——自动化的关怀提醒。屏幕显示使用MicroPython的ssd1306驱动库针对OLED屏幕将城市名、温度、湿度、天气图标、风向以及生成的提醒语绘制到屏幕上。按键交互通过检测按键的按下事件来增加或减少城市列表的索引。当切换到新的城市后设备会在下一次更新天气时比如定时刷新自动请求新城市的天气信息并显示。根据描述还有一个按键用于复位设备。2.4 第四步项目文件刷写与调试根据项目“设计注意事项”的说明刷写程序分两步刷入第一个固件这个固件可能是一个基础的、只包含Wi-Fi连接功能的测试程序。使用uPyCraft一个MicroPython IDE打开项目文件选择正确的串口将这个固件刷入ESP8266。此时设备应该会自动连接你设置的WIFI123网络。刷入第二个固件在确认Wi-Fi连接成功后再刷入完整的主程序固件。这个固件包含了天气获取、逻辑判断、屏幕显示和按键处理的所有功能。刷入后等待一会儿屏幕上就应该显示出天气信息和提醒了。注意在调试过程中uPyCraft的串口终端非常有用你可以看到程序的打印输出比如Wi-Fi是否连接成功、API请求是否正常等这对于排查问题至关重要。3. 制作、焊接与调试心得看完了原理和步骤咱们聊聊动手做的时候可能会遇到哪些坑以及怎么解决。3.1 PCB焊接注意事项从实物图看这个挂件采用了贴片元件SMD。焊接时需要注意热风枪与烙铁配合对于ESP8266模块、芯片这类多引脚的贴片元件建议用热风枪配合焊膏来焊接成功率更高。对于电阻、电容等小元件用尖头烙铁细心焊接即可。检查短路和虚焊焊接完成后一定要用放大镜仔细检查特别是引脚密集的芯片底下容易发生引脚间短路桥接或者虚焊。可以用万用表的蜂鸣档测量电源和地之间是否短路。先焊接电源部分建议先焊接电源管理部分TP4056和DC-DC芯片焊接好后先不要接主控和屏幕单独给这部分上电用万用表测量输出电压是否是稳定的3.3V。确认电源正常后再焊接其他部分可以避免因电源问题烧坏昂贵的芯片。3.2 软件调试技巧Wi-Fi连接失败这是最常见的问题。首先检查uPyCraft终端里打印的Wi-Fi连接状态。确保SSID和密码正确并且信号强度足够。可以在代码里加入重试机制。API请求失败检查你的API密钥是否正确、是否还有调用次数。检查网络是否真正连通可以尝试用urequests访问一个简单的网页测试。心知天气返回的JSON结构可能微调需要根据最新的API文档来解析数据。屏幕不显示检查OLED屏幕的I2C地址是否正确通常是0x3C检查SDA和SCL两条线是否接反、是否虚焊。可以在REPL交互环境里先导入ssd1306库尝试画一个简单的图形测试屏幕好坏。按键不响应检查按键的硬件连接上拉电阻是否正确以及代码中的按键检测是轮询还是中断方式。可以在按键回调函数里先打印一条信息确认按键事件是否被正确捕获。这个“舔狗挂件”项目虽然带着一点幽默色彩但技术栈非常扎实涵盖了物联网设备从硬件到软件的全流程。通过复现它你不仅能学会立创EDA的基本操作、ESP8266的MicroPython开发还能掌握如何调用第三方网络API以及如何设计一个完整的嵌入式产品逻辑。希望这篇教程能帮你顺利做出自己的第一个智能硬件挂件。