开源智能家居系统 Home Assistant 从听说到入坑

首先声明一下,感谢来自北京的熊小猫发来的稿件,非常人性化,用了markdown语法,在这里我代表我和52Pi全体编辑向你表示感谢!

和你的座右铭一样,一个脱离了高级趣味的人写的文章一定是有含金量的!!表示1000个赞送给你!

Home Assistant 是什么?

Open source home automation that puts local control and privacy first. Powered by a worldwide community of tinkerers and DIY enthusiasts. Perfect to run on a Raspberry Pi or a local server.

这是官方的原话,如果你看懂了就懂了,没看懂就听我给你编。说白了就是一款基于 Python3 的开源智能家居系统,非常适合运行在树莓派或本地服务器上。它集成了众多优秀的产品,比如 IFTTT 、 Arduino 、Google Assistant 、 Home Kit 、 MQTT 等。

好了,废话就这么多,让我们动手安装吧。

系统(基于 Python 虚拟环境,硬件 Raspberry Pi )

安装

安装 Python3

sudo apt-get install python3-pip python3-venv

坑:You may also need to install development libraries using 您可能还需要使用安装开发库。在各种文档里,基本都是在说安装Python,几乎没有提及到需要的其他依赖,所以我们需要安装几个依赖包。

sudo apt-get install build-essential libssl-dev libffi-dev python-dev

源替换

由于网络等原因,建议 pip 使用国内镜像,编辑 /etc/pip.conf 文件(据说此文件针对树莓派的)
复制粘贴以下内容并保存:

[global]
trusted-host=mirrors.aliyun.com
index-url=https://mirrors.aliyun.com/pypi/simple/

创建名为 homeassistant 的用户

sudo useradd -rm homeassistant

创建安装文件夹

cd /srv
sudo mkdir homeassistant
sudo chown homeassistant:homeassistant homeassistant

创建虚拟环境

sudo su -s /bin/bash homeassistant
cd /srv/homeassistant
python3 -m venv .
source bin/activate

安装 Home Assistant

pip3 install homeassistant

初次启动 Home Assistant

hass

等待几分钟让后台下载依赖,之后你便可访问 http://ip:8123,进入 Home Asssitant

自启动

sudo nano -w /etc/systemd/system/home-assistant@homeassistant.service

粘贴一下内容:

[Unit]
Description=Home Assistant
After=network-online.target

[Service]
Type=simple
User=%i
ExecStart=/srv/homeassistant/bin/hass -c "/home/homeassistant/.homeassistant"

[Install]
WantedBy=multi-user.target

重新加载进程管理

sudo systemctl --system daemon-reload

启用服务

sudo systemctl enable home-assistant@homeassistant

更新软件版本

进入虚拟环境

sudo su -s /bin/bash homeassistant
cd /srv/homeassistant
source bin/activate

更新

pip3 install --upgrade homeassistant

指定版本

pip3 install homeassistant==X.XX.X

开发版本

pip3 install --upgrade git+git://github.com/home-assistant/home-assistant.git@dev

至此,你的 Home Assistant 系统已经正常的运行起来了,接下来呢?是不是接入硬件或软件了呢?没错!!本节我们从最简单的开始,我们把特斯拉汽车接入进来。首先,我买不起特斯拉,哪位老板可以赞助一台,以便我把这篇文档个写完。言归正传,下一节,我们开始介入各种设备。

编者最后的意思是??特斯拉我们赞助不了,你要不要苏27呢?

USB 接口 GPS 在树莓派上的正确使用姿势~

产品说明:

Gps4.jpg
  • 支持Raspberry Pi型号A,B,A +,B +,Zero,2,3,内置L80-39 GPS芯片。
  • 使用UART或USB通信, 默认波特率 9600bps。
  • USB 接口采用CP2102作为USB转UART桥接芯片,稳定且速度更快。
  • L80-39具有66个搜索通道和22个同步跟踪通道,它可以在室外的最短时间内采集和跟踪卫星。我这里要强烈强调一下, 室内你搜不到星的哦, 一定要在室外,人家手册上这么写,你就去室外操作好吗? 别问为啥, 用脑子想想啊,卫星在天上,你要搜星,你喵在家里搜哪门子的星?

注意 我再次强调该模块适合户外操作。请把Antana(就是传说中的天线)放在露天。


