背景
最近刷B站 看到有人分享了个桌面摆件,看了下制作过程,原件不多 焊接也算简单。
想到之前买的 GC9A01 也没用上,正好自己复刻一个桌面摆件吧。
说干就干,打开 立创商城开始打板。
硬件打板及焊接
Bom 表
ID | Name | Designator | Footprint | Quantity | BOM_Manufacturer Part | BOM_Manufacturer | BOM_Supplier Part |
---|---|---|---|---|---|---|---|
1 | 100nF | C1,C4,C5,C7 | C0603 | 4 | CL21B104KBCNNNC | SAMSUNG | C1711 |
2 | 10uf | C2,C3 | C0603 | 2 | CL21B104KBCNNNC | SAMSUNG | C1711 |
3 | ORH-G35A | LED2,LED3 | LED0603-R-RD_BLUE | 2 | ORH-G35A | Orient | C205442 |
4 | 470 | R1,R3 | R0603 | 2 | MFR0W4F4701A50 | UniOhm | C57204 |
5 | 12K | R5 | R0603 | 1 | MFR0W4F4701A50 | UniOhm | C57204 |
6 | TS-1086E-AC03526 | SW1,SW2 | SW-SMD_TS-1086E-AC03526 | 2 | TS-1086E-AC03526 | XUNPU | C720473 |
7 | GC9A01 | TFT1 | GC9A01_B | 1 | FPC_LH128RIG01 | Limito | NULL |
8 | KH-TYPE-C-16P | TYPE-C1 | USB-C-SMD_KH-TYPE-C-16P | 1 | KH-TYPE-C-16P | Shenzhen Kinghelm Elec | C709357 |
9 | RT9013-33GB | U2 | SOT-23-5_L3.0-W1.7-P0.95-LS2.8-BR | 1 | RT9013-33GB | RICHTEK | C47773 |
10 | ESP32-S-P | U11 | WIRELM-SMD_ESP32-S | 1 | ESP32-S-P | null | C2764350 |
11 | CH340N | U3 | SOP-8_L5.0-W4.0-P1.27-LS6.0-BL | 1 | CH340N | WCH(Jiangsu Qin Heng) | C506813 |
这里的 BOM 表在如果在导入到立创商城时 不知到为啥封装会变成 0805 的,还好下单前注意了下,应该是 0603的封装。
pcb设计基本可以不变,我为了保证它不要过厚就没改 。直接用这个在线EDA操作并打板下单,不用装AD就能改板子还挺方便的。其实是懒得改
注意的是 这个走线是没有涉及到 圆屏的 LEDA 脚,原设计该脚默认接高,所以后面的代码是控制不了亮度的。。。
在实验室翻了半天找到了烙铁,省去了买烙铁。 其他例如 锡膏 Esp32模块 和 焊贴片用的简易加热板 等器件 等了好几天也都到了,准备焊接。
这个板子设计的 正面没有器件最后焊接上屏幕就行了,贴器件 加热焊锡膏还是很方便的。
注意 发光二极管 在pcb丝印上 矩形的是正极,六边形的是负极,不要像我第一块板子一样焊反了。
上次焊板子还是本科的时候,也算是好久没闻锡丝的臭味了🤣
手生了,焊的很烂 第一个块板子 typec母座没焊好烧入不进去固件,第二块焊的不错 接屏幕时不小心连锡太多,也失败了。最后第三块总算焊接成功, 连锡处直接拖焊搞定。
环境搭建
Esp32 有很多实用的 arduino 库,开发起来挺方便的,所以我选择 vscode 集成 的 PLatformIO 来开发工程,把B站老哥的代码和库拿来用下创个工程。由于初始化创建工程很慢,可以直接下载 离线包
相关教程: PlatformIO+VScode+ESP32开发环境搭建教程
相关模块库也可以 直接 下载,如下所示 按键引脚为 25 对应 GPIO16
添加了按键模块,对下载按键添加切换功能。 像写 C++ 程序一样给 button 类 添加对应 单击 双击 的回调函数, 相关教程。芯片的模组IO编号和代码里设置的gpio编号不同,最好设置前查下。例如 此处按键的IO
PlarformIO 包含了编译 下载 串口调试等功能。 点击 -> 按钮编译并下载后,程序显示烧录长按下载按钮即可下载固件。
注意 这里的串口助手 第一次进入 需要下载插件可能会比较慢,进入后 输入 ctrl t + ctrl h
打印帮助信息。例如修改 连接波特率 使用命令 ctrl t + b
。其命令的回显 修改默认 rts 为 0 不同步串口等此操作,可以放在配置文件 platformio.ini 中,以免每次进入需要修改。
这里我就是没设置 rts = 0 导致进入串口 程序就卡住同步不再执行了。
其次是 烧录问题 默认flash过小 编译会报错,修改下分区表即可:
platformio.ini 添加如下参数
board_build.partitions = partition.csv
partition.csv 内容
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
app0, app, ota_0, 0x10000, 0x300000,
spiffs, data, spiffs, 0x310000,0xF0000,
软件搬运
将原来的代码封装了下, Arduino ide中 的工程文件 ino 转为 cpp
主函数如下所示:
#include <Arduino.h>
#include "mytools.h"
//---------------初始wifi配置信息--------------------
const char ssid[] = "Xbox_Home"; // WIFI名称
const char pass[] = "liangkang233"; // WIFI密码
int LCD_BL_PWM = 200; // 屏幕亮度0-255
//----------------------------------------------------
static int last = -1;
void setup() {
Serial.begin(115200);
key_setup();
tft_setup();
Smart_Config(ssid, pass);
Serial.println("Power your dreams!");
}
void loop() {
unsigned int now = get_flag();
if(last != now) { // 切换模式需要启动 清理函数 和 初始化函数
fun_clear(last);
fun_setup(now);
}
fun_loop(now);
last = now;
}
Arduino 代码 分为两部分,启动的初始化 以及 while 循环执行 loop
剩下的 主要分为四部分
src\mytools.cpp 集成显示驱动 wifi微信配网 按键等功能模块。
src\getload.cpp 建立Http服务器,监听上位机发送的get请求 以解析并展示当前状态信息。
src\myclock.cpp 使用 udp 套接字和 http请求 获取ntp服务器时间天气等信息 显示时钟。上位机程序
src\remote_display.cpp 使用 tcp (建议后续改进为udp) 传输jpg图片流并刷新展示。上位机程序
常用工具 也分享下:
展示及总结
使用按键进行功能切换,单击下载按键 切换到下一功能,双击切换到上一功能。
tft驱动库 和 其他 相关代码已经打包好 托管到github上了
可惜的是 模组待机就发热严重,更别说跑上代码后了。只能放在桌上当摆件不太好把玩了。
有机会的话会继续改良,设计个壳子 整漂亮点。