
智能USB拓展坞
简介
基于FE2.1的智能USB拓展坞,支持6路USB2.0和一路TF卡,并支持5V 3A PD15W进行辅助供电,同时使用ESP32S3支持8路电流电压显示并显示到LCD屏幕上,还可以联网时间天气显示
简介:基于FE2.1的智能USB拓展坞,支持6路USB2.0和一路TF卡,并支持5V 3A PD15W进行辅助供电,同时使用ESP32S3支持8路电流电压显示并显示到LCD屏幕上,还可以联网时间天气显示开源协议
:MIT License
(未经作者授权,禁止转载)描述

拓展坞部分:
拓展坞主控:FE2.1
因为大部分的拓展坞都是4口,对于搞嵌入式的有点少了,而且我想一个口转tf卡,使用这个芯片,焊接方便,价格合适,7个口也足够了;

使用GL823K将一路USB转为TF卡

USB选用TVS+ESD双保护

同时根据嘉立创阻抗匹配神器进行90欧姆的走线匹配

和电脑连接的USB进行限流保护

都7个USB了,上个支持5V 3A的PD供电

因为有辅助供电所以上个防倒灌保护下电流,这里使用了SS34二极管,有压降可能识别不上电脑,推荐插上辅助供电使用

物联网部分:
采用立创ESP32R8N8开发板,主要原因是市面上的模块都要12r左右,立创的活动价格19.9还蛮有性价比的

屏幕采用2.4寸ST7789 很常见的屏幕,没什么说的,不过我后来发现ESP32S3只有接入指定引脚SPI才能达到80MHZ,否则就40MHZ,不过也够用了

基于AHT20进行本地温湿度检测

基于INA226进行电压检测,8通道

软件部分:
采用VSCode+PlatfromIO,基于Arduino开发,很好上手
这个项目本质上是一个运行在 ESP32-S3 上的“多任务仪表盘系统”,核心分成 4 层:
- 启动层:main.cpp 负责初始化外设、GUI、WiFi、传感器,然后交给 tasks.cpp 统一调度。
- 驱动层:bios.cpp 管按键、LED、蜂鸣器,aht20.cpp 和 ina226.cpp 管传感器采集。
- 业务层:userwifi.cpp 负责 WiFi 配网、AP Portal、OTA、NVS 存储,userpreference.cpp 负责偏好数据读写。
- 展示层:gui.cpp 用 LVGL 做页面管理,包含 USB 看板、天气页、设置页、AP/OTA 页面。
整体流程是:
- 开机先初始化硬件
- WiFi 连接或进入 AP 配网页
- 任务线程里周期采集数据
- LVGL 线程统一刷新界面和切页
- 按键通过事件驱动切换页面或进入二级菜单
这个项目目前主要用到了这些 FreeRTOS 功能:
- Task(任务创建与并发)
- 用到:xTaskCreatePinnedToCore、TaskHandle_t
- 解决的问题:把 GUI 刷新、WiFi 状态机、按键扫描、天气拉取、传感器采样解耦并发执行,避免主循环阻塞;并且通过“绑核”降低互相抢占带来的抖动。
- Task Delay(周期调度)
- 用到:vTaskDelay(pdMS_TO_TICKS(...))
- 解决的问题:实现固定周期轮询(如 5ms 按键、20ms WiFi、1s/5s数据刷新),控制 CPU 占用,避免死循环导致 WDT 触发。
- Mutex(互斥锁)
- 用到:xSemaphoreCreateMutex、xSemaphoreTake、xSemaphoreGive
- 解决的问题:
- 保护 LVGL 只能在受控上下文访问,避免跨线程 UI 操作导致崩溃。
- 保护天气/AHT20/INA226共享数据,避免“读到一半被写”造成显示异常或脏数据。
另外LVGL模拟器很好用,可以参考这篇文章:LVGL在VScode中安装模拟器运行配置笔记教程_vscode lvgl-CSDN博客
其实我还想加一个MQTT和JPG界面电子相册,demo我已经验证完了,感兴趣可以看一下:
总代码放到GITEE上了:SirGEN/ESP-USB-LINK - Gitee.com
这里面我觉得最好玩的还是搞的配网:
一个二维码搞定两件事:
手机自动连接 ESP32 的 AP 热点
同时自动打开浏览器访问配网
AP 开启后自动弹 captive portal(强制门户)
iOS/Android 连上需要登录的 WiFi 时,会自动弹出内置浏览器。
然后保存到NVS区域,这里提一下ESP32的默认分区表,NVS就是断电不丢失区域,保存数据的,下次复位自动连接
当然不扫二维码,直接连接,输入IP地址,也能正常连接




安装部分:

M2*5螺丝 x4; M2*5+4单头六角铜螺柱 x4; M2*26双通六角铜柱
使用部分:
1.直接烧写BIN文件即可,账号密码都通过后续本地联网传输,如果想自己看程序,需要将eSPI_TFT的User_Setup.h修改,以及LVGL的lv_conf_template.h重命名成lv_conf.h并修改
2.上电后系统从nvs读取wifi账号密码,如果没有则会出现二维码进行配网,当然对于电脑玩家也可以连接wifi后登录指定的IP地址,这里可以选择加入和风天气的区域地址和API KEY
3.然后KEY0长按切换页面,在设置页面单击KEY0,KEY2进行上下滑动,单击KEY1进入选中/取消选中,然后KEY0,KEY1上下调节功能,OTA和恢复出厂设置需要再次按下KEY1确定

测试部分:
USB2.0 U盘
SD卡


辅助供电测试:
接了一个灯,一个风扇,电源显示10W,数据线显示9W,没什么问题

天气(API+本地测试)

电流电压采集(你可以任意选择添加INA226芯片在不同通道)

DEBUG趣事:
博主刚开始买错XH2.54排线了,导致I2C短路了,后来博主买了正确的排线,一上电全部识别不上,此时的博主怀疑INA226全部烧毁了,于是在淘宝上买了两个,替换了一下,还是识别不上;
博主怀疑是代码问题,为了避免硬件干扰,买了个模块接了一下,一不小心又接反了,然后发现INA226反接也没烧坏,能识别上,博主此时意识到了问题的严重性,接着进行代码控制变量测试,发现I2C悬空的话CHECK命令在串口发送特别快,
接到PCB板子上反而要1秒一条CHECK命令,主播这时候明白了,大概率是I2C哪里连锡了没找出来,导致I2C START都卡住,找了四五分钟终于发现了,然后进行CHECK,发现淘宝买的两个还是假货666(0x41,0x42)
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。




评论