兼容性列表(基本上只要支持串口通信的设备基本上都能支持,例如 各种 MCU, 51 单片机,arduino, 树莓派,香蕉派, Tinker board 等…

  • 兼容性
平台USB端口GPS模块
Raspberry Pi 3型号B Plus
树莓派零
Raspberry Pi零W
Raspberry Pi 3型号B.
Raspberry Pi 2模型B.
Raspberry Pi Model B +

功能

  • -165 dBm灵敏度,1Hz(默认),最高5Hz,66个通道
  • 启动时至少消耗100mA电流。
  • PPS输出可用于与卫星协调时间。
  • 定时精度: 1PPS输出 15ns
  • 内部贴片天线在室外使用时工作良好
  • 金属的SMA连接器用于外部有源天线,可以在室内使用,但是天线必须放置在室外.
  • fix状态LED闪烁,让您知道GPS何时确定当前坐标
  • EASY™,先进的AGPS技术,无需外部存储器
  • 支持时间服务应用程序,可通过PPS同步NMEA功能实现
  • 内置LNA可提高灵敏度
  • RTC电池兼容
  • 1×8公头,USB micro接口
  • 包括CP2102模块串行转换器USB 2.0到TTL UART

参数

类型
卫星66个接受通道,22个跟踪通道
工作电压4.5-5.5V
重量4.35克
最大电流最大100mA
工作温度-40〜+ 85℃
规模16.6x26x18.6(毫米)
全球定位系统L80-M39
贴片天线尺寸15.0 x 15.0 x 4.0mm
位置准确性<2.5M CEP
速度准确度<1.0米/ s的
没有ESEY的暖/冷启动<35S
ESEY热/冷启动<15秒
获取灵敏度-148dBm
跟踪灵敏度-165dBm
更新率1Hz(默认)高达5Hz
波特率4800~115200 bps默认为9600bps
协议NMEA 0183
安装电缆1 * 8堆叠标头USB微数据线
GPS的schama.png

如何连线

第一种方法:


这是使用 usb-to-ttl 的线缆接入 GPS的 Uart 引脚.

Uart风格接法:

由于Raspberry Pi 3,Model B的串口问题,它可能会导致意外问题,我们建议您不要将带有Raspberry Pi的GPS模块直接连接到GPIO引脚。当然,如果你要坚持用,也是可以的,只是需要将树莓派3B 和3B+的蓝牙功能关闭, 然后再将/dev/ttyAMA0设备释放出来,即可用树莓派的 GPIO 引脚和设备通信而不用占用 USB口了,操作步骤我大致讲解一下:

  1. 在树莓派上通过 sudo raspi-config 找到接口设置然后打开串口设备,机器上会出现一个/dev/ttyS0设备.
  2. 在树莓派上编辑/boot/config.txt 配置文件,检查 enable_uart=1 是否存在.
  3. 在树莓派上编辑/boot/cmdline.txt 配置文件,将整行复制后注释掉一行, 并将未注释行的 console=/dev/ttyAMA0, 115200 信息删除.
  4. 重启树莓派并在启动后安装适合自己的串口软件例如 minicom 或者别的.
  • 1.如果是使用一根USB-to-TTL线连接GPS模块和Raspberry Pi,你可以像这张图表一样连线:
GPS模块电线颜色
VCC红线
GND黑丝
TXD绿线
RXD白线
  • 2.重启 Raspberry Pi并登录,如果在桌面环境中使用raspberry Pi,请打开终端并按照后面步骤操作。

USB风格接法:

  • 只需使用microUSB电缆连接Raspberry Pi USB端口和GPS模块,并在Raspberry Pi上供电。
Gps1.jpg

如何使用

1.上电后登录系统。您可以打开终端并输入以下命令来安装GPS模块的包。
sudo apt-get update && sudo apt-get -y install gpsd gpsd-clients python-gps 
2.启动gpsd服务并对其进行控制。
启用它: sudo systemctl enable gpsd.socket 
启动它: sudo systemctl start gpsd.socket 
重新启动它: sudo systemctl restart gpsd.socket 
检查状态: sudo systemctl status gpsd.socket 

4.配置文件是在/ etc / default / gpsd中
修改gpsd的配置文件根据/ dev文件夹中串口的名称修改“DEVICE”参数。
如果通过USB电缆将其连接到Raspberry Pi,通常将其命名为“/ dev / ttyUSB0”。
您可以使用“nano”或“vim.tiny”编辑器来完成它。

我下面是写好的一个例子,我只是用 grep -v “#” /etc/default/gpsd | grep -v “^$” 过滤掉了配置文件中的注释和空行, 你们的配置如果是用 USB 接 micro USB口,然后直接插树莓派的 USB 口的,和我的配置基本是差不多的,除非你树莓派上还接了好多 USB设备,否则默认第一个设备就是/dev/ttyUSB0 , 参数 GPSD_OPTIONS= ” -F /var/run/gpsd.sock” 你这里定义啥名字就用啥名字行么?别乱改..否则找不到文件又是一顿刺挠, 你又要到群里喊叫代码不行,用不了.看仔细了哦~

Gpsconfig4.jpg

重启服务:
sudo systemctl restart gpsd.socket 
最后,使用此命令从GPS模块获取信息。
sudo cgps -s

一般情况下,如果不出幺蛾子,那么你会看到如下的信息,但是如果搜不到卫星的时候也很正常,你以为卫星时时刻刻都在你头顶上呢? 也许它跑开了一会儿,耐心等待, 基本上我们搜星也都是 30 多秒-5 分钟左右很正常, 这是 GPS 不是北斗, 自从美国出了个川普,GPS 就没有好用过….
5. GPS状态如下:

Gpsresult.png

客户端C中的示例代码

#include <gps.h> 
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <math.h>
int main()
{
int rc;
struct timeval tv;
struct gps_data_t gps_data;
if ((rc = gps_open("localhost", "2947", &gps_data)) == -1)
{
printf("code: %d, reason: %s\n", rc, gps_errstr(rc));
return EXIT_FAILURE;
}
gps_stream(&gps_data, WATCH_ENABLE | WATCH_JSON, NULL);

while (1)
{
/* wait for 2 seconds to receive data */
if (gps_waiting (&gps_data, 2000000))
{
/* read data */
if ((rc = gps_read(&gps_data)) == -1)
{
printf("error occured reading gps data. code: %d, reason: %s\n", rc, gps_errstr(rc));
}
else
{
/* Display data from the GPS receiver. */
if ((gps_data.status == STATUS_FIX) && (gps_data.fix.mode == MODE_2D || gps_data.fix.mode == MODE_3D) && !isnan(gps_data.fix.latitude) && !isnan(gps_data.fix.longitude))
{
/* gettimeofday(&tv, NULL); EDIT: tv.tv_sec isn't actually the timestamp! */

printf("latitude: %f, longitude: %f, speed: %f, timestamp: %lf\n", gps_data.fix.latitude, gps_data.fix.longitude, gps_data.fix.speed, gps_data.fix.time);
//EDIT: Replaced tv.tv_sec with gps_data.fix.time
}
else
{
printf("no GPS data available\n");
}
}
}
sleep(3);
}
/* When you are done... */
gps_stream(&gps_data, WATCH_DISABLE, NULL);
gps_close (&gps_data);
return EXIT_SUCCESS;
}
  • 编译并运行它。
gcc -o gps gps.c -lm -lgps 
sudo ./gps

GPS客户端的Python解决方案

  • 在Raspberry Pi上用 python 来接受 GPS 数据是最简单的,但是需要你安装一个 pyserial 的模块.

以下是三个如何使用python从连接到Raspberry Pi的GPS接收器获取GPS数据的示例。

思路: 使用GPSD客户端库, 然后手动解析NMEA句子或者使用pynmea2解析NMEA句子,也可以使用GPSD客户端库 

gpsd客户端库基于JSON。JSON对象具有“类”属性(例如TPV,SKY,DEVICE.etc …),可用于过滤不同的信息。
请参阅:[ http://www.catb.org/gpsd/gpsd_json.html | gpsd_json]

  • 本指南介绍了如何在Raspberry Pi上运行gpsd。
  • 下面的示例python脚本在TPV类上过滤,即时间位置速度报告,然后打印出相关信息。
由于 python 代码是需要考虑缩进的.所以我这里就截图给你看了.
下面是另一种方式,需要安装 gps 的库
这个就需要 pyserial 的库, 需要你 pip install pyserial 安装一下.
  • 使用pynmea2解析NMEA句子

下面的python脚本显示了如何通过直接连接到串行接口来访问GPS数据。
它过滤$ GPGGA NMEA句子,然后使用pynmea2来解析数据。
Pynmea2可以安装:

pi@raspberrypi ~ $ pip install pynmea2

这个方法比较简单, 另外还有一种方法就是直接自己解析数据结构,只用一个库,就是 pyserial.
尝试看看,对于其刷新速度,已经在产品特性里面介绍到了很多都是直接来自官方文档的内容,例如串口更新速率从 4800~115200bps ,默认是 9600bps, 更新率 1HZ 默认, 最高到 5Hz, 支持的协议 NMEA 0183 , 你们拿到数据后,如果是要用在一些网站的 api 上,需要转化一下格式的.
这个看 tater.li 之前帖子.

到这里就先告一段落. 下一篇帖子我做一个和高德地图 API 结合的例子.

树莓派 Linux 系统命令行快捷键

刚入门树莓派时,在 Linux 下使用命令操作的时候,光标的移动令人头痛。命令输入完了,执行之后发现缺少权限,然后不得不移动光标到行首,而命令又极长……当我学会了命令行相关的快捷键之后,不仅效率提高了,更让我喜欢上了命令行这种操作方式。

常用

  • Ctrl+左右键:在单词之间跳转
  • Ctrl+a:跳到本行的行首
  • Ctrl+e:跳到页尾
  • Ctrl+u:删除当前光标前面的文字 (还有剪切功能)
  • Ctrl+k:删除当前光标后面的文字(还有剪切功能)
  • Ctrl+L:进行清屏操作
  • Ctrl+y:粘贴Ctrl+u或ctrl+k剪切的内容
  • Ctrl+w:删除光标前面的单词的字符
  • Alt – d :由光标位置开始,往右删除单词。往行尾删

说明

  • Ctrl – k: 先按住 Ctrl 键,然后再按 k 键;
  • Alt – k: 先按住 Alt 键,然后再按 k 键;
  • M – k:先单击 Esc 键,然后再按 k 键。

移动光标

  • Ctrl – a :移到行首
  • Ctrl – e :移到行尾
  • Ctrl – b :往回(左)移动一个字符
  • Ctrl – f :往后(右)移动一个字符
  • Alt – b :往回(左)移动一个单词
  • Alt – f :往后(右)移动一个单词
  • Ctrl – xx :在命令行尾和光标之间移动
  • M-b :往回(左)移动一个单词
  • M-f :往后(右)移动一个单词

编辑命令

  • Ctrl – h :删除光标左方位置的字符
  • Ctrl – d :删除光标右方位置的字符(注意:当前命令行没有任何字符时,会注销系统或结束终端)
  • Ctrl – w :由光标位置开始,往左删除单词。往行首删
  • Alt – d :由光标位置开始,往右删除单词。往行尾删
  • M – d :由光标位置开始,删除单词,直到该单词结束。
  • Ctrl – k :由光标所在位置开始,删除右方所有的字符,直到该行结束。
  • Ctrl – u :由光标所在位置开始,删除左方所有的字符,直到该行开始。
  • Ctrl – y :粘贴之前删除的内容到光标后。
  • ctrl – t :交换光标处和之前两个字符的位置。
  • Alt + . :使用上一条命令的最后一个参数。
  • Ctrl – _ :回复之前的状态。撤销操作。

Ctrl -a + Ctrl -k 或 Ctrl -e + Ctrl -u 或 Ctrl -k + Ctrl -u 组合可删除整行。

Bang(!)命令

  • !! :执行上一条命令。
  • ^foo^bar :把上一条命令里的foo替换为bar,并执行。
  • !wget :执行最近的以wget开头的命令。
  • !wget:p :仅打印最近的以wget开头的命令,不执行。
  • !$ :上一条命令的最后一个参数, 与 Alt - . 和 $_ 相同。
  • !* :上一条命令的所有参数
  • !*:p :打印上一条命令是所有参数,也即 !*的内容。
  • ^abc :删除上一条命令中的abc。
  • ^foo^bar :将上一条命令中的 foo 替换为 bar
  • ^foo^bar^ :将上一条命令中的 foo 替换为 bar
  • !-n :执行前n条命令,执行上一条命令: !-1, 执行前5条命令的格式是: !-5

查找历史命令

  • Ctrl – p :显示当前命令的上一条历史命令
  • Ctrl – n :显示当前命令的下一条历史命令
  • Ctrl – r :搜索历史命令,随着输入会显示历史命令中的一条匹配命令,Enter键执行匹配命令;ESC键在命令行显示而不执行匹配命令。
  • Ctrl – g :从历史搜索模式(Ctrl – r)退出。

控制命令

  • Ctrl – l :清除屏幕,然后,在最上面重新显示目前光标所在的这一行的内容。
  • Ctrl – o :执行当前命令,并选择上一条命令。
  • Ctrl – s :阻止屏幕输出
  • Ctrl – q :允许屏幕输出
  • Ctrl – c :终止命令
  • Ctrl – z :挂起命令

重复执行操作动作

  • M – 操作次数 操作动作 : 指定操作次数,重复执行指定的操作。

转载自 树莓派实验室

在树莓派上安装 Mosquitto 实现 MQTT

MQTT是IBM开发的一个即时通讯协议。MQTT是面向M2M和物联网的连接协议,采用轻量级发布和订阅消息传输机制。Mosquitto是一款实现了 MQTT v3.1 协议的开源消息代理软件,提供轻量级的,支持发布/订阅的的消息推送模式,使设备对设备之间的短消息通信简单易用。
若初次接触MQTT协议,可先理解以下概念:
MQTT协议特点——相比于RESTful架构的物联网系统,MQTT协议借助消息推送功能,可以更好地实现远程控制。
MQTT协议角色——在RESTful架构的物联网系统,包含两个角色客户端和服务器端,而在MQTT协议中包括发布者,代理器(服务器)和订阅者。
MQTT协议消息——MQTT中的消息可理解为发布者和订阅者交换的内容(负载),这些消息包含具体的内容,可以被订阅者使用。
MQTT协议主题——MQTT中的主题可理解为相同类型或相似类型的消息集合。

本文说明如何在树莓派上安装Mosquitto。本文通过两个简单的例子说明树莓派中如何使用MQTT协议实现消息订阅,这些例子包括Mosquitto_sub指令实现消息订阅和paho-python扩展库实现GPIO端口的远程控制。本文中使用了两个工具——Mosquitto paho-python,其中Mosquitto是一款实现了 MQTT v3.1 协议的开源消息代理软件,提供轻量级的,支持发布/订阅的的消息推送模式,使设备对设备之间的消息通信简单易用;另外,paho-python是一个符合MQTT v3.1协议的客户端,paho-python可连接MQTT代理服务器、发布消息、订阅消息和获得推送消息。

1 在树莓派上安装Mosquitto

在树莓派上安装Mosquitto和其他平台类似,如果在树莓派平台直接编译时间可能会稍长些。Mosquitto源代包不大,所以编译时间尚可忍受。

1.1 安装

截止2014年9月,最新版本为mosquitto-1.3.4。在树莓派中新建一个目录,例如software。

# 下载源代码包
wget http://mosquitto.org/files/source/mosquitto-1.3.4.tar.gz
# 解压
tar zxfv mosquitto-1.3.4.tar.gz
# 进入目录
cd mosquitto-1.3.4
# 编译
make
# 安装
sudo make install

1.2 安装注意点

编译找不到openssl/ssl.h
解决方法:安装openssl

sudo apt-get install libssl-dev

编译过程找不到ares.h
解决方法:修改config.mk中的WITH_SRV:=yes,改为WITH_SRV:=yes

使用过程中找不到libmosquitto.so.1
error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory

解决方法:修改libmosquitto.so位置

# 创建链接
sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
# 更新动态链接库
sudo ldconfig

make: g++:命令未找到
解决方法:安装g++编译器

2 简单的例子

设计一个简单的测试案例,在PC机上运行MQTT代理服务器,而树莓派订阅主题为gpio的消息,PC机发布同主题消息,消息的内容为JSON数据包,数据包格式为{“index”:17,“value”:0},index代表树莓派GPIO的编号,value代表打开或关闭状态。

 

本例中PC机IP地址为 192.168.1.110,树莓派的IP地址为192.168.1.106

2.1 在PC机中开启MQTT服务

mosquitto -v

2.2 在树莓派中订阅消息

-h指定MQTT代理服务器主机,指向PC机IP地址192.168.1.110

mosquitto_sub -v -t gpio -h 192.168.1.110

2.3 在PC机中发布消息

-h指定MQTT代理服务器主机,指向PC机IP地址192.168.1.110

mosquitto_pub -t gpio -h 192.168.1.110 -m "{\"pin\":17,\"value\":0}"

2.4 消息被推送到树莓派中

最后在树莓派中输出以下内容:

gpio {"index":17,"value":0}

在PC机MQTT服务器控制台中输出

1410600001: mosquitto version 1.3.4 (build date 2014-09-13 15:55:06+0800) starting
1410600001: Using default config.
1410600001: Opening ipv4 listen socket on port 1883.
1410600001: Opening ipv6 listen socket on port 1883.
1410600062: New connection from 192.168.1.106 on port 1883.
1410600062: New client connected from 192.168.1.106 as mosqsub/3063-raspberryp (c1, k60).
1410600062: Sending CONNACK to mosqsub/3063-raspberryp (0)
1410600062: Received SUBSCRIBE from mosqsub/3063-raspberryp
1410600062: gpio (QoS 0)
1410600062: mosqsub/3063-raspberryp 0 gpio
1410600062: Sending SUBACK to mosqsub/3063-raspberryp
1410600122: Received PINGREQ from mosqsub/3063-raspberryp
1410600122: Sending PINGRESP to mosqsub/3063-raspberryp
1410600152: New connection from 192.168.1.110 on port 1883.
1410600152: New client connected from 192.168.1.110 as mosqpub/9793-EasyARM (c1, k60).
1410600152: Sending CONNACK to mosqpub/9793-EasyARM (0)
1410600152: Received PUBLISH from mosqpub/9793-EasyARM (d0, q0, r0, m0, 'gpio', ... (22 bytes))
1410600152: Sending PUBLISH to mosqsub/3063-raspberryp (d0, q0, r0, m0, 'gpio', ... (22 bytes))
1410600152: Received DISCONNECT from mosqpub/9793-EasyARM
1410600182: Received PINGREQ from mosqsub/3063-raspberryp
1410600182: Sending PINGRESP to mosqsub/3063-raspberryp

3 使用MQTT远程控制GPIO

下面借助python-gpio扩展库,通过消息推送的方式实现GPIO端口的远程控制。

3.1 安装paho-mqtt

使用pip工具安装paho-mqtt,输入以下指令即可:

sudo pip install paho-mqtt

3.2 树莓派订阅代码 simple.py

# -*- coding: utf-8 -*-  
import paho.mqtt.client as mqtt
import RPi.GPIO as GPIO
import json
  
# BCM GPIO编号
pins = [17,18,27,22,23,24,25,4]
def gpio_setup():
    # 采用BCM编号
    GPIO.setmode(GPIO.BCM)
    # 设置所有GPIO为输出状态,且输出低电平
    for pin in pins:
        GPIO.setup(pin, GPIO.OUT)
        GPIO.output(pin, GPIO.LOW)
         
def gpio_destroy():
    for pin in pins:
        GPIO.output(pin, GPIO.LOW)
        GPIO.setup(pin, GPIO.IN)
         
# 连接成功回调函数
def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))
    # 连接完成之后订阅gpio主题
    client.subscribe("gpio")
  
