Giter Site home page Giter Site logo

peng-zhihui / holocubic Goto Github PK

View Code? Open in Web Editor NEW
5.9K 117.0 1.2K 145.6 MB

带网络功能的伪全息透明显示桌面站

License: GNU General Public License v3.0

C++ 2.78% C 96.97% CMake 0.01% Objective-C 0.01% Makefile 0.01% Shell 0.01% Python 0.15% Processing 0.07%

holocubic's Introduction

HoloCubic--多功能透明显示屏桌面站

视频介绍: https://www.bilibili.com/video/BV1VA411p7MD/

0. 关于本项目

稚晖君注:这是为了更新视频,缓解本人拖更两个月的尴尬,用一个周末时间赶出来的一个有意思的小玩意 :D

如视频所述,本项目有意思的地方在于使用了一个分光棱镜来设计出伪全息显示的效果。这个小设备总的来说功能比较多,因为搭载了WiFi和蓝牙能力可以实现很多网络应用,在本仓库中给大家提供了一个开发框架以及一些基础功能(天气、粉丝数监视器等),大家可以基于我的方案继续扩展实现更多应用。

本项目的硬件方案是基于ESP32PICO-D4的,乐鑫的一个很实用的MCU芯片,由于采用了SiP封装是的PCBA整板面积能做到一个硬币大小;软件方面主要是基于lvgl-GUI库,我移植了ST7789 1.3寸240x240分辨率屏幕的显示屏驱动,同时将MPU6050作为输入设备通过感应的方式模拟编码器键值来交互。

1. 硬件打样说明

PCB打样的话暂时没发现有啥需要特别注意的。 PCB文件可以直接拿去工厂打样,两层板很便宜,器件BOM的话也都是比较常用的,整板成本在50元以内。

Hardware文件内目前包含两个版本的PCB电路:

  • Naive Version :即视频中出现的版本,板载ESP32、IMU、环境光传感器、SD卡槽、下载电路、以及两个RGB灯
  • Ironman Version :基于上面的版本轻微修改,删去了环境光传感器,修改了PCB形状以适配新的外壳

因为新款的外壳计划是使用CNC进行金属加工,因此环境光容易被遮挡,而且该功能使用场景不多所以在新版删去了。

外壳加工 根据自己喜欢的版本选择,3D Model文件夹目前包含四个版本的外壳文件:

  • Naive Version :即视频中出现的版本,比较简约(因为临时赶工设计的),最好使用光固化3D打印加工

  • Bilibili Version :视频中后面出现的B站百大奖杯形式的外壳结构,适配Naive Version的PCB, 属于娱乐性质,非百大UP不建议采用

  • Metal Version :视频发布后全新改版的外壳结构设计,优化了布局控件整体更紧凑精致,适配Naive Version的PCB,该建议使用CNC加工制作

  • Ironman Version :新设计的野生钢铁侠风格结构件,该版本为和朋友合作设计的,后面可能会授权他联名量产,该结构适配Ironman Version的PCB

野生钢铁侠联名的版本的结构件加工比较复杂,而且需要后期喷砂、阳极氧化等工艺所以单件制造成本很高(打听了下整套3个部件至少要1000元+),因此大家自己有加工渠道的可以用提供的文件自己去做。

没有渠道但是又想要这个版本硬件的,我授权了那位朋友量产一小批,他的店铺名为Xikii,是做客制化键盘很有经验的一个极客,大家感兴趣的可以去关注一下~

2. 固件编译说明

固件框架主要基于Arduino开发完成,玩过Arduino的基本没有上手难度了,把Firmware/Libraries里面的库安装到Arduino库目录(如果你用的是Arduino IDE的话)即可。

我使用的是Visual Studio上面的Visual Micro插件进行Arduino开发,因为对VS比较熟悉,大家选择自己喜欢的IDE就好了。

然后这里需要修改一个官方库文件才能正常使用:

首先肯定得安装ESP32的Arduino支持包(百度有海量教程),然后在安装的支持包的esp32\hardware\esp32\1.0.4\libraries\SPI\src\SPI.cpp文件中,修改以下代码中的MISO为26

