前言
前阵子朋友问我。
说外接显示器亮度没法随光线变化。
能不能想个办法搞定它?
我想了想。
在淘宝花了 12 块钱,买了个光线传感器:
然后接上树莓派,鼓捣了一下午。
终于实现了。
视频:https://v.qq.com/x/page/c0902fu8g7m.html
原理
其实这个原理不麻烦。
既然没有光线传感器,就外接一个。
获取到了光线变化。
想办法用树莓派来控制显示器亮度就行了。
画成图就是这样:
其中最麻烦的步骤其实是控制显示器亮度这里。
后来发现显示器们有个 DDC/CI 协议,全称「Display Data Channel Command Interface」。
简单说,就是无论你是什么显示器,只要支持这个协议。
就可以实现通过命令来控制亮度。
这样一来。
前面有数据,后面可控制,整个流程就跑通了。
下面开搞!
实现
实现总共需要两部分。
树莓派端和电脑端。
树莓派需要搞定接入传感器和控制电脑。
电脑需要搞定通过 DDC/CI 协议命令控制显示器。
由于我这里只有 Macbook,所以就只提供 For Mac 的方法了。
不过你可以研究下。
电脑端
安装 ddcctl
这个就是前面提到的,可以通过 Mac 命令行控制显示器的工具:
ddcctl 的 Github 主页在文章末尾[1]
1、克隆仓库到本地:
git clone https://github.com/kfix/ddcctl[2]
2、按照教程安装:
调试 ddcctl
在终端输入以下命令,试试看亮度会不会降低:
ddcctl -d 1 -b 亮度数值(1~100)
树莓派
采购光线传感器
因为树莓派不带数模/数模转换。
也就是说获取的光线亮度只能是 0 或 1,不能是其他的数字。
所以要自配一个模数转换器:PCF8591,某宝买一个就是了。
连线
到了之后把 PCF8591 接上 P5 的短路帽:
然后开始接线,一共 4 条线需要接。
很简单:
PCF8591 -> 树莓派
•VCC -> 1 号针脚•GND -> 9 号针脚•SDA -> 3 号针脚•SCI -> 5 号针脚
附一张针脚图:
装 Wiring Pi,开启 I2C & SPI
SSH 连接到树莓派,输入:
sudo apt-get install wiringpi -y
这样就安装完了。
接着输入:
sudo raspi-config
找到「Interfacing Options」:
一个一个按回车都打开就行了:
配置无秘钥访问
在 Mac 上依次选择「偏好设置 - 共享 - 远程登录」,打开开关:
在树莓派上输入:
成功的话就是下图这样:
下载我写的程序
写程序,我用 Wiring Pi 写的,好久没用 C 语言了。
在树莓派上直接 Clone:
git clone https://github.com/Sunbelife/auto_brightness_for_mac[3]
然后进入目录:
cd auto_brightness_for_mac
打开 auto_brightness.c 文件,修改图里标出的部分。
改成你自己电脑的用户名和 IP:
编译调试
编译运行一下:
依次输入:
然后用手捂住光线感应器,看看显示器亮度会不会降低。
用灯晃光线感应器,看看显示器亮度会不会提高。
如果有效果的话,就 OK 了。
调整数值
不过一般的情况应该是效果和想象有差别,尤其是光线感应部分。
因为每个人的光线环境都不同。
我写的这个比较简易。
需要你手动设置光线档位。
一共三挡,两个数字。
0-185,185-240,240 以上。
第一次调试的时候控制台会一直输出亮度值。
你可以多测试几次,找到阈值。
然后在图中位置修改代码:
重新编译运行即可。
配置开机自动运行
最后一步是配置开启自启,让树莓派开机的时候就自动生效。
方法挺多的,这里提供一种:
sudo nano /etc/rc.local
在 exit 0; 之前添加:
./home/pi/Desktop/auto_brightness_for_mac/run
然后按下 Ctrl + O,回车保存。
再按下 Ctrl + X,回车退出。
下次重启的时候就生效了。
附链接
[1]
ddcctl 的 Github 主页在文章末尾: https://github.com/kfix/ddcctl
[2]
: https://github.com/kfix/ddcctl
[3]
: https://github.com/Sunbelife/auto_brightness_for_mac