树莓派用起来还是很方便的,不过因为电源适配器电压不足、额定电流不足、线损、PTC的压降 或者USB接口接触电阻等因素的影响,+5V电源输入电压不足时有发生。 当+5V电源输入电压不足时,显示屏的右上角会显示一个黄色的小闪电符号作为报警。 +5V电源输入电压不足会引起很多问题,比如运行不稳定,数据丢失,甚至会导致SD卡永久损坏。 使用一个优质的、足功率、足电压的电源适配器是必须的。但即使我们使用官方电源适配器,偶尔也会因为micro USB口长期反复插拔后,导致接触不良而引起接触电阻过高,使得树莓派+5V输入电压不足。 于是我们需要有能够实时监测树莓派电压不足(Under-voltage)的方法,以便能够在所开发的应用中及时报警,或者采取相应行动。
原理
Raspberry Pi OS 中的命令 vcgencmd get_throttled
会得到一个十六进制数,这个数字反映了和当前系统频率、输入电压等相关的状态信息
$ vcgencmd get_throttled
throttled=0x50005
这个数字转换为二进制后,其中的8位,代表了8个标志的状态,我们重点看其中的两位:
- 这个数字的第 0 位为 1 的话,表明当前发生了输入电压不足的情况;
- 这个数字的第 16 位为 1 的话,表明启动之后曾经发生过输入电压不足的情况;
那我们只要实时检测这两个标志位,就可以监测到树莓派输入电压不足的情况。
Python 的 vcgencmd
幸运的是,python的第三方库中,有现成的库可以用来访问上面的标志位,它就是 vcgencmd
库。
安装 vcgencmd
库
sudo pip3 install vcgencmd -i https://mirrors.aliyun.com/pypi/simple/
安装后,在python中尝试导入 vcgencmd
库,没有报错就对了。
pi@raspberrypi:~ $ python3
Python 3.7.3 (default, Jul 25 2020, 13:03:44)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from vcgencmd import Vcgencmd
代码
因为实现起来比较简单,直接上代码了:(可按需要根据如下代码调整优化后,用于实现自己的需求)
#!/usr/bin/env python3
# -*- coding: utf-8 -*