if(sck == -1 && miso == -1 && mosi == -1 && ss == -1) {
    _sck = (_spi_num == VSPI) ? SCK : 14;
    _miso = (_spi_num == VSPI) ? MISO : 12; // 需要改为26
    _mosi = (_spi_num == VSPI) ? MOSI : 13;
    _ss = (_spi_num == VSPI) ? SS : 15;

这是因为,硬件上连接屏幕和SD卡分别是用两个硬件SPI,其中HSPI的默认MISO引脚是12,而12在ESP32中是用于上电时设置flash电平的,上电之前上拉会导致芯片无法启动,因此我们将默认的引脚替换为26。

也可以通过设置芯片熔丝的方式解决这个问题,不过那样的操作是一次性不可逆的,不建议这么玩。

另外:

由于我赶视频制作,代码都是临时写的非常杂乱有很多dirty code,因此仓库中的是所有驱动调通之后的模板代码,可以自己基于这个框架自由开发。

APP应用代码我在整理中慢慢也会更新出来。

3. Visual Studio模拟器 & 图片转换脚本

Software文件夹中包含了一个Visual Studio的工程,用VS打开(需要安装C++开发组件)后可以在电脑上模拟LVGL的界面效果,改好之后代码粘贴到Arduino固件那边就可以完成界面移植。

这样省的每次修改都要重新交叉编译Arduino的固件,提升开发效率。

ImageToHolo文件夹下包含一个Python脚本,用于将图片转换成HoloCubic固件中用到的图像资源。

因为图像资源一般都比较占空间,如果全部存在ESP32的Flash中的话存不了几张,因此我在框架中移植了LVGL的FAT文件系统支持,可以将图片资源存储在SD卡内进行读取。

官方的图转换工具是在线的:https://lvgl.io/tools/imageconverter ,需要选择 Indexed 4 colors 格式。

但是官方工具每次只能转换一张还要上传下载很麻烦,因此我自己写了个脚本用于批量转换。

HoloCubic用到的图片资源名为xxx.bin文件,大家用我提供的脚本转好后放入SD卡,然后可以像这样读取:

lv_obj_t* imgbtn = lv_imgbtn_create(lv_scr_act(), NULL);
lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_PRESSED, "S:/dir/icon_pressed.bin");
lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_RELEASED, "S:/dir/icon_released.bin");

其中S:指代SD卡根目录(注意S是大写的),后面就是跟Linux中的路径完全表示一致了。

该脚本参考了W-Mai/lvgl_image_converter 的实现。

另外由于转换脚本的使用需要再Python环境下,如果大家不想安装环境的话,也可以用我预编译好的exe文件来转,使用方法很简单,把jpg/png/bmp图片拖到holo转换器.exe的图标上就行了(可以同时拖动多个上去),会在当前目录生成对应的.bin文件。

转换器软件的下载地址:

链接:https://pan.baidu.com/s/11cPOVYnKkxmd88o-Ouwb5g 提取码:xlju

4. 关于分光棱镜

我用的时25.4mm x 25.4mm x 25.4mm的棱镜,淘宝应该可以搜到,单个价格80元左右。

分光棱镜的固定比较麻烦,用胶水的话容易渗入屏幕导致水印,因此建议去TB搜一下OCA胶,这是一种全贴合屏幕工艺中用来粘合屏幕的固态胶,效果很不错也很便宜。

但是OCA粘性非常强,大家操作一定要仔细不要留气泡,不然粘上后就很难取下了。

其他的后续再补充,有用的话记得点星星~

holocubic's People

Contributors

cweib avatar peng-zhihui avatar timgates42 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  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

holocubic's Issues

I2C初始化失败求助

程序上传后串口输出错误信息:
E (24494) err: esp_err_t = 259
E (24496) i2c: /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/driver/i2c.c:1267 (i2c_master_cmd_begin):i2c driver not installed

注释掉 mpu.init(); 后屏幕显示等一切正常,所以排除掉焊接问题。
逻辑分析仪抓SDA、SCL引脚无数据。

错误代码259 :ESP_ERR_INVALID_STATE
应该往哪个方向排查问题?

向稚辉君安利开源项目 - LightCube

LightCube 💠
A 3D Dynamic Display System Based on Voice Control

[Paper (Chinese)] | [Poster] | [Slides] | [Patents]

LightCube

video-YouTube video-B站

光立方作为一种新型的裸眼3D显示技术,用户不需要配戴任何观看辅助工具就能达到裸眼3D显示的效果,给人们带来了全新的视觉体验。本项目设计一种基于语音控制的3D动态显示系统,采用LD3320非特定人声语音识别芯片以及STM32F407作为光立方核心控制器实现全彩高阶的语音控制光立方设计,解决了现有光立方显示色彩单一、分辨率低、人机交互性能差、设计复杂、成本较高等的问题。语音识别模块与STM32之间采用UART串口通信,将语音识别结果作为控制指令发送给STM32,控制光立方的显示动画和工作模式,并用模块自带的喇叭播放背景音乐。SM16126串转并级联驱动输出电路的设计,降低了系统功耗,为高阶光立方的设计提供了一种可行的实现方案。测试表明,光立方显示系统对语音指令识别的响应速度快、识别精度高、工作稳定,具有较好的使用体验,使人们的生活更加智能化和人性化。

  • 项目截图