# 消息推送回调函数
def on_message(client, userdata, msg):
    print(msg.topic+" "+str(msg.payload))
    # 获得负载中的pin 和 value
    gpio = json.loads(str(msg.payload))
  
    if gpio['pin'] in pins:
        if gpio['value'] == 0:
            GPIO.output(gpio['pin'], GPIO.LOW)
        else:
            GPIO.output(gpio['pin'], GPIO.HIGH)
  
if __name__ == '__main__':
    client = mqtt.Client()
    client.on_connect = on_connect
    client.on_message = on_message
    gpio_setup()
     
    try:
        # 请根据实际情况改变MQTT代理服务器的IP地址
        client.connect("192.168.1.110", 1883, 60)
        client.loop_forever()
    except KeyboardInterrupt:
        client.disconnect()
        gpio_destroy()

3.3 启动服务并发布消息

在PC机中启动MQTT代理服务

mosquitto -v

在树莓派中运行脚本

sudo python simple.py

在PC机中发布消息

# 打开GPIO17
mosquitto_pub -h 192.168.1.110 -t gpio -m "{\"pin\":17,\"value\":1}"
# 关闭GPIO17
mosquitto_pub -h 192.168.1.110 -t gpio -m "{\"pin\":17,\"value\":0}"

运行结果
树莓派GPIO17根据PC机推送的消息点亮或熄灭。

