【Spiffo】光速项目:LVGL v9框架下的MIPI简易相机_Part1
摘要
由于现在网上对于LVGL v9以及MIPI DSI、CSI的资料少的可怜,本期来做一个简易MIPI相机的demo,来大概串一下这几个东西的使用思路和框架构建。(演示的gif只能传5M,难绷座机画质)
根据使用场景的不同,文章第一节先介绍如何快速部署项目运行起来(毕设人狂喜),后面再具体介绍这个demo的各种细节,各取所需吧。如果项目有任何环节出现问题可以留言,我会尽可能回答。
准备工作
因为教程还是面向新手的,所以这次我用各位容易买到的树莓派,不过你可以不用,实际上任何平台的任何板子都可以用,你只需要确认你的板子是支持mipi dsi,mipi csi的MPU即可。单片机姑且不做讨论,因为我确实没有带mipi控制器却不能跑Linux的芯片。
于是乎你需要如图的这些东西:
注意:
1.如果你用的恰好是树莓派,别买最新的module v3摄像头,已经不支持经典的控制方式了
2.这种类型的摄像头和显示屏都是专板专用的(比如其他各种板子的外设,即使是这样的软排线连接,也不见得就能用),因为排线只充当导线的作用,能不能兼容取决于其接口定义是否相同,最好买官方适配的外设
安装方式:
拽住黑色的插槽卡扣网上拉,引脚面朝凹槽插入,然后卡扣摁回去就行了
安装完长这样,注意摄像头和显示屏的接口不可调换:
部署:
一、工程下载
先下载我已经测试好的demo文件:
还是百度网盘吧,测试了几次,github在国内不好使,链接:
https://pan.baidu.com/s/1GHs6pqRNpbFEuXX_k2VhMw 提取码: tj38
下载以后解压出来有两个东西,如图:
(1)左边是一个转png格式的第三方库(开源的,感恩):
GitHub - lvandeve/lodepng: PNG encoder and decoder in C and C++.
(2)右边的是配置好的程序
二、一些简单的配置
在编译使用以前有些东西需要根据实际情况进行修改
1、关闭默认的桌面
首先是关闭默认的桌面程序让出frame buffer设备来,各家有各家的调法,我这里说一下树莓派怎么关闭(事实上基于gnome框架的桌面程序大部分都能这样关)
sudo systemctl set-default multi-user.target
即可关闭,重启后生效,关闭后长这样:
如果需要再次打开可以:
sudo systemctl set-default graphical.target
2、修改设备号
然后需要根据实际的设备号进行设备的选择,这个工程使用了三种设备:fb设备(屏幕)、v4l2设备(摄像头)、以及evdev(屏幕的触控),他们都在main.c里进行修改。
(1)前两类如果每种只使用一个设备(这个板子上只有一个屏和一个摄像头)的话默认大概率就是fb0和video0,不用改。假设确实是不一样的话,修改在main.c的(CTRL + F可以进行搜索)
和
(2)然后是evdev,这个不一样的概率比较大, 需要安装工具测试一下设备是哪个,不同的板子能下载到的包不一样,这里简单过一下就得了,实在不行从0开始往后一个个试,总能对的。
树莓派安装这两个东西,
sudo apt install input-utils
sudo apt install evtest
安装完以后输入lsinput就可以看到各种输入设备了:
触摸通常是I2C驱动的,所以重点找I2C字眼的内容,比如这样,可以看到设备是 /dev/input/event4
找到以后验证一下是否是它,输入下面内容后,摸一下屏幕在控制台如果有输出,说明就是它了
evtest /dev/input/event4
然后可以在这里(也是main.c里)修改事件设备号,上面测试出来是多少就写多少
3、图片的保存路径
只需要修改中间框起来的部分,A:不用管,我已经处理好了,output.png是输出命名,想换也可以
举个例子,比如我想放在系统根目录的文件夹output里,命名为233.png,则需要写为:
"A:/output/233.png"(也就是中间写的是绝对路径)。
三、编译
大致上有两种使用方式,第一种是直接放到板子上进行编译,比较吃板子性能;第二种是在主机上进行交叉编译成arm版本的二进制文件放到板子上运行,编译更快,但是稍微麻烦点,我两种都讲,先看第一种。
1、直接板上编译
板上编译的话我建议先配置一个ssh连接,方便文件传输和控制,具体配置方法和这个类似:
【Spiffo】环境配置:VScode+Windows下开发Linux-CSDN博客
其次,你需要下载cmake工具,因为整个工程都是按照cmake进行配置的,这是主流的做法,最好是学习使用,不难的。安装:
sudo apt install cmake
连接上以后进入lv_port_linux-master这个文件夹,能够看到一大堆文件,但是你只需要管这三个:
bin文件夹存放编译出来的程序,build文件夹存放编译过程产生的中间文件,main.c就是字面意思
要进行编译你只需要进入build文件夹,然后输入
cmake ..
就会开始构建编译文件
编译规则构建完后直接在当前的文件夹里输入
make
就会开始编译了,整个过程大概持续四五分钟(视板子性能而定)中间会出现些许的warning,不用管
看见这个就算编译好了
编译完成后回到上一级目录,进入bin文件夹,可以看到生成了一个可执行程序
2、交叉编译放到板子上运行
第二种方式就是主机上交叉编译完然后放到板子上运行,这种做法稍微麻烦一点,但是编译很快,差不多半分钟就好了。
如果使用交叉编译工具的话需要对工程进行一定的额外配置才能正常使用,注意,因为是混编,所以gcc和g++(有的叫gxx,一个东西)都是需要的,配置方法很多,但是我推荐这样配置,免得后续出一系列奇怪的问题,具体配置如下:
首先需要在项目根目录新建一个规则文件(其实放哪里都行,叫什么也无所谓),比如我就命名成推荐的toolchain.cmake了,然后其中写上这些内容:
其中这部分是你的交叉编译器路径
假设你没有交叉编译工具的话,从这里下载
https://pan.baidu.com/s/1o6vqsCVEwDNj1kMauShiFw 提取码: sibk
如果对变量整不明白的就像我一样直接写完整路径,toolchains这个文件夹本体我是放在系统根目录了,所以是
/toolchains/……
假设你下载下来的文件要放在其他地方的话就是
其他地方/toochains/……
写完保存退出后工程里的东西就是这些:
保存后就像上面一样,进入build文件夹,然后输入
cmake -DCMAKE_TOOLCHAIN_FILE=”../toolchain.cmake” ..
构建编译规则,可以看到交叉编译工具已经配置上了
注意:网传说这步如果是使用刚发布的LVGL v9版本会出现一定的问题,具体处理见(如果是官方的master分支的话是没有问题的):
LVGLv9.1.0移植 - 韦东山 - 博客园
然后make编译,完了以后和上面一样在上一级的bin目录里生成对应的二进制文件,把这个生成的文件弄到开发板就可以运行了
至于传文件的方法,这里说两种:
(1)tftp
第一种是使用tftp,配置过程如下:
【Spiffo】环境配置:开发板和虚拟机文件互传(TFTP)_开发板tftp-CSDN博客
(2)ssh自带文件互传
第二种是直接使用vscode的ssh文件传输,直接拖拽文件,放到侧边栏里就可以了
如果报权限错误的话,参考这篇配置一下
【Spiffo】防傻防呆Tips——Error:EACCES:permission denied,open.....问题解决_error: eacces: permission denied, open-CSDN博客
四、执行demo程序
传输过去的文件默认不带可执行权限,所以需要进行手动添加:
chmod +x lvglsim
然后输入下面指令即可运行
./lvglsim
然后显示屏上的画面就跟开头演示的gif一样,点一下蓝色的按钮可以拍照,保存在lvglsim旁边
聊点闲话
目前还没做点击预览图查看和图库,因为我重心放在MIPI设备的使用上,要做也很简单,可以自行尝试。个人认为在触发事件里加一个九宫格然后列出图片即可,后续有空就做(有更好的方案也可以留言)。后续我先更新一下demo工程的细节解析。