KeDei Raspberry Pi LCD (上篇)
很早在淘宝上买了两块便宜的 Pi 接口的 3.5 寸 LCD 屏幕,一块是纯 GPIO SPI 接口的,另一块是 GPIO SPI + HDMI 接口的。这篇文章和下篇将对这两块屏幕进行组装和测试。
本篇是关于 KeDei 3.5 寸屏 GPIO SPI 接口 LCD
我在 2017 年 8 月买的时候 SPI 接口的是 RMB 55 元, SPI + HDMI 接口的是 RMB 99 元。现在(2019 年 11 月)最新的价格 SPI 款分 SPI 32M RMB 47 元(这个应该是和我的同款), SPI 128M RMB 52 元, 而 SPI + HDMI 接口的价格是 RMB 79 元。比我当时还要便宜。
这块 LCD 屏幕对命令行界面和图形界面都能支持,但是受 SPI 速率的限制只能达到 6 fps 左右的刷新率,所以图形模式下是不能用来播放视频和打游戏的(这些用途请参见本文下篇使用 SPI + HDMI 接口的另一块 LCD)。但是我觉得文本模式下屏幕很清晰,接上 Pi Zero W 做为一块小扩展屏用很不错。
参数
- 背面标识:
KeDei 3.5 inch SPI TFTLCD, 480\*320 16bit/18bit, version 6.3
- 最后面还会有一个日期,我的是
2016/11/1
- LCD 屏幕标识:C5 3531
- 屏幕大小:3.5 寸(刚刚好和Raspberry Pi 的大小一致), 86*56.2mm
- 分辨率:320*480
- 接口:32M SPI
- 屏幕为触摸屏
固件下载
官方并没有提供固件的源码,只提供了编译好的内核替换文件和已经装好驱动的几种发行版,可以从官方网站下载。
注意选择 SPI_Interface_LCD
> V6.1 V6.2 V6.3
那行。
其中的 Driver 就是编译好的内核驱动(下面讲解用法),IMG 是打好驱动的 Raspbian Buster, kali 和 ubuntu 是打好驱动的 Kali 和 Ubuntu Mate 发行版。
官方似乎有一直更新固件,请不定期回来查看。
目前(2019 年 11 月)提供的版本为 4.19.60(官方最新是4.19.75,差的不太多):
http://en.kedei.net/raspberry/v6_1/rpi_35_v6_3_buster_kernel_4_19.rar
Linux raspberrypi 4.19.60-v7 #2 SMP Wed Jul 31 10:48:18 CST 2019 armv7l GNU/Linux
组装
这块屏幕没什么好说的,直接和 GPIO 接好就行。
1 - N/C
2 - 5V
3 - N/C
4 - 5V
19 - MOSI
20 - GND
21 - MISO
22 - TR_IRQ
23 - SCLK
24 - TP_CS
25 - GND
26 - LCD_CS
我把它和一块 Pi Zero W 一起装在一个塑料盒里。在盒子正面开了屏幕大小的口,然后用热熔胶将屏幕固定住。
因为自带的 GPIO 插口为了适应 Pi 2 / 3 / 4 的 USB 和网络口的高度而特意做的很长,对 Zero W 没有必要,还超出了我的塑料盒的厚度,所以我将其解焊下来换成了正常的插口。
我同时接出了以下两组 GPIO 端口:
- Pin 5 and 6: 连接了一个按钮,用于安全开关机
- Pin 8 and 10: UART TXD / RXD
在塑料盒上我安装了安全开关机的按钮和一个 MicroUSB 的延长板,这样接电源就更方便了。
设置
我这里使用的方法是首先向 SD 卡写入最新的 Raspbian Buster 镜像,正常启动后再将内核驱动文件安装好。
内核设置
将下载好的 LCD_show_v6_1_3.tar.bz2
内核驱动文件解压,然后使用内置的校本文件安装。
tar jxvf LCD_show_v6_1_3.tar.bz2
cd LCD_show_v6_1_3
# 备份现有的内核驱动
./LCD_backup
# 安装 LCD 内核驱动
./LCD35_v
重启之后就会切换到 LCD 屏幕输出了,HDMI 不再会输出内容(只会显示彩虹屏幕),两者只能二选一。
注:
1. 我将默认的 LCD_backup
脚本做了以下改动:
sudo cp /boot/config.txt ./backup/
sudo cp /boot/kernel*.img ./backup/
sudo cp /boot/*.dtb ./backup/
sudo cp /boot/overlays/*.dtb* ./backup/overlays/
sudo cp -rf /lib/firmware ./backup/lib/
sudo cp -rf /lib/modules ./backup/lib/
2. 需要在 apt 中锁定 Linux 内核版本,不然一旦升级就会覆盖掉 LCD 的驱动(这个已经包含在LCD35_v
脚本中了):
sudo apt-mark hold raspberrypi-kernel
sudo apt-mark hold raspberrypi-bootloader
远程 SSH 登录
可以通过 sudo raspi-config
中的 4 Interfacing Options
> P2 SSH
开启。
屏幕镜像
这块小屏幕对我来说最好用的一个用途就是把它当成一块小扩展屏幕使用。最简单的设置方法就是通过 byobu
来实现(我比较喜欢它自带的状态栏设置)。
首先通过 sudo raspi-config
中的 3 Boot Options
> B1 Desktop / CLI
> B2 Console Autologin
设置为自动启动后进入命令行模式并自动登陆 pi 用户。
然后安装并设置 byobu
的自动启动:
# 安装
sudo apt install byobu
# 设置自动启动
byobu-enable
# 自定义 byobu 状态栏
byobu-config
(之后不想 byobu
自动启动可以通过 byobu-disable
命令禁用)。
这样在你的桌面机上通过 SSH 登录 pi 之后,你的 pi 就会自动镜像你的 SSH 会话内容,在桌面上登出 SSH 也不会中断会话,再次登录后可以继续会话。
这个背后是通过 screen 和 tmux 来实现的。比如 screen 可以通过下面的命令:
screen -rx
下面是我用这个小屏幕来监视 rtorrent 的下载情况(rtorrent
是运行在额外的远程机器上的,这里只是 SSH 远程登录查看):
更改终端屏幕字体
默认的字体不好看,可以使用下面的命令设置:
sudo dpkg-reconfigure console-setup
结果会更新到 /etc/default/console-setup
文件中,我选用的是下面的设置:
FONTFACE="Terminus"
FONTSIZE="6x12"
更多信息:https://www.linux.com/tutorials/how-change-your-linux-console-fonts/
安全开关机
硬件方面需要将 GPIO pin 5 和 pin 6 连接一个开关。
软件方面在 /boot/config.txt
最后面增加:
dtoverlay=gpio-shutdown
这里使用了默认的设置是 pin 5 和 pin 6。如果想使用其它的设置请参考这里。
天气预报
curl wttr.in/Melbourne?n1
我将这条命令在 ~/.bashrc
中设置了一个别名:
alias weather='curl wttr.in/Melbourne?n1'
这样之后就可以用 weather
命令运行了。
更多信息:https://github.com/chubin/wttr.in
多重 WIFI 设置
可以在 /etc/wpa_supplicant/wpa_supplicant.conf
设置多个 network 块,这样你的 Pi 就可以在你的公司和家里无缝链接使用了。
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=AU
network={
ssid="home1"
psk="home1password"
# 对于隐藏 SSID 的网络需要设置这条
scan_ssid=1
# 对于在同一个地点的多个网络,可以通过 priority 设置优先级。默认为0
priority=100
}
network={
ssid="home2"
psk="home2password"
key_mgmt=WPA-PSK
}
network={
ssid="work"
psk="workpassword"
}
更多信息:https://raspberrypi.stackexchange.com/a/37921
显示日历时钟
watch -t -n1 "date +%T|figlet -W -f big"
watch -t -n1 "date +%A%n%x%n%X|figlet -t -c"
更多信息:https://www.commandlinefu.com/commands/view/2473/display-a-cool-clock-on-your-terminal
显示图片
可以使用 fbi (Linux Framebuffer Imageviewer) ,不用进入 X Window 就能通过 Framebuffer 来显示图片(类似当年 DOS 下面 sea 那种)。
# 安装
sudo apt install fbi
# 使用
sudo fbi -T 1 -d /dev/fb0 -a 1.jpg
# 退出
sudo killall fbi
注:使用 sudo
以及 -T
和 -d
参数是为了防止从 SSH 下面执行出现 ioctl VT_GETSTATE: Inappropriate ioctl for device (not a linux console?)
错误
UART 串口监听器
硬件方面需要接出 pin 8 和 10.
然后在 /boot/config.txt
最后增加:
enable_uart=1
也可以通过 sudo raspi-config
中的 4 Interfacing Options
> P6 Serial
来开启,注意第一项 login shell to be accessible over serial
选 No,第二项 serial port hardware to be enabled
选 Yes.
重启之后可以用下面的命令监听(下面例子的波特率为9600):
screen /dev/ttyS0 9600
注意 Pi 的 GPIO pin 是 3.3V 的,所以对于 5V 的输入输出需要用逻辑电平转换模块(Logic Level Converter)转换成 3.3V 以免对 Pi 造成损坏。
下面是一个监听我的 LoRa Receiver 的例子:
Matrix 屏保
# 安装
sudo apt install cmatrix
# 使用
cmatrix
其它参考
- 文中所有的 framebuffer 屏幕截图是通过 fbcat 和 fbgrab 实现的
- RASPBERRY PI 3 B+ WITH KEDEI 3.5 INCH 480×320 TFT LCD DISPLAY
- Using cheap 3.5″ LCD screen with the raspberry pi