4 总结

本文说明了如何在树莓派中使用MQTT客户端,通过paho-mqtt实现GPIO的远程控制。本例在局域网中运行并能不能体现出MQTT协议在远程控制中的优越性。后期还将花更多的时间实践和分析MQTT协议。

转自:https://blog.csdn.net/xukai871105/article/details/39255089

相关资料:
1、https://blog.csdn.net/xukai871105/article/details/39252653
2、http://blog.csdn.net/shagoo/article/details/7910598
3、https://www.jianshu.com/p/f8d824afbe3d

 

 

树莓派上搭建自己的 python 开发环境

一般情况下,在烧录完镜像以后就可以直接在树莓派上通过 thony idle 去进行 python 的开发了.

但是用惯了 pycharm 和习惯了 vim 编程的我怎么可以直接用文本编辑器写代码呢?

效率完全没有了啊!

安装完镜像环境后,就可以在树莓派上开发了,为了开发opencv for python,我在树莓派上搭建了vim的python开发环境,除了配置.vimrc以外还要给各位小伙伴安利一款VIM python 自动补全插件:pydiction。

这是在纯shell环境下进行python编程的一款利器, 全屏编辑器结合这款利器各种 python 补全不再是问题。
pydiction可以实现下面python代码的自动补全:

简单python关键词补全
python 函数补全带括号
python 模块补全
python 模块内函数,变量补全
from module import sub-module 补全


  1. 安装 vim

