迷你桌面摆件

背景

最近刷B站 看到有人分享了个桌面摆件,看了下制作过程,原件不多 焊接也算简单。

想到之前买的 GC9A01 也没用上,正好自己复刻一个桌面摆件吧。

说干就干,打开 立创商城开始打板。

硬件打板及焊接

Bom 表

IDNameDesignatorFootprintQuantityBOM_Manufacturer PartBOM_ManufacturerBOM_Supplier Part
1100nFC1,C4,C5,C7C06034CL21B104KBCNNNCSAMSUNGC1711
210ufC2,C3C06032CL21B104KBCNNNCSAMSUNGC1711
3ORH-G35ALED2,LED3LED0603-R-RD_BLUE2ORH-G35AOrientC205442
4470R1,R3R06032MFR0W4F4701A50UniOhmC57204
512KR5R06031MFR0W4F4701A50UniOhmC57204
6TS-1086E-AC03526SW1,SW2SW-SMD_TS-1086E-AC035262TS-1086E-AC03526XUNPUC720473
7GC9A01TFT1GC9A01_B1FPC_LH128RIG01LimitoNULL
8KH-TYPE-C-16PTYPE-C1USB-C-SMD_KH-TYPE-C-16P1KH-TYPE-C-16PShenzhen Kinghelm ElecC709357
9RT9013-33GBU2SOT-23-5_L3.0-W1.7-P0.95-LS2.8-BR1RT9013-33GBRICHTEKC47773
10ESP32-S-PU11WIRELM-SMD_ESP32-S1ESP32-S-PnullC2764350
11CH340NU3SOP-8_L5.0-W4.0-P1.27-LS6.0-BL1CH340NWCH(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

剩下的 主要分为四部分

  1. src\mytools.cpp 集成显示驱动 wifi微信配网 按键等功能模块。

  2. src\getload.cpp 建立Http服务器,监听上位机发送的get请求 以解析并展示当前状态信息。

  3. src\myclock.cpp 使用 udp 套接字和 http请求 获取ntp服务器时间天气等信息 显示时钟。上位机程序

  4. src\remote_display.cpp 使用 tcp (建议后续改进为udp) 传输jpg图片流并刷新展示。上位机程序

常用工具 也分享下:

展示及总结

使用按键进行功能切换,单击下载按键 切换到下一功能,双击切换到上一功能。

tft驱动库 和 其他 相关代码已经打包好 托管到github上了

可惜的是 模组待机就发热严重,更别说跑上代码后了。只能放在桌上当摆件不太好把玩了。

有机会的话会继续改良,设计个壳子 整漂亮点。