(click this picture to watch a video)


Fig 1. System block

  • 衍生项目

EmotionCube

EmotionCube 💠
Intelligent Speech Companion Robot Based-on Sentiment Analysis

GitHub English Version Chinese Version Video Video


以情绪分析和智能语音为研究对象,作者充分调研了目前家居机器人的研究现状,大部分都是以释放人类体力与脑力为目标,而忽视了“家”的真正含义;在这个基础上作者提出了智能家居的新方向——情感交互。整个项目的最终目标是为了营造一个真正的智能“家”居,让科技与人类情感产生共鸣,缓解人们的生活压力,打造一个温馨舒适的情感家居环境。采用全彩12 阶光立方作为三维动态显示器,基于表情识别和智能语音制作一种智能陪伴机器人。

本系统主要由三部分组成:

  • 表情识别摄像头——树莓派+摄像头搭建完成;
  • 智能音箱——FPGA 语音识别和麦克风播报;
  • 三维动态显示系统——包括电源开关电路、控制电路和级联驱动电路,并留下足够空间扩展后续电路。

全彩的3D 显示效果增加了使用者的视觉体验,表情识别和智能语音促进了人机交互,真正实现了人机语音交互,更加智能化、人性化。

Emotion Cube

编译一直会报这个,不知用不用管,烧录成功后重新上电没反应

In file included from sketch\rgb_led.h:4:0,
from sketch\imu.h:8,
from C:\Users\Rtwo\Downloads\HoloCubic-main\2.Firmware\HoloCubic_fw\HoloCubic_fw.ino:2:
C:\Users\Rtwo\Documents\Arduino\libraries\FastLED/FastLED.h:14:21: note: #pragma message: FastLED version 3.003.002

pragma message "FastLED version 3.003.002"

                 ^

In file included from C:\Users\Rtwo\Documents\Arduino\libraries\FastLED/FastLED.h:65:0,
from sketch\rgb_led.h:4,
from sketch\imu.h:8,
from C:\Users\Rtwo\Downloads\HoloCubic-main\2.Firmware\HoloCubic_fw\HoloCubic_fw.ino:2:
C:\Users\Rtwo\Documents\Arduino\libraries\FastLED/fastspi.h:130:23: note: #pragma message: No hardware SPI pins defined. All SPI access will default to bitbanged output

pragma message "No hardware SPI pins defined. All SPI access will default to bitbanged output"

屏幕购买

屏幕的购买链接有吗,推荐一下,谢谢啦

没有ino文件

现在文件夹里边 没有ion文件了 是放弃arduino编译了吗

A fatal error occurred: Timed out waiting for packet content

下载时经常遇到:A fatal error occurred: Timed out waiting for packet content 和 A fatal error occurred: MD5 of file does not match data in flash! 两个问题。中间也有下载成功过,不知道是什么原因导致的。请教一下应该如何解决!

请问这个错误是不是我找的MPU6050文件有问题

1、这里显示两个变量没有定义,是不是我找的MPU6050文件有问题,可以的话请大佬发一下这个文件夹。
2、这里出现了重复库会不会影响最后的编译结果。
3、安装完esp32的支持包后,出现很多开发板的选项,请问编译的时候需要选择哪一个。

`E:\Arduino\libraries\MPU6050\MPU6050.cpp: In member function 'int8_t MPU6050::GetCurrentFIFOPacket(uint8_t*, uint8_t)':
E:\Arduino\libraries\MPU6050\MPU6050.cpp:2763:32: error: 'BUFFER_LENGTH' was not declared in this scope
uint8_t Trash[BUFFER_LENGTH];
^
E:\Arduino\libraries\MPU6050\MPU6050.cpp:2769:39: error: 'Trash' was not declared in this scope
getFIFOBytes(Trash, (uint8_t)RemoveBytes);
^

"WiFi.h" 对应多个库
已使用: E:\Arduino\hardware\espressif\esp32\libraries\WiFi
未使用:E:\Arduino\libraries\WiFi

"SD.h" 对应多个库
已使用: E:\Arduino\hardware\espressif\esp32\libraries\SD
未使用:E:\Arduino\libraries\SD

exit status 1
为开发板 ESP32 Dev Module 编译时出错。`

1

1

未找到2.Firmware\HoloCubic_fw\lv_fs_fatfs.c

