Skip to content
forked from SmallPond/X-Knob

X-Knob - LVGL UI 框架下的智能旋钮 (smartknob + X-TRACK) // A smart knob based on LVGL UI framework(X-TRACK)

License

Notifications You must be signed in to change notification settings

superyawei/X-Knob

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

59 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

X-KNOB

去年(2021)网上冲浪发现了 smart_knob(SK),心动不已。但一番了解后,马上被缺货的“天价”无刷电机劝退😅。最近在刷 B 站时发现 @455555菌 和 虫二大佬(@fywbcchong2)开源的 Super Dial 电机旋钮屏,这就到我动手玩一玩的时候了🤗。

Super Dial 电机旋钮屏替换了原 smart_knob 的“昂贵电机”且采用了直筒设计,个人觉得更为美观。

另外,smart_knob 作者在项目中提到未来想使用 lvgl 来设计 UI。

migrate to LVGL, for better display rendering and easy support for menus, etc. Shouldn't require a full 240x240x24b framebuffer in memory, freeing some for wifi, etc.

巧的是之前我玩过 X-TRACK,UI 极其丝滑。当时基于稚晖君的 Peak 修改了部分硬件在 ESP32 上把玩了一番 Deck。因此,本项目将会是 Smart Knob + X-Track UI 的一个合成版。故我称为它 X-Knob

Demo video

演示视频

3D CAD

3d

上图(3D 装配图)来自455555菌的视频

主要硬件列表:

  • 3 块 PCB:主控板 + 驱动板 + 屏幕板
  • MCU: ESP32-S3 WROOM-1U-N16R8
  • 屏幕: 240x240 圆形 LCD GC9A01 (1.28 寸) + 40.0mm 表蒙子
  • 磁编码器:MT6701CT

X-KNOB 支持的特性:

  • X-TRACK UI 框架
  • 7 种旋钮模式:边界限制、棘轮、回弹等模式的组合
  • 实现基于 LVGL 框架下 smart-knob 的 UI
  • Surface Dial
  • 按键按压振动反馈

待支持的特性:

  • 基于 ESP32-S3 USB CDC 实现类似 Electron_Bot 的电脑配件模式

实现记录

LVGL

基于已有框架增添自己的图片:

UI 设计工具:

SimpleFOC

X-TRACK

消息通信机制

  • Subscribe/Unsubscribe:订阅者向发布者发起/取消订阅
  • Publish: 发布者向订阅者发布消息
    • 当发布者调用此函数时,消息通知框架将会依次调用各个订阅者通过SetEventCallback() 函数注册的回调函数。
  • Notify: 订阅者向发布者主动发送消息
    • 当订阅者调用此函数时,消息通知框架将调用发布者通过SetEventCallback()函数注册的回调函数。
  • Pull: 订阅者主动向发布者拉消息
    • 消息框架将调用发布者注册的回调函数。这种情况下,发布者注册的 callback 是判断EVENT_SUB_PULL事件,将信息填充到订阅者指定的 buf 中

个人理解:刚开始接触 X-TRACK 的消息通信框架时,看到 Subscribe 调用,以为这是标准的 Pub/Sub 模型,Pulblish 调用向所有订阅者发布消息,额外的 Notify 调用可以指定某个订阅者发送特定消息。但是实际用起来发现跟我想得不一样,Notify 调用是订阅者向发布者发送消息。所以这里的 Pub/Sub 更向是 Server/Client 的架构,Sub 通过 Subscribe 调用类似 client 的 connect 调用发起连接。不过对 publisher 来说, publish 调用省去了 server/client 模式下对 server 对 client 的管理逻辑。

硬件

结构上可优化的点:

  • 屏幕固定不稳,容易晃动,导致屏幕显示和面板对不齐出现黑边:适配件应该开更深的孔?
  • 上下结构件互相摩擦,有一些噪音

电路问题:

  • 需要去掉 USB 接口到 ESP32-S3 GPIO19 和 GPIO20 的两个电容(在原理图上是 C17 和 C18,PCB 上的丝印是 C10 和 C11),去掉后可正确识别出 USB 串口,可以直接通过该串口下载程序

编译问题

问题:sdkconfig.h no such file or directory

原因:ESP32-S3 的支持需要 arduino-esp32 版本 >= 2.0.3,在 platformio 中需要对应安装 Espressif 32 >= 4.4.0 以上,我当前使用的是 5.2.0 版本,查看 platformio 安装目录下的文件.platformio\platforms\espressif32\platform.json可看到其对应使用 arduino-esp32 2.0.5 版本。

    "framework-arduinoespressif32": {
      "type": "framework",
      "optional": true,
      "owner": "platformio",
      "version": "~3.20005.0"
    },

解决方案:PIO Home -> Platforms -> Updates 更新版本

参考项目

About

X-Knob - LVGL UI 框架下的智能旋钮 (smartknob + X-TRACK) // A smart knob based on LVGL UI framework(X-TRACK)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 97.5%
  • C++ 1.4%
  • Python 0.9%
  • Ruby 0.1%
  • CMake 0.1%
  • Makefile 0.0%