sudo apt-get  update

sudo apt-get -y install vim git

2. 下载插件

mkdir -p ~/.vim/bundle

cd ~/.vim/bundle

git clone https://github.com/rkulla/pydiction.git

3. 配置~/.vimrc

vim ~/.vimrc

4. 在配置文件最下面填写

#载入文件类型插件

filetype plugin on

#配置插件路径

let g:pydiction_location = ‘~/.vim/bundle/pydiction/complete-dict’

#设置补全菜单的高度

let g:pydiction_menu_height = 3

然后就可以通过 vim 进行代码编写了.这时候就有了自动补全的功能.

#配色方案(可用 :highlight 查看配色方案细节)

colorscheme murphy

#打开语法高亮

syntax on

#侦测文件类型

filetype on

#载入文件类型插件

filetype plugin on

#为不同文件类型使用不用缩进

filetype indent on

#显示行号

set number

#打开自动缩进

set autoindent

#使用 C/C++ 的缩进方式

set cindent

#为 C 程序提供自动缩进

set smartindent

#设置自动缩进长度为四个空格

set shiftwidth=4

#按退格键时可以一次删掉 4 个空格

set softtabstop=4

#设定 tab 键长度为 4

set tabstop=4

#将 tab 展开为空格

set expandtab

#去掉输入错误时的提示声音

set noerrorbells

#右下角显示光标位置

set ruler

#总是显示状态行

set laststatus=2

#自定义状态行
set statusline=%F%m%r%h%w[%L][%{&ff}]%y[%p%%][%04l,%04v]

#当前列数+当前行数+当前光标位置百分比+使用的语法高亮器+文件格式+文件总行数+预览标志+帮助文件标志+只读标志+已修改标志+当前文件绝对路径

#强调匹配的括号

set showmatch

#光标短暂跳转到匹配括号的时间, 单位是十分之一秒

set matchtime=2

#显示当前正在键入的命令

set showcmd

# 设置自动切换目录为当前文件所在目录,用 :sh 时候会很方便

set autochdir

# 搜索时忽略大小写

set ignorecase

#随着键入即时搜索

set incsearch

#有一个或以上大写字母时仍大小写敏感

set smartcase

#代码折叠

set foldenable

set foldmethod=indent

#在左侧显示折叠的层次

set foldcolumn=4

#针对 Python 文件的设定

if has(“autocmd”)

autocmd FileType python set tabstop=4 shiftwidth=4 expandtab

endif

#配置pydiction插件路径

let g:pydiction_location = ‘/home/pi/.vim/bundle/pydiction/complete-dict’

#设置pydiction补全菜单的高度

let g:pydiction_menu_height = 3

希望对大家有用,谢谢!

利用树莓派和官方摄像头实现延时摄影

最近看了一个朋友用树莓派做的延时视频,感觉挺不错的,突然也想做一个. 手头正好有树莓派和摄像头,所以也尝试着做了一下,非常简单.

首先说明一下什么是延时摄影:

要创建延时视频,只需将Raspberry Pi配置为定期拍摄照片(例如每分钟),然后使用应用程序将图片拼接成视频。原理就这么简单.

有两种方法可以做到这一点。如果是官方摄像头,实现起来就更加简单了.

使用Raspistill的内置延时模式

raspistill应用程序具有内置的延时模式,使用--timelapse(或-tl)命令行开关。

切换之后的值是拍摄之间的时间(以毫秒为单位)。

raspistill -t 30000 -tl 2000 -o image%04d.jpg

请注意%04d输出文件名中的数字:这表示文件名中要显示照片编号。因此,例如,上面的命令将每隔两秒(2000毫秒)产生一次照片的捕获,总时间为30秒(30000毫秒),名为image0001.jpg,image0002.jpg,依此类推,直到image0015.jpg。

%04d指示四位数字,有前导零添加,以弥补所需的位数。因此,例如,%08d会产生一个八位数的数字。0 这个位,如果你不想要前导零,你可以不加。

如果输入的- t 为0,则应用程序将以其最小时间间隔进行拍摄照片。请注意,捕获之间存在大约30毫秒的最小强制暂停,以确保可以进行曝光计算。

使用cron(计划任务)

使用自定义拍照的好方法是使用cron

打开cron 表进行编辑:

crontab -e

这将询问您要使用哪个编辑器,或者在默认编辑器中打开。在编辑器中打开文件后,添加以下行以安排每分钟拍照.

camera.sh 可以自己写个拍摄的脚本,其中2>&1是将错误输出输入到标准输出上.

* * * * * /home/pi/camera.sh 2>&1

保存并退出,您应该看到以下消息:

crontab: installing new crontab

确保您的脚本不保存使用相同文件名拍摄的每张照片。否则将每次覆盖原有的图片。

将图像拼接在一起

现在,您需要将照片拼接成一个视频。

你可以在Pi上使用,mencoder非常赞, 但处理速度很慢。也可以将图像文件传输到台式计算机或笔记本电脑并在那里处理视频,那样会快一些,因为如果你拍摄了24小时的图片,每小时的每分钟拍摄5张图片的话,数据量也是大的惊人的.处理起来也是时间更长.但是如果在树莓派上通过脚本自行处理了,最后得到的视频就可以直接播放了. 如果你会推流处理,那还可以直接推到直播平台. 也是很好的.

