站内搜索
发作品签到
专业版

智能USB拓展坞

工程标签

29
0
0
0

简介

基于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屏幕上,还可以联网时间天气显示
星火计划2026

开源协议

MIT License

(未经作者授权,禁止转载)
创建时间:2026-02-03 12:42:42更新时间:2026-05-20 09:55:41

描述

拓展坞部分:

拓展坞主控: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 功能:

  1. Task(任务创建与并发)
    • 用到:xTaskCreatePinnedToCoreTaskHandle_t
    • 解决的问题:把 GUI 刷新、WiFi 状态机、按键扫描、天气拉取、传感器采样解耦并发执行,避免主循环阻塞;并且通过“绑核”降低互相抢占带来的抖动。
  2. Task Delay(周期调度)
    • 用到:vTaskDelay(pdMS_TO_TICKS(...))
    • 解决的问题:实现固定周期轮询(如 5ms 按键、20ms WiFi、1s/5s数据刷新),控制 CPU 占用,避免死循环导致 WDT 触发。
  3. Mutex(互斥锁)
    • 用到:xSemaphoreCreateMutexxSemaphoreTakexSemaphoreGive
    • 解决的问题:
      • 保护 LVGL 只能在受控上下文访问,避免跨线程 UI 操作导致崩溃。
      • 保护天气/AHT20/INA226共享数据,避免“读到一半被写”造成显示异常或脏数据。

另外LVGL模拟器很好用,可以参考这篇文章:LVGL在VScode中安装模拟器运行配置笔记教程_vscode lvgl-CSDN博客

其实我还想加一个MQTT和JPG界面电子相册,demo我已经验证完了,感兴趣可以看一下:

ESP32之初见MQTT-CSDN博客

ESP32电子相册_esp32制作相册-CSDN博客

总代码放到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

3D模型

序号文件名称下载次数
暂无数据

附件

序号文件名称下载次数
1
视频演示.zip
1
2
firmware.bin
0
克隆工程
添加到专辑
0
0
分享
侵权投诉
知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航