Giter Club home page Giter Club logo

smallpond / x-knob Goto Github PK

View Code? Open in Web Editor NEW
562.0 11.0 88.0 25.21 MB

X-Knob - A smart knob based on LVGL UI library, supports Smart Home(MQTT) and Surface Dial (BT) // LVGL UI 框架下的力反馈智能旋钮 (smartknob + X-TRACK)

Home Page: https://www.dingmos.com/index.php/archives/125/

License: MIT License

C++ 1.73% C 97.23% CMake 0.05% Python 0.85% Makefile 0.02% Shell 0.01% Handlebars 0.02% Ruby 0.08% HTML 0.01%
knob lvgl smart esp32 x-track arduino simplefoc mqtt surface-dial wifi

x-knob's Introduction

X-Knob: A Smart Knob Based on LVGL UI Framework

Stars Badge Forks Badge Pull Requests Badge Issues Badge GitHub contributors License Badge

喜欢这个项目吗?请考虑给 Star ⭐️ 以帮助改进!


中文文档English

去年(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
  • 3205 无刷直流电机(无限位)(10 RMB)
  • 602535 600mAh 锂电池

X-KNOB 支持的特性:

  • X-TRACK UI 框架
  • 7 种旋钮模式:边界限制、棘轮、回弹等模式的组合
  • 实现基于 LVGL 框架下 smart-knob 的 UI
  • Surface Dial
  • 按键按压振动反馈
  • 电源管理
    • 电池管理、系统深度休眠;
    • V2(最新) 硬件支持 UPS
    • 自动熄屏
  • X-Knob 通过 MQTT 接入 Home Assistant,可实现控制接入 HASS 的设备
  • 屏幕亮度调节、WiFi 和 MQTT 的 Web 配置
  • 支持 OTA 升级

待支持的特性:

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

Get Started

基本环境:

  1. 基本配置
git clone https://github.com/SmallPond/X-Knob.git

# 使用 PlatformIO 打开 Firmware 工程
# 重命名 src/secrets.h.example 文件为 src/secrets.h
# 并且修改相关配置:WiFi 密码,MQTT Server 等
cp src/secrets.h.example src/secrets.h

# (Option)修改 config.h 文件的 MQTT_HOST 为你的名字
# 该宏用来附带在 MQTT Topic 中
#define MQTT_HOST               "dingmos"      
  1. 选择是否使用 MQTT 功能

若暂时不使用 MQTT 功能或没有配置好 WiFi 需要修改 platform.ini 文件来禁用 MQTT 功能

-DXK_MQTT=0 

这种方式将保留 Smart Home(S-Home)的 UI 供玩耍,但不会连接 WiFi 和调用 MQTT 发送消息。

  1. 编译 && flash && enjoy

关于固件下载的注意事项

  • ESP32-S3 支持 USB 下载,可以在不拆开 X-knob 的情况下直接升级固件,参考#5
  • 直接使用 Release 中的固件,flash 是需要偏移地址 0x10000,主要原因是 pio 编译出来的固件只包含 app 部分,而不含 bootloader 等部分。

实现记录

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 的管理逻辑。

编译问题

问题: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 更新版本

参考项目

x-knob's People

Contributors

cofincup avatar jwxa avatar morris13579 avatar smallpond avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

x-knob's Issues

出现找不到ffat分区的情况

作者您好,在查看串口信息的时候,我发现了以下三句话:
[ 5647][E][FFat.cpp:35] check_ffat_partition(): No FAT partition found with label ffat
[ 5654][E][FFat.cpp:49] begin(): No fat partition found on flash
FFat Mount Failed
一开始我举得可能是分区没搞好,然后我修改了一下分区表,但还是无济于事,想问一下这种情况要如何处理呢?

WEB后台MQTT填写超长密码之后,进OTA功能会复位

操作:
Erase之后全新烧写的X-knob,进Settings - OTA,电脑连进192.168.4.1配置MQTT,其中密码为128字母+数字+符号的自动生成密文,点击保存,提示成功。然后配置WiFi,填入SSID和密码(10位字母+数字),点击确认的瞬间,屏幕停转,一两秒之后重启。再进Settings - OTA 就会在4~5个点后复位重启。
-----------今天搭了编译烧写环境,复现成功。

X-Knob 发现 Home Assistant 中的智能设备

X-Knob 已经实现接入 Home Assistant 来控制智能设备 #3,但当前 X-Knob 控制的智能设备都是固化代码中的,未来期望在X-Knob 支持动态增加或删除智能设备,有两个方向:

  • 和 Home Assistant 通过 MQTT 交互,Home Assistant 将设备发送给 X-Knob
  • 制作一个上位机软件对 X-Knob 进行配置

目前更倾向第一个方向,但是暂时没有想到好的方案。

关于X-Knob的编译和上传

程序在下载之后停在了这个位置,没能进入主程序

编译环境
PlatformIO IDE
ESP32-S3-WROOM-1 16MB Flash, 8MB PSRAM
espressif32 6.3.2

mode:DIO, clock div:1
load:0x3fce3808,len:0x44c
load:0x403c9700,len:0xbe4
load:0x403cc700,len:0x2a38
entry 0x403c98d4
E (86) esp_core_dump_flash: No core dump partition found!
E (86) esp_core_dump_flash: No core dump partition found!

在readme中有提及,flash下载地址0x10000,请问如何在platform.ini中配置下载地址和下载bootload.
有尝试设置board_build.upload.offset_address = 0x10000 似乎没有起作用.

有了解的朋友,帮忙告知一下,谢谢.

使用platfromio编译后内存占用过多

Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
Error: The program size (1769221 bytes) is greater than maximum allowed (1310720 bytes)
RAM: [=== ] 28.5% (used 93400 bytes from 327680 bytes)
*** [checkprogsize] Explicit exit, status 1
Flash: [==========] 135.0% (used 1769221 bytes from 1310720 bytes)

编译后内存占用过多,超过100%不能烧录

程序编译错误

程序编译总是错误,不知道怎么修改?小白,望指点。
另外说硬件去电电容就可以USB链接,具体要去掉哪两个电容呢?

创建.bin文件

我真的很喜欢你们的产品,非常好,你们能帮我创建一个 .bin 文件,以便我可以将其烧录为 esp32 吗?

接入 Home Assistant 控制智能家居

当前考虑使用 MQTT 接入,使用 HASS 的自动化配置触发条件。对应实现以下几个部分:

  • 【UI】X-Knob 上增加智能家居控制界面,包括菜单选择项和控制界面
  • HASS 配置 MQTT
  • HASS 上增加自动化配置

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.