切换到包含所有图像的文件夹,并将文件名重定向到一个文本文件。例如:

ls *.jpg > pics.list

在RASPBERRY PI上

虽然速度很慢(由于使用软件进行编码而不是使用Raspberry Pi硬件加速),但您可以使用各种可用工具将JPEG图像拼接在一起。其中有个软件叫avconv,需要安装, 安装好以后就可以拼接转码了。

sudo apt-get install libav-tools

现在,可以使用这些工具将JPEG文件转换为H264格式的视频文件。

avconv -r 24 -i image%04d.jpg -r 24 -vcodec libx264 -vf scale=800:480 timelapse.mp4

在Raspberry Pi 3上,它可以每秒编码多于一帧。其他Pi型号的性能会有所不同.

目前我这边使用的参数是:

  • -r 24在输入和输出文件中假设每秒二十四帧。
  • -i image%04.jpg输入文件规范(用于匹配捕获期间生成的文件)。
  • -vcodec libx264使用软件x264编码器进行编码。
  • -vf scale = 800:480  调整为输出720p。您还可以使用1920:1080或更低分辨率,具体取决于你自己的要求, 例如,我是要在52pi.taobao.com 买的800×480分辨率。请注意,Pi只能播放高达1080p的视频,但如果您打算以4K播放,则可以在此设置。
  • timelapse.mp4输出文件的名称。

avconv具有针对不同编码选项和其他设置的综合参数集。这些可以使用列出avconv --help

在另一台LINUX计算机上

您可以使用与Raspberry Pi相同的说明,或者替代包,例如mencoder

sudo apt-get install mencoder

现在运行以下命令:

mencoder -nosound -ovc lavc -lavcopts vcodec=mpeg4:aspect=16/9:vbitrate=8000000 -vf scale=1920:1080 -o timelapse.avi -mf type=jpeg:fps=24 mf://@pics.list

一旦完成,您应该有一个视频文件,timelapse.avi

然后你就可以用播放器播放查看了.

omxplayer -o hdmi  timelapse.avi

效果是不是杠杠滴?

树莓派安装 Nginx + PHP7.0 + Pi Dashboard

之前我们介绍过树莓派搭建LNMP环境的方法,以及给树莓派装一个仪表盘来监控树莓派运行状态。
近期有用户反馈树莓派最新版的系统已经无法找到 PHP5 的软件包了,这是因为新版本已经用 PHP7 替代了 PHP5,而 Nginx 下 PHP-FPM 的配置方法和 PHP5 有略有不同。因此我们打算更新这篇《给树莓派安装 Nginx + PHP7.0 + Pi Dashboard》来介绍如何用在树莓派上部署新的 Nginx 和 PHP 环境,并部署好 Pi Dashboard 的方法。下面假设你已经刷好了 Raspbian Stretch 系统。

安装 Nginx 和 PHP7

在 Pi 的终端运行以下命令。

sudo apt-get update
sudo apt-get install nginx php7.0-fpm php7.0-cli php7.0-curl php7.0-gd php7.0-mcrypt php7.0-cgi
sudo service nginx start
sudo service php7.0-fpm restart

如果安装成功,可通过 http://树莓派IP 访问到 Nginx 的默认页。Nginx 的根目录在 /var/www/html
进行以下操作来让 Nginx 能处理 PHP。

sudo nano /etc/nginx/sites-available/default

将其中的如下内容

location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ =404;
 }

替换为

location / {
index index.html index.htm index.php default.html default.htm default.php;
}
 
