因为打编译竞赛的时候组委会发了一个树莓派,最近闲着没事,就想在树莓派上做点小东西。目前主要是买了一个铝合金散热外壳、3.5英寸触摸屏和一个500W像素的CSI摄像头。下面主要记录一下系统和硬件安装过程中踩的坑。
前期准备
软件
- SD Card Formatter(用于格式化存储器)
- Raspberry Pi Imager(树莓派官方的烧录工具)
- Raspberry Pi OS(这里我用的是legacy,后面说原因)
- LCD-show(触摸屏的店家提供的驱动)
硬件
- Raspberry Pi 4 Computer 4GB
- 读卡器
- SandDisk Ultra microSD 128GB
- 外壳+散热片
- 3.5英寸触摸屏(MHS-3.5inch RPi Display)
- 500W像素CSI摄像头
- 网线(可选)
- microHDMI数据线(可选)
系统烧录
格式化
首先将SD卡放入读卡器内插入电脑,然后使用SD Card Formatter选择插入的卡,直接使用quick format
进行格式化。
烧录系统
我一开始用的是第三方的烧录工具win32diskimager,但是需要自己配置用户名密码、WIFI连接,配了几次WIFI都连不上以后,发现树莓派官方的烧录工具可以在图形化界面上直接配置用户名、密码和WIFI,于是果断转用了Raspberry Pi Imager。
而另外官方烧录工具可以在烧录的时候选择想安装的系统,自动下载,这样就省去了自己去官网上找系统的麻烦。
我这里烧录的系统是Raspberry Pi OS(Legacy,32bit),一开始选择的是最新版的32位系统,但是后面装触摸屏和摄像头的时候一直失败,折腾了一晚上和一上午才想到是不是需要换个系统。
后来了解到,Raspberry Pi OS是基于Debian开发的,而Debian于23年6月发布了版本号为12的最新版,代号Bookworm,树莓派也因此做了更新。而Legacy是基于Debian11也就是Bullseye开发的,所以可能我买的触摸屏和摄像头的驱动都无法适配Bookworm,而能在Bullseye成功运行。
选择完系统后,在烧录前,点击右下角的设置,配置用户名密码、WIFI等内容。
选择开启SSH服务-使用密码登录
然后在下面填入用户名和密码,这里使用的是默认的密码raspberry
如果需要连接WIFI,还可以将要连的WIFI的信息填入,这里注意除了名称和密码,还有选择国家
配置完成后点击保存,选择要烧录的SD卡,点击烧录,等待几分钟即可。
通电启动
烧录完成后拔下SD卡,插入树莓派中,再连上type-C接口的电源,这里我直接用的手机充电器。
由于触摸屏的驱动还未安装,没法直接从屏幕上操作树莓派,所以需要通过其他方法连接,我尝试过的方法主要有以下三种:
网线连接
- step1,以太网配置
首先准备一根网线分别插入树莓派和电脑的以太网接口,然后在电脑上进行如下配置:
找到设置-网络和Internet-状态-更改适配器选项
,然后双击打开自己正在连接的网络
点击活动-属性
选择共享-允许其他...连接-以太网
,点击确定
- step2,获取IP
然后稍等一会,按win+R
打开命令行窗口,输入
bash
ping raspberrypi -4
如果出现下面的内容说明连接成功,显示的IP就是树莓派当前的IP
获得IP后就可以通过SSH、Windows远程桌面或VCN等方式连接树莓派了。
- step3,连接树莓派
SSH连接可以使用VScode、MobaXterm、putty等工具,网上资料很多,这里不做过多介绍。VCN方式连接我没试过,这里也不介绍了。下面主要说一下远程桌面连接的方法。
windows远程桌面使用的协议是rdp,因此在连接树莓派前,我们需要先通过ssh登录树莓派,执行如下命令安装好rdp协议相关的服务:
bash
sudo apt-get install tightvncserver
sudo apt-get install xrdp
其中tightvncserver 为xrdp提供基础服务,xrdp 是一个开源的远程桌面服务器。
之后我们打开windows远程桌面连接,填入刚才获取的ip,点击连接:
进入后Session选择Xorg,输入烧录时设置的账号和密码,点击OK:
成功进入树莓派桌面:
WIFI连接
之前在烧录的时候已经配置过WIFI账号和密码,树莓派启动后会自动连接所指定的WIFI。同时要求电脑和树莓派连接同一个WIFI,之后同样执行命令:
bash
ping raspberrypi -4
获取树莓派的IP,然后进行连接。
连接显示器
如果你有一台显示器和一根microHDMI的数据线,那么可以直接将树莓派连接到显示器上,在图形化界面上进行操作。
连接触摸屏
硬件连接
在成功烧录镜像并连接后,可以开始连接触摸屏。首先关机断电,将3.5英寸触摸屏的接口插入到树莓派对应的GPIO接口上。
通电重启后,可以看到屏幕一片白色,此时还需安装驱动。
安装驱动
根据店家给的教程,登录后需要执行如下指令,下载并安装驱动:
bash
cd /boot
sudo git clone https://github.com/lcdgogo/LCD-show.git
sudo chmod -R 777 LCD-show
cd LCD-show
sudo bash ./MHS35-show
这里遇到的问题主要是连不上github,于是我直接先下载到电脑,然后复制到了树莓派上。
由于我的屏幕是MHS-3.5inch RPi Display
,所以执行的是MHS35-show,其他型号的屏幕需要执行不同的命令,具体可以看仓库的readme。
在执行MHS35-show时出现了dpkg的报错:
go
dpkg: error processing package ...
查阅资料可以通过apt -f install
解决:
bash
sudo mv /var/lib/dpkg/info/ /var/lib/dpkg/info_old/
sudo mkdir /var/lib/dpkg/info/
sudo apt-get update
sudo apt-get -f install
sudo mv /var/lib/dpkg/info/* /var/lib/dpkg/info_old/
sudo rm -rf /var/lib/dpkg/info
sudo mv /var/lib/dpkg/info_old/ /var/lib/dpkg/info/
成功执行后树莓派会自动重启,再次打开时应该就可以显示画面了。
屏幕校正
第一次打开时触摸笔点击的位置、屏幕的旋转可能都不那么符合需要,因此需要做一些校正。
点击校准
进入LCD-show目录,安装校准程序并执行校准:
bash
cd /boot/LCD-show/
sudo dpkg -i -B xinput-calibrator_0.7.5-1_armhf.deb
DISPLAY=:0.0 xinput_calibrator
此时会要求点击屏幕的四个角,按要求点击完后,程序会输出一段校准后的配置代码:
vbnet
Section "InputClass"
Identifier "calibration"
MatchProduct "ADS7846 Touchscreen"
Option "MinX" "7418"
Option "MaxX" "61120"
Option "MinY" "6110"
Option "MaxY" "61268"
Option "SwapXY" "0" # unless it was already set to 1
Option "InvertX" "0" # unless it was already set
Option "InvertY" "0" # unless it was already set
EndSection
进入配置文件
bash
sudo vim /etc/X11/xorg.conf.d/99-calibration.conf
将上面的代码替换掉配置文件中的内容,保存,重启。
屏幕旋转
打开系统配置文件/boot/config.txt
添加代码:
ini
dtoverlay=mhs35:rotate=0
其中xx为旋转的角度,可以为:0,90,180,270
保存,重启。
触摸旋转
打开屏幕配置文件
bash
sudo vim /etc/X11/xorg.conf.d/99-calibration.conf
在其中添加一行
rust
Option "CalibrationMatrix" "0 1 0 -1 0 1 0 0 1"
表示触摸旋转矩阵。其中:
90:0 1 0 -1 0 1 0 0 1
180:-1 0 1 0 -1 1 0 0 1
270:0 -1 1 1 0 0 0 0 1
其他
有可能第一次打开显示屏时显示的是命令行而非桌面,这时需要进入树莓派设置:
bash
sudo raspi-config
选择SystemOptions - Boot/Auto Login - Desktop Autologin
,然后选择finish,重启。
连接相机
这里我使用的是树莓派最先发布的一款500W像素的CSI摄像头,目前官方似乎已经停止售卖了,但是3B+和4B仍然支持该摄像头。
硬件连接
关机断电后开始连接相机。
相机线路最底端一面有纹路,一面贴了一张蓝色贴片,在安装时需要将相机底端插入板子上标有camera的接口,与该接口外形相同的还有一个是连接显示器用的,上面标有display,注意不要插错了。插入时需要先将黑色盖子抬起,然后将蓝色铁片一面朝向以太网接口、有纹路的一面朝向MicroHDMI接口,插入后盖紧。
启动树莓派,进入设置。
bash
sudo raspi-config
依次选择Interface Options - Legacy Camera - Enable
,允许相机打开。
然后重启。
配置驱动
由于该相机已经不被树莓派官方所支持,所以还需进行一些配置才能使用。
此时执行
bash
vcgencmd get_camera
会发现supported和detected都为0。
下面首先进入/boot/config.txt
,进行如下修改:
隐掉camera_auto_detect=1
添加 gpu_mem=128
添加 start_x=1
添加dtoverlay=ov5647
然后进入/etc/modules
,添加bcm2835-v4l2
保存重启。
然后重新执行vcgencmd get_camera
,如果成功的话supported和detected都为1。之后执行libcamera-hello
,检查摄像头是否正常,如果正常此时应该会出现几秒钟的摄像头画面。
如果返回的结果是supported=1 detected=0
,可以将/boot/config.txt
中的修改还原,然后关闭Legacy Camera
,重启后再打开Legacy Camera
再重启,重新执行vcgencmd get_camera
应该就好了。但是这时候libcamera可能还是没法用,可以尝试再按上面的步骤修改/boot/config.txt
。
安装motion
motion是树莓派的一款监控软件,可以直接用apt-get安装
bash
sudo apt-get install motion
安装完成后需要进行一些配置,首先进入/etc/default/motion
,添加一行
ini
start_motion_daemon=yes
然后进入/etc/motion/motion.conf
,进行如下修改:
将daemon修改为on
修改stream_localhost off
修改framerate 50
stream_maxrate 50
保存后关闭正在运行的motion进程:
bash
sudo killall -TERM motion
然后重启motion
bash
sudo service motion start
sudo motion
此时通过浏览器访问localhost:8081
,应该可以看到摄像头画面