
ComLink万能控制器
简介
这是一个集成了蓝牙手柄/键盘/鼠标/多媒体控制、ESP-NOW下位机控制、ROS2机器人控制与网页校准调参于一体的万能控制器,能过通过磁吸方式烧录调试,拓展各种外设配件,拥有丰富的DIY空间。
简介:这是一个集成了蓝牙手柄/键盘/鼠标/多媒体控制、ESP-NOW下位机控制、ROS2机器人控制与网页校准调参于一体的万能控制器,能过通过磁吸方式烧录调试,拓展各种外设配件,拥有丰富的DIY空间。开源协议
:GPL 3.0
描述
之所以做这个项目是因为在平时做机器人或嵌入式开发中更多的是专注于控制部分, 上电运行测试或调试常常是直接使用板载开关手动操作(操作受限)或借助无线串口模块用键盘操作(不够优雅), 为了解决前面的痛点, 本着造轮子就要造个大的的态度, 就有了这一版的万能控制器; 得益于 ESP32 优秀的生态, 能够使用底层的WiFi/BLE协议栈构建起各式各样的连接方式, 真正实现了 Com(共)Link(连) 的目标🌟
关于结构:

手柄外观设计灵感来源于 Switch 的 Joy-Con 手柄, 我第一次看到时就被它极具创新的连接与交互方式吸引到了, 并将其部分设计理念运用到了该项目;
模块与个性化: 通过顶部凸槽的磁吸连接器可以轻松的连接充电底座; 控制器整体设计尽可能保证对称和整洁, 使其便于 DIY 各式各样的拓展配件(握把/方向盘...), 咔哒! 即连!
仓库添加了配备磁铁安装孔位的底板, 使磁吸角度不仅限于控制器顶部.
感知与交互: 内部配置了六轴运动姿态传感器, 配备高精度滤波算法, 可以实现多样的交互方式, 还有震动马达加持(受限于空间利用, 没有使用线性马达, 待升级), 提供不错的触觉反馈.

项目一共涉及到3块 PCB 的制作, 副板和底板负责用于拓展接口, 主板双面四层设计, 部分元件需要电烙铁焊接, 电源为一块400mAh的锂电池, 摇杆模块使用的Joy-Con同款; 主控使用ESP32S3N8R8, 板载CH343P和SGM4056用于串口转USB和电池充电保护, 配备长按开关机电路, 保证按键复用性与机身简洁, 采用双电源切换电路, 自由切换主机供电或电池供电.

目前开发的核心身份有三个, 分别是HID设备,ESP-NOW主机和micro-ROS节点, 所有功能都由它们拓展开来:
- HID设备可以配置为游戏手柄,键盘,鼠标,多媒体设备; 其中键盘和多媒体设备的按键宏和各种模式都可以通过 Web 网页在线配置.
- ESP-NOW 可以点对点或广播方式和烧录了接收机固件的ESP32开发板通讯, 接收机则能将接收到的数据转换成不同协议格式给主设备(主控板/飞控).
- micro-ROS 中将手柄作为 Node 接入运行 Agent 的主机, 通过 Topic 发送控制器摇杆/陀螺仪/按键的数据.
系统的大部分参数都可以在基于 Vue 构建的网页中进行配置, 网页也设计了良好的交互功能, 能够实时查看控制器实时运行状态, 测试控制器功能, 由于使用了 vant 作为 UI 框架, 使其在移动端和电脑端都有不错的兼容性.

结构上,所有零件都是使用热熔铜螺母加螺丝或过盈配合安装,不需要使用胶水; 打印控制器的顶壳底壳和各种按键时, 摆放最好是空腔朝上, 普通支撑, 顶部Z轴距离设置为0.1mm, 效果会比较好.
电路上, 最好给主板开张钢网, 成功率会高很多, 某宝十几块; 摇杆模块要买碳刷的, 可以直接使用拆机件; 屏幕0.42寸分辨率72x40, 驱动为SSD1306, 网上现存货好像不多了, 主要是卖的是SSD1315驱动的, 这个驱动没测试过; CH343P 芯片要渠道最好要正规, 我买到一块假的导致折腾了好久😭; 主板背面的RST和BOOT按键, Flash芯片和主控之间的LED都是可以不用焊接的, 主要用于板级调试; 现版本的电池充电IC的充电电流我设置的很小, 如果需要调节可以设置标号R42和R43的电阻阻值, 充电指示灯和满电指示灯在焊接时要注意区分颜色.
装配上, 副板和主板连接是通过六根金手指焊接起来的, 一定要注意焊接的时间与温度, 没控制好容易导致外壳受热变形; 磁吸连接器的公和母在焊接前要确定方向, 保证能在底座正确方向吸合;
软件上, 没有ESP-IDF开发环境的可以通过乐鑫官方的烧录工具, Firmware 中提供了编译好的二进制固件, 烧录时要全程按住中间的功能键, 由于固件较大, 烧录时间较长, 可以直接拿个小夹子夹住按键进行烧录.
使用 Flash Download Tool 时注意, 固件的地址栏要填写
0x0, 其他保持默认即可.
下载地址: Flash Download Tool
总体复刻难度中等, 材料成本90RMB左右.

本项目开发环境为Windows+Docker
ComLink/
├── main/
│ └── main.cpp
│
├── my_components/
│ ├── apps/
│ │ ├── app_ble.c
│ │ ├── app_now.cpp
│ │ ├── app_ros.cpp
│ │ ├── app_web.cpp
│ │ └── mode.cpp
│ │
│ ├── bsp/
│ │
│ ├── micro_ros/
│ │
│ └── utils/
│
├── web_vue/
│ └── src/
├── CMakeLists.txt
├── sdkconfig
├── partitions.csv
├── deploy_web.ps1
└── docker_build.ps1
控制器程序分成三层: BSP - Utils - Apps
在apps中可以创建自己的应用, 应用需在
mode.cpp中进行注册;
注册核心包括:配置初始化函数和反初始化函数, 注册FreeRTOS任务函数;
其他还需要修改sys_mode_t枚举, OLED动画, 前端界面等.
在 原生 Linux 或 WSL2 下, 就不用Docker编译了.
- 在 Docker 图形界面或终端中找到
espressif/idf:v5.5.1的镜像下载; - 将
micro_ros中的CMakeLists.txt的内容和CMakeLists.txt.old内容对调(由静态链接转换为动态链接); - 手动删除
build目录; - 在项目中打开终端, 执行
.\docker_build.ps1进行自动编译; - 编译完成后重复步骤2和步骤3即可完成(不删除 build 目录会导致交叉工具链错误).
cd web_vue进入前端工程目录;npm run dev运行工程, 网页查看效果;cd ..回到主目录;.\deploy_web.ps1自动部署网页;- 部署完成后需重新编译项目工程.
前面就项目的特点进行了讲解, 复刻与开发注意事项进行了说明; 项目中可能还存在许多还没发现的 BUG 有待优化, 欢迎 PR, 后期也还会对功能扩充(敬请期待~), 如果有好的想法也欢迎提出, 如果觉得项目不错, 可以给仓库点个小星星🌟
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程工程成员
知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。




评论