pATAq 发表于 2022-4-5 16:30:16

【思兼】DFRobot 5寸触摸屏试用zhi一


# 前言

原创文章,转载引用请务必注明链接, 水平有限,如有疏漏,欢迎指正交流。

收到 DFRobot 寄来的树莓派 DSI 接口 5寸彩色触摸屏有一段时间了,最近疫情看重,事情比较多,今天大概整理一些内容,抛砖引玉吧。最近迫于生活,把手里的树莓派 4b 4GB 版本卖了,然后把 RPi 3b 花 100 大洋修好了,也就是今天的主角。其实个人更喜欢 RPi 3 代,但是各代树莓派在我手里都容易坏。

# 1、产品简介与改动

* [活动链接](https://mc.dfrobot.com.cn/thread-312277-1-1.html)

* 本次试用的是 2.0 版本,我们可以参考 (https://wiki.dfrobot.com.cn/_SKU_DFR0550_5''_TFT-Display_with_Touchscreen_V1.0) ,一起来了解下部分参数。

![](https://mc.dfrobot.com.cn/forum.php?mod=attachment&aid=MTM4ODI5fDM1NzhhMzA2fDE2NDkwODI0ODN8NzI1MzQ0fDMxMjI3Nw%3D%3D&noupdate=yes)

**核心参数:**

* 支持 5 点电容触控
* 800*480 分辨率显示
* 树莓派 DSI 显示触摸接口
* M2.5*8 铜柱
* M2.5*6 螺丝
* 支持电位器调节屏幕亮度,实测最暗~最亮之间电流差异约 5v@0.2A

## 新版改动

!(https://cdn.jsdelivr.net/gh/sjqlwy/blog_imgs@default/images/20220404225322.png)

!(https://cdn.jsdelivr.net/gh/sjqlwy/blog_imgs@default/images/20220404225524.png)

此次试用版对比原理图,主要改动如下:

- **主控芯片更换**为 (https://www.gigadevice.com/zh-hans/microcontroller/gd32vf103c8t6/) | 旧版采用 STM32F103C8T6,目前进口芯片价格飞涨,希望更多国产芯片站出来。这也是本次最大的改动,估计是为了测试新款芯片的稳定性。
- 电位器下方添加了 2 枚芯片:`P524`,TVS?具体没查到
- 触摸接口上方添加了 2 颗 10K 贴片电阻
- (https://www.semiee.com/54f62948-807b-46a0-8642-98ae8ac00456.html) | MIPI转RGB芯片

最上面一排5个触点,查阅原理图是 SWD 引脚,可用于给主控芯片烧录、升级固件等。

# 2、问题与建议

* SD 卡插槽被 DSI 排线挡住,取出插入比较麻烦,我是借助镊子完成
* 共 8 个安装孔(内 4 外 4) ,采用 M2.5 规格:
* 内圈兼容 RPi 3 和 4,这点比较好。
* 外圈用于架高,建议换成采用 M3 孔径,毕竟此规格铜柱更常见,量了一下需要的铜柱长度至少 2cm 。
* 当然也可以配 4 个 M2.5 规格的铜柱。
* 屏幕底部,平放时部分显示内容会被挡住。正视时无问题,使用支架立起来就可以了,不过我们也发现此屏幕可视角度挺大,显示效果较好。

!(https://cdn.jsdelivr.net/gh/sjqlwy/blog_imgs@default/images/20220404231658.png)

> 图中我们也看到时不时报错 (https://pimylifeup.com/raspberry-pi-low-voltage-warning/) 低电压警告,对树莓派也是无力吐槽,供电电压 5.1V 才行,正常能见到的都是 5.0v 输出,谁能给我解释一下这是不是树莓派设计能力不行。

# 3、基本使用:Raspberry Pi OS

* 树莓派 Raspberry Pi OS 即插即用,无需安装驱动,无需额外设置即插即用

* 之前实际对比测试以及参考 [这篇文章](https://laptop.ninja/the-best-linux-distributions-for-touchscreens/) ,认为对触摸功能支持最好的桌面环境为 Gnome3 和 Unity,不过目前没有直接支持,后续再行测试

* 本次使用 RPi OS 就挺好。其共有三个版本:lite、normal、full(分别是无桌面版、桌面版、预装各种软件的桌面版),我们选择普通桌面版进行测试。

* 根据 `DISPLAY=:0 xinput --list` / `cat /proc/bus/input/devices` / `lsmod` / `modinfo edt_ft5x06` / `dpkg -l | grep xorg`等命令,可推知此屏幕触摸采用 `ft5x06` 芯片,I2C 接口通讯,不支持压感。此设备使用 `libinput` 驱动, DietPi 系统中识别为 `raspberrypi ts`。

!(https://cdn.jsdelivr.net/gh/sjqlwy/blog_imgs@default/images/20220405000617.png)

* 可以通过 `evtest` 和 `xinput-calibrator` 等工具进行调试校准触摸。

* 更多相关调试信息可以参考 (https://wiki.ubuntu.com/Multitouch/Testing)

# 4、触摸功能优化

Chromium 浏览器对触摸屏优化很好,但是通用程序则缺少相关优化,使用中遇到两个问题影响了触摸使用体验:

* 触摸不支持右键,不支持拖动,不支持自定义功能
* 不支持屏幕键盘

## 4.1 屏幕键盘

个人习惯使用 `onboard` 这个工具,网友也有使用 `matchbox-keyboard`

```shell
sudo apt install onboard
# sudo apt install matchbox-keyboard
```

前者占用空间大些,功能更多也更美观。后者有些简陋,需要命令行启动默认不创建图标。

!(https://cdn.jsdelivr.net/gh/sjqlwy/blog_imgs@default/images/20220405001925.png)

## 4.2 多点触摸手势

我们这里使用 (https://github.com/JoseExposito/touchegg) 工具,其有一个配置软件 (https://github.com/JoseExposito/touche),以及 (https://github.com/jordansissel/xdotool)。后者在此 5 寸屏上显示不全,干脆先直接修改配置文件吧。默认 RPi OS 软件源里没有上述工具,我们添加 `Raspbian Addons` 源并进行安装,[参考文档](https://mirrors.ustc.edu.cn/help/raspbian-addons.html)、[软件列表](https://docs.raspbian-addons.org/package-list/)。

https://tutorials-raspberrypi.com/tips-tricks-faq-official-7-raspberry-pi-touchscreen/

https://www.raspberrypi.com/documentation/accessories/display.html

MatchProduct "ft5x06"

https://unix.stackexchange.com/questions/58117/determine-xinput-device-manufacturer-and-model

https://www.x.org/releases/current/doc/man/man5/xorg.conf.5.xhtml

https://docs.sunfounder.com/projects/ts-7c/en/latest/settings_for_raspberry_pi.html

https://forum.openmarine.net/showthread.php?tid=2727

https://maker-tutorials.com/en/raspberry-ri-touch-screen-setup-right-click-with-twofing/

https://github.com/PeterCxy/evdev-right-click-emulation/pull/5

https://github.com/PeterCxy/evdev-right-click-emulation/issues/16

https://github.com/PeterCxy/evdev-right-click-emulation/issues/3

collect2: error: ld returned 1 exit status
make: *** Error 1

```shell
# 将仓库的 GPG 公钥添加至系统
curl -fsSL https://apt.raspbian-addons.org/KEY.gpg | sudo gpg --dearmor -o /usr/share/keyrings/raspbian-addons-archive-keyring.gpg
# 添加该仓库
echo "deb https://mirrors.ustc.edu.cn/raspbian-addons/debian precise main" | sudo tee /etc/apt/sources.list.d/rpirepo.list
# 更新软件包缓存
sudo apt update
# 安装 touchegg 和 touche
sudo apt install touchegg touche
```

xserver-xorg-input-synaptics

https://neosmart.net/blog/2020/multi-touch-gestures-on-linux/ | (https://github.com/mqudsi/syngesture/)

https://dev.to/iberianpig/fusuma-multi-touch-gesture-for-linux-updated-to-v2-11i0 | (https://github.com/iberianpig/fusuma)

```shell
sudo gpasswd -a $USER input
newgrp input
sudo apt-get install libinput-tools
sudo apt-get install ruby
gem sources#列出默认源
gem sources --remove https://rubygems.org/#移除默认源
gem sources -a https://mirrors.ustc.edu.cn/rubygems/#添加科大源
sudo gem install fusuma
sudo apt-get install xdotool
```



## 4.3 双屏显示

如果我们相连接多屏显示如何操作?我感觉目前 RPi 3 可以实现 DSI+HDMI+GPIO 三屏显示,后续有时间测试。目前展示下 DSI+HDMI 屏幕。参考 (https://wiki.archlinux.org/title/multihead) 页面。

我们首先看看已连接的显示器,和触摸设备,可见两个屏幕支持的分辨率和最大帧率,目前 `DSI-1` 为主显示器 (primary)。

!(https://cdn.jsdelivr.net/gh/sjqlwy/blog_imgs@default/images/20220405011536.png)

通过 RPi OS 自带的 `Screen Layout Editor` 工具,可以设置两个显示器的位置、分辨率等,非常方便,原本想要两个屏幕并排显示,这样更符合日常使用习惯,但是由于我的 HDMI 显示器为 2560*1440,超出了 RPi3 的显示能力,所以只能暂时上下显示,估计 4b 可以实现。我们除了使用上述工具,也可以使用终端工具 `xrandr`、直接修改 Xorg 配置文件进行设置。

```shell
# 可见 RPi3 默认单个 Screen 只能输出 2048x2048 分辨率的内容
pi@raspberrypi:~ $ DISPLAY=:0 xrandr --output DSI-1 --auto --output HDMI-1 --auto --left-of DSI-1
xrandr: screen cannot be larger than 2048x2048 (desired size 2720x1080)
```

> 关于 DISPLAY、SCREEN、MONITOR 的解释:
>
> - **Monitor** refers to a physical display device, such as an LCD panel.
> - **Screen** refers to an X-Window screen (that is: a **monitor** attached to a **display**).
> - **Display** refers to a collection of **screens** that are in use at the same time showing parts of a single desktop (you can drag windows among all **screens** in a single **display**).

!(https://cdn.jsdelivr.net/gh/sjqlwy/blog_imgs@default/images/20220405012936.png)

## 4.4 双屏触摸

### 4.4.1 触摸绑定屏幕

我们发现,同时连接 HDMI+DSI 输出后,触摸鼠标光标会出现在 HDMI 显示器上,由于两者分辨率不同且差距较大,导致无法正常使用这里参考 (https://wiki.archlinux.org/title/Touchscreen) 页面进行设置。上面我们已经查询了已连接屏幕和输入设备,我们将触摸屏绑定到 DSI 屏幕:

```shell
# 在 MobaXterm 中运行而非图形界面内,所以前面添加
# 绑定 设备至 DSI-1 屏幕
DISPLAY=:0 xinput --map-to-output 'generic ft5x06 (ff)' DSI-1
```

此时鼠标光标回到了 DSI 触摸屏上,必要时设置主显示器。这种方法有两个问题:

1. 重启失效,可以修改 `~/.xinitrc` 实现开机启动规则
2. 绑定关系随着显示设备离线以及再连接而失效

### 4.4.2 自动绑定(待测试)

这里介绍一个工具 (https://github.com/pastleo/xrandr-watcher) 可以通过后台服务监听显示设备接入并实现自动绑定,需要 nodejs v13 进行编译,各位可以自行测试。

### 4.4.3 双屏触摸矩阵校准(待测试):

DSI 屏幕触摸光标显示在 HDMI 时,就相当于一个触摸板,但是由于双方分辨率差距较大,所以无法直接使用。这里需要进行校准,有兴趣的朋友可以参考文档 (https://wiki.archlinux.org/title/Calibrating_Touchscreen)

# 5、作为副屏使用

1. Weylus – 共享屏幕,屏幕分辨率不匹配且只支持共享屏幕,不支持分屏显示,那么就没有什么意义。
2. Barrier – 共享键盘鼠标
页: [1]
查看完整版本: 【思兼】DFRobot 5寸触摸屏试用zhi一