location ~\.php$ {
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

Ctrl + O 保存再 Ctrl + X 退出。

sudo service nginx restart

最后重启 Nginx 即可,以上步骤在树莓派3B + Raspbian Stretch 系统版本上测试通过。

Pi Dashboard 介绍

Pi Dashboard (Pi 仪表盘) 是树莓派实验室发布的一款开源的 IoT 设备监控工具,目前主要针对树莓派平台,也尽可能兼容其他类树莓派硬件产品。你只需要在树莓派上安装好 PHP 服务器环境,即可方便的部署一个 Pi 仪表盘,通过炫酷的 WebUI 来监控树莓派的状态!

目前已加入的监测项目有:

  • CPU 基本信息、状态和使用率等实时数据
  • 内存、缓存、SWAP分区使用的实时数据
  • SD卡(磁盘)的占用情况
  • 实时负载数据
  • 实施进程数据
  • 网络接口的实时数据
  • 树莓派IP、运行时间、操作系统、HOST 等基础信息

项目主页:http://maker.quwj.com/project/10
GitHub地址:https://github.com/spoonysonny/pi-dashboard

视频预览

部署 Pi Dashboard

这里介绍两种方法将 Pi Dashboard 部署在 Nginx 上。
SFTP 上传
在 GitHub 下载本项目源码。通过 FileZilla 等 FTP 软件将解压出来的目录上传到树莓派的 /var/www/html目录下。
那么可以通过 http://树莓派IP/pi-dashboard 访问部署好了的 Pi Dashboard。

如果页面无法显示,可以尝试在树莓派终端给源码添加运行权限,例如你上传之后的路径是 /var/www/html/pi-dashboard,则运行。

cd /var/www/html
sudo chown -R www-data pi-dashboard

GitHub 部署
如果你了解过 GitHub 的基本操作,通过 GitHub 来下载本项目到 Pi 上会相当方便。

#如果已安装过 git 客户端可以跳过下一行
sudo apt-get install git
cd /var/www/html
sudo git clone https://github.com/spoonysonny/pi-dashboard.git

即可通过 http://树莓派IP/pi-dashboard 访问部署好了的 Pi Dashboard。

同样如果页面无法显示,可以尝试在树莓派终端给源码添加运行权限,例如你上传之后的路径是 /var/www/html/pi-dashboard,则运行。

cd /var/www/html
sudo chown -R www-data pi-dashboard

以上步骤在树莓派3B + Raspbian Stretch 系统版本上测试通过。

Pi Dashboard 常见问题

Q:Pi Dashboard 的 WebUI 支持在哪些终端上查看?
A:任何带有浏览器的终端都可以查看,无论是在内网还是外网的电脑、Pad或是智能手机上。Pi Dashboard 对不同的设备做了响应式布局,能很好兼容手机浏览。

Q:我没法通过外网IP访问到怎么办?
A:国内很多地区的ISP都不提供独立的外网IP了,可以通过花生壳等工具实现外网访问。对于已有外网独立IP的用户,可以尝试把 Nginx 服务端口从 80 改成其他端口号,再在 IP 地址后添加端口号访问。这是因为国内ISP普遍禁用了80端口。

Q:我有一个域名,如何将域名绑定到树莓派上?
A:可以参考DNSPod动态IP解析更新程序树莓派搭建LNMP环境。将域名指向树莓派IP后需要修改 Nginx 网站配置的 servername 这项为你的域名即可。

使用条款

本项目是开源项目,NXEZ.com 保留作为发起者的权利。
允许在 GPL v3.0 协议下对项目进行使用。请务必在保证项目的出处、声明、超链接等内容完整。

本文来自:树莓派实验室

 

 

 

树莓派超频全攻略

树莓派超频,基本上说,就是调整几个设备参数,然后让树莓派硬件“加满油”工作,而这个过程则需要一定的硬件知识以及特殊技能。不过有一点你需要注意,超频对硬件来说是存在一定风险的,但是本文也会告诉你如何去避免这些风险。

超频风险和警告提示

目前树莓派3官方还不支持超频,所以你的树莓派设备可能会有损坏的风险,这一点我们可不负责,所以你需要考虑清楚,“盈亏自负”。

超频可能会让硬件温度超过90摄氏度,情况好一点的话,就是系统或软件崩溃,情况不好的话,可能会损坏CPU或内存芯片。所以树莓派上的重要芯片都需要安装散热器,强烈建议大家安装高功率散热风扇。

再次提示:如果没有安装有效的散热设备,请千万不要按照本文所介绍的方法超频。

硬件要求

如果你想超频树莓派,你至少需要下列三种关键硬件:

1.   树莓派:本文将使用Raspberry Pi 3 Model B V1.2,运行Raspbian GNU/Linux8(jessie).

2.   供电电源:强烈建议大家使用稳定的电源,超频后的树莓派3大概需要至少1.5A,所以电源至少要能够提供2A电流。

3.   散热设备:为了防止树莓派硬件(主要是芯片)被烧坏,我们必须安装散热风扇;

重要提示-开始之前请使用下列命令更新系统:

$sudo apt-get update && sudo apt-get dist-upgrade

安装“sysbench“工具之后,你就可以随时查看系统性能了。安装命令如下:

$sudo apt-get install sysbench

下图中包含了超频所需的全部组件:

硬件清单:

1.   RaspberryPi 3;

2.   5V/2.5A的供电电源;

3.   散热风扇;

4.   三个散热片;

5.   底座;

安装完成后的情况如下:

超频前的检查工作

在开始超频之前,我们一定要检查设备状态。

监控CPU频率

为了了解CPU的当前运行频率,我们需要读取出从/sys/devices/system/cpu/cpu0/cpufreq/目录中读取出cpuinfo_min_freq、 cpuinfo_max_freq和cpuinfo_cur_freq这三个文件:

cpuinfo_min_freq– 空闲模式下的最小频率

cpuinfo_max_freq– 最大工作频率

cpuinfo_cur_freq– 树莓派当前的运行频率

监控CPU温度

我们可以运行vcgencmd measure_temp命令以及while循环来监控CPU每秒钟的温度变化:

$while true ; do vcgencmd measure_temp ; sleep 1 ; done

循环会一直运行下去,直到我们按下 CTRL+C。

设置默认速度

树莓派的CPU配置在空闲模式下的默认速度为:

arm_freq=600MHz
core_freq=250MHz

如果进程在运行的话,频率就会变成:

arm_freq=1200MHz

为了防止空闲模式被破坏,我们还需要修改/boot/config.txt

force_turbo=1(警告!修改该参数将会失去保修)
boot_delay=1

重启设备,再次检查当前的运行频率,现在应该是1200000 KHz了。

性能测试(未超频)

首次进行性能测试的命令如下:

$sysbench --test=memory --cpu-max-prime=2000 --num-threads=4 run

输出结果如下所示:

待会儿超频之后我们再对比一下性能情况。

树莓派3超频攻略

超频选项

需要设置的超频参数都在/boot/config.txt文件中,选项如下:

1.   CPU超频:修改“arm_freq”参数-ARM频率,单位为MHz。

2.   GPU超频:修改“core_freq”参数-GPU处理器核心频率,单位为MHz。

3.   内存超频:修改“sdram_freq”参数-SDRAM频率,单位为MHz。

4.   内存扩展:使用ZRAM。

5.   额外超频参数“Over_voltage”:调整ARM/GPU核心电压,只有指定了“force_turbo” 或“current_limit_override”参数之后,才可以将电压调整为6V以上。

6.   额外超频参数“Force_turbo”:这个参数可以禁用动态cpufreq驱动器。

修改参数之前,别忘了备份/boot/config.txt。

不同型号的树莓派在制作过程中可能会有一定的参数偏差,所以我们需要进行多次测试才能确定自己设备的最佳值。

遇到问题怎么办?

如果发现超频参数修改之后设备无法启动,你可以重启时按住“shift“键,这样就可以暂时禁用所有的超频参数了,并允许你在启动之后重新修改设置。

超频算法

这份算法可以调整CPU、GPU和内存的频率,以实现更好的性能。

树莓派3的默认值如下:

arm_freq=1200
gpu_freq=400
core_freq=400
sdram_freq=450
over_voltage_sdram=0

接下来,将下列参数写入到/boot/config.txt文件,然后重启设备:

arm_freq=1300 
gpu_freq=500 
sdram_freq=500 
over_voltage_sdram=0

如果设备运行正常的话,我们就可以尝试下一个配置:逐渐增加arm_freq的值,到1500为止。保存,然后重启。

如果设备无法运行或运行不稳定的话,你可以逐渐调高over_voltage_sdram的值,直到设备能够稳定运行为止。如果调整over_voltage_sdram参数救不了你的话,你可以尝试调低arm_freq的值,每次修改之后别忘了重启设备。

使用ZRAM超频

这种方法涉及到设备内部内存的扩展,这里需要使用到ZRAM以及内部内存压缩。ZRAM使用了LZ4以及LZO压缩算法,LZO是默认的,它可以创建一个块设备,并当作通用RAM磁盘来使用。

如何加载ZRAM?由于ZRAM已经整合进Linux内核了,我们只需要使用命令“sudo modprobe zram“来加载该模块即可。我们可以使用命令”sudolsmod | grep zram“来查看ZRAM模块的运行情况:

如果我们想用ZRAM来优化树莓派的话,我们可以从这个【GitHub】库中获取zram.sh脚本。该脚本可以给每一个CPU核心创建一个额外的压缩RAM交换磁盘并激活,除此之外不需要任何其他的配置操作了。

你可以使用下列命令下载脚本:

sudo wget -O /usr/bin/zram.sh https://raw.githubusercontent.com/novaspirit/rpi_zram/master/\zram.sh

然后制作可执行文件:

在激活ZRAM之前先查看内存信息,“free -h“和”swap -s“命令表明我们树莓派已激活的交换空间仅有100MB。

接下来,使用下列命令运行ZRAM:

sudo zram.sh

该脚本将为每一个CPU核心创建大小为232MB的交换空间,总共大小约为1GB。再次运行“free -h“和”swap-s“命令后,我们看到总的交换空间(4个分区)已经增加到了1GBRAM:

为了让树莓派在启动之后自动运行ZRAM,我们还需要修改/etc/rc.local文件(添加红圈中的代码:/usr/bin/zram.sh &):

重启设备以确认修改成功。

性能测试(已超频)

设置完成之后,运行下列命令进行性能测试:

sysbench--test=memory --cpu-max-prime=2000 --num-threads=4 run

结果如下:

大家可以看到,超频之后所有的性能参数值都有所提升,大家可以跟之前的测试结果对比一下。

如何恢复原状?

如果你不想超频的话,你只需要把之前备份的/boot/config.txt文件重新复制到/boot目录中,并重写config.txt文件即可。当然了,你还需要把“/usr/bin/zram.sh&”从 /etc/rc.local文件中删除。重启之后,一切就恢复原样了。

参考资料

1.   https://eltechs.com/run-plex-media-server-on-raspberry-pi/

2.   https://eltechs.com/run-spotify-on-raspberry-pi/

3.   https://eltechs.com/run-dropbox-on-raspberry-pi/

4.   https://eltechs.com/run-teamspeak-3-server-on-raspberry-pi/

5.   https://eltechs.com/run-google-chrome-on-raspberry-pi/

6.   https://eltechs.com/netflix-raspberry-pi/

7.   https://eltechs.com/retropie-raspberry-pi-retro-gaming-machine/

* 参考来源:eltechs,FB小编Alpha_h4ck编译,转载来自FreeBuf.COM

这个人改造了自己的桌子,让自己的 Google Home 用上 “实体专辑”

相信,还在买 CD 或者黑胶的用户其实还有不少。

爱范儿(微信号:ifanr)在之前谈黑胶的时候就已经提到,现在有不少年轻用户还会追黑胶唱片。他们的着眼点并不在体验传统的味道上,而是觉得收集黑胶或者其他实体专辑是一种支持歌手出唱片或提升“仪式感”的行为。

 

虽然不怎么听,但买起来也不会少。

确实,现在要听个实体专辑确实也不容易。黑胶的话经不起折腾,听 CD 也不方便。而且现在的人已经习惯了那种以单曲、EP 为主的音乐消费模式,很少人能够坚持把一张专辑完完整整听完的。

OLYMPUS DIGITAL CAMERA

所以在声音体验也没有差太多的前提下,与其去不断切歌、换碟,倒不如直接用流媒体来得方便。

但其实,现在有人还想去玩“实体专辑”。GitHub 上有一位用户,就通过树莓派做了一个识别感应器,让自家的 Google Home 用上“实体专辑”。

 

根据 The Verge 的报道,这位来自 GitHub 上的用户叫“hoveeman”,他将一个射频识别读卡机和树莓派 Raspberry Pi Zero 连接起来,并开发了一套专用的程序。安装上这套程序后,树莓派能够给家中的 Google Home 发出指令,让它播放相应的专辑。

在这套组合中,射频识别读卡器 RFID 模块的任务就是用来识别“实体专辑”。

这些“实体专辑”,其实是 hoveeman 自己做的一些小卡片。小卡片的表面印着专辑封面、名称和表演者,卡片内部则呆在了一块小型识别芯片。当用户将芯片放到 RFID 模块上,模块就能够识别出相应的信息,传输到 Raspberry Pi Zero 上。电脑处理后,就会发送的 Google Home 上,让它播放相应的专辑。

这个模块能够隐藏在家居产品当中,不管是木桌还是凳子,只要不阻碍 RFID 识别的,都能够藏在里面。虽然这套设备带来的解决方案有点“多此一举”,但现在看起来有点意思。至少,它比你经常换 CD 来得方便。

现在,Hoveeman 将这套解决方案都上传到 GitHub 上。你可以在这个主页上查到它用过的设备和代码,自己做一套相同的出来。

(Hoveeman 整套方案的内容物)

这个其实有点像之前在那个用 RFID 来控制 Spotify 的方案,那个方案也是用识别卡片来让智能设备播放 Spotify 中的专辑或特定播放列表,做法和实现目标基本上没有什么大分别。

这些方案对于开发者来说,也都是自娱自乐的东西而已。

毕竟,现在的人确实也不怎么喜爱这种消费方式。他们只需要一个简单的听歌方案,而流媒体服务正好能够给他们最简单直接的体验,有这个来确保基本需求之后,其他东西也不重要。

 

给树莓派 Zero 添加一个RCA视频输出插头

你知道吗?树莓派 Zero 也是有集成视频输出接口的。

如果你希望用老式的电视作为树莓派 Zero 的显示器,往下阅读吧……

 

没错,正如图上这么简单就可以搞定。树莓派 Zero 并没有限制视频只能通过 HDMI 接口输出,同之前的树莓派1代B型一样,只需要自己将 RCA 给 DIY 接上即可。

首先你需要准备:
树莓派 Zero 主板
RCA 端子 1 个
2Pin 排针 1 个
母对母杜邦线2根

按照图上所示,将排针焊接到树莓派 Zero 的这个位置。

 

这样之后,树莓派会自动检测视频接口并选择从 HDMI 或 RCA 接口输出。如果到这一步并没有效果,请继续阅读按照下面的配置来让它正常工作。

配置软件

先备份 config.txt 文件,以备遇到故障时可以随时恢复。

sudo cp /boot/config.txt /boot/config.txt_backup

然后修改 config.txt。

sudo nano /boot/config.txt

有两行需要修改,去掉这几行前的注释符号“#”。

sdtv_mode=2
hdmi_force_hotplug=1

保存之后关闭树莓派、通过 RCA 接口接上显示器、再启动树莓派,看看显示器是不是正常工作了吧!

本文来自:树莓派实验室