我用vs打开的时候出现这个
Ignoring source code that is included in the project but can not be located: E:\XXX\HoloCubic\2.Firmware\HoloCubic_fw\lv_fs_fatfs.c
编译时出现:
ensa-esp32-elf-g++*: error: C:\Users\zjy\AppData\Local\Temp\VMBuilds\HoloCubic_fw\espressif_pico32\Debug\lv_fs_fatfs.c: No such file or directory

Failed to connect to ESP32: Timed out waiting for packet header

`esptool.py v2.6
Serial port COM8
Connecting......................................____上传项目出错
_

A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header
`
请问使用arduino烧写不成功,该如何解决这个问题啊?
按照稚晖君说的已经短接了VT2的GPIO0和GND,始终报上面的错。

求如何自学整套理论和实践

您好大佬,我是个热爱技术的小伙,但是一直苦于时间关系,且没有方向指引。
一直想学习整一套底层硬件设备,电路,到接口,再到上层软件开发的流程。
目前只会硬件之上的软件层面,缺乏底层硬件和接口的理论和能力。
求推荐书籍,实在是内心焦灼。感谢🙏

转换软件有问题。

你好,在做这个的时候我使用的是心知天气的天气的图标,但是在转换的时候黄色的太阳转成蓝色的太阳了。我以为是屏幕的原因,又去官网那转换下,结果没问题,希望大佬可以更新下。

将MainBord上的电容C7,由 0.1uf 改为 10uf 后,可以实现Ardunio IDE下的一键下载

在Ardunio IDE环境下,在c7使用0.1uf电容时,下载程序需要手动将GPIO0拉低才能在复位时进入烧写状态,不利于调试。
原因是0.1uf电容加10k电阻组成的复位电路,充电时间所需要的时间极短,复位完成时,Ardunio IDE的烧录程序来不及将CP2102的RTS拉高、DTR拉低,以至于ESP32复位结束后识别到的GPIO0依旧为3.3V,无法进入烧录模式。
通过计算,在此电路中,复位时间与RC成正比,所以加大电容或电阻可以延长复位时间。理论上1uf的就足够了。
由于手头没有1uf的电容,所以直接上了10uf,实测可以在Ardunio IDE下一键下载。其他环境由于下载程序的不同,可能会有差异。
OTA的兄弟当我没说。。。。。。

请教以下pcb中天线的设计?

我看了下主板的pcb但是没有找到天线走线,如图,请问这个是藏在某个巧妙的地方了吗?还是说也可以不画?
image

显示屏不亮

/lvgl/src/lv_draw/lv_draw_img.c@77%20lv_draw_img->Image%20draw:%20src%20is%20NULL
串口打印出这样的信息,显示屏不亮,请问怎么解决?

器件选型的问题

请教大佬两个器件选型的问题
1.S8050 npn晶体管电压40V的可以用吗?
2.TPYEC转USB接口用哪个型号的?
谢谢~

holo转换器.exe转换jpg图片问题

从百度云下载的holo转换器.exe软件,把jpg图片拖到holo转换器.exe软件,生成的是“.holo”的文件,没有生成.bin文件。

能否加入原理图和PCB的PDF文档

由于我的主力电脑是Linux,无法安装AD。且不想通过虚拟机的方式安装AD。不知能够提供生成原理图和PCB的PDF文档?
如果可以的话能为之前的项目和日后的项目也一并提供PDF文档吗?

SPI管脚设置

esp32的SPI支持管脚映射,可以在setup时用void begin(int8_t sck=-1, int8_t miso=-1, int8_t mosi=-1, int8_t ss=-1);指定而不用去改那个spi的CPP文件
参考spi.h

ESP32-PICO芯片发热严重

下载稚晖君原始工程不带WIFI的代码,正常工作ESP32没有什么问题。
等我实现了WIFI联网等功能以后 ESP32一上电就开始发热,我估摸着少说有60℃,这正常吗

MPU6050**焊盘是否应该接地?

稚晖君您好,我发现您的PCB中MPU6050**焊盘为GND网络且打了过孔,但MPU6050数据手册中说明
“The MPU-60X0 has very low active and standby current consumption. The exposed die pad is not required for heat sinking, and should not be soldered to the PCB. Failure to adhere to this rule can induce performance changes due to package thermo-mechanical stress. There is no electrical connection between the pad and the CMOS.”
MPU-60X0有很低的动态性能和标准的电流损耗。该焊盘不要求进行散热,同时也不能连接到PCB上。该焊盘是为了增加芯片的机械应力,不应该有任何的电气连接。“
请问您将**焊盘接地是什么原因,接地会不会对MPU6050造成影响?如果手册中说不接地应该怎么处理呢?

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.