作为玩转树莓派的第一弹,这里我们将借助iPhone 和 树莓派3b 实现通过Siri语音控制LED灯开关的功能。如上图控制逻辑类似,这里我们使用HomeBridge作为桥梁,将Siri 的语音指令发送给树莓派,然后一个插件控制gpio 27引脚上LED灯的亮灭。

Demo

Let’s begin !!!

硬件层

本期物料清单

1、树莓派3b(默认ssh 打开) 一个
2、iPhone (ios 10以上版本) 一个
3、LED二极管 一个
4、杜邦线 两根
5、电阻 若干
5、笔记本(mac/win) 一台

其他,诸如树莓派电源(5v 2.5A),HDMI显示器连接线,读卡器等树莓派必备配件应该有。如果没有HDMI显示器连接线,可以参考win10连结ubuntu 远程桌面进行远程查看。

树莓派3b

规格参数,

SOC: Broadcom BCM2837芯片
CPU: 四核Cortex-A53@1.2GHz,ARMv8架构,32KB一级缓存 512KB二级缓存
GPU: 双核VideoCore IV GPU@400MHz,3D core@300MHz,OpenGL ES 2.0,1080p 60fps h.264/MPEG-4 AVC
工作温度范围: SOC-4085°C,LAN9514(070°C)
内存:1GB LPDDR2(900 MHz)
SMSC LAN9514:4个USB2.0 和10/100M Ethernet共享
BCM43438:WiFi(802.11 b/g/n 2.4GHz)和蓝牙4.1(BLE),支持无线电
GPIO: 40-pin
视频接口:HDMI1.4
接口:DSI显示屏接口(15-pin)、CSI 2 摄像头接口(15-pin)、3.5mm复合视频输出口、microSD接口
供电:支持5V 2.5A

GPIO引脚图,

管脚驱动电流, 详细参见官方说明

Pi1 (B+) Pi2 B Pi3 B (amps) Zero (amps)
Boot Max 0.26 0.40 0.75 0.20
Avg 0.22 0.22 0.35 0.15
Idle Avg 0.20 0.22 0.30 0.10
Video playback (H.264) Max 0.30 0.36 0.55 0.23
Avg 0.22 0.28 0.33 0.16
Stress Max 0.35 0.82 1.34 0.35
Avg 0.32 0.75 0.85 0.23

软件层

这一部分重点参考了 树莓派安装homekit

依赖包

1
2
3
4
5
6
7
8
## 安装nodejs

curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
sudo apt-get install -y nodejs

## 安装libavahi-compat-libdnssd-dev

sudo apt-get -y install libavahi-compat-libdnssd-dev

如果你的树莓派是最新的系统,在安装libavahi-compat-libdnssd-dev的时候,应该会报一个如下依赖错误:

1
2
3
4
libavahi-compat-libdnssd-dev : Depends: libavahi-client-dev but it is not 
going to be installed

E: Unable to correct problems, you have held broken packages.

这是因为libdbus的版本过高而导致的依赖冲突,使用aptitude 解决依赖问题。更多参考邻家的の柠檬叔

1
2
3
4
## 如果安装过 aptitude,则跳过,直接执行第二条指令
sudo apt-get install aptitude
sudo aptitude install libavahi-compat-libdnssd-dev

aptitude会给出一系列的建议,仔细观察,然后根据你的情况选择是(y)或者否(n)。我这里第二次才给出正确的建议。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
The following NEW packages will be installed:
libavahi-client-dev{a} libavahi-common-dev{a} libavahi-compat-libdnssd-dev libavahi-compat-libdnssd1{a} libdbus-1-dev{ab}
0 packages upgraded, 5 newly installed, 0 to remove and 1 not upgraded.
Need to get 401 kB of archives. After unpacking 1,160 kB will be used.
The following packages have unmet dependencies:
libdbus-1-dev : Depends: libdbus-1-3 (= 1.8.20-0+deb8u1) but 1.8.22-0+deb8u1 is installed.
The following actions will resolve these dependencies:
Keep the following packages at their current version:
1) libavahi-client-dev [Not Installed]
2) libavahi-compat-libdnssd-dev [Not Installed]
3) libdbus-1-dev [Not Installed]
Accept this solution? [Y/n/q/?] n
The following actions will resolve these dependencies:
Downgrade the following packages:
1) libdbus-1-3 [1.8.22-0+deb8u1 (now) -> 1.8.20-0+deb8u1 (stable)]
Accept this solution? [Y/n/q/?] Y
The following packages will be DOWNGRADED:
libdbus-1-3
The following NEW packages will be installed:
libavahi-client-dev{a} libavahi-common-dev{a} libavahi-compat-libdnssd-dev libavahi-compat-libdnssd1{a} libdbus-1-dev{a}
0 packages upgraded, 5 newly installed, 1 downgraded, 0 to remove and 1 not upgraded.
Need to get 550 kB of archives. After unpacking 1,159 kB will be used.
Do you want to continue? [Y/n/?] Y
Get: 1 http://mirrors.sohu.com/raspbian/raspbian/ jessie/main libavahi-compat-libdnssd1 armhf 0.6.31-5 [42.9 kB]
Get: 2 http://mirrors.sohu.com/raspbian/raspbian/ jessie/main libdbus-1-3 armhf 1.8.20-0+deb8u1 [149 kB]

npm镜像(可选)

npm全称Node Package Manager,是node.js的模块依赖管理工具。
因为homebridge需要通过npm安装,但是由于npm的源在国外,所以国内用户使用起来各种不方便。你这里可以选择是否对npm 设置国内镜像。

1
2
3
4
5
6
7
8
9
10
1.临时使用
npm --registry https://registry.npm.taobao.org install express

2.永久使用
npm config set registry https://registry.npm.taobao.org

// 配置后可通过下面方式来验证是否成功
npm config get registry
// 或
npm info express

HomeBridge

Homebridge是一个轻量级的NodeJS服务器,您可以在您的家庭网络上运行,模拟iOS HomeKit API。它支持插件,它是社区贡献的模块,提供了从HomeKit到“智能家居”设备制造商提供的各种第三方API的基本桥梁。

总的来讲,就是通过Homebridge,使得原先没有认证的智能家居模块可以使用 苹果“家庭”应用或Siri 进行语音控制。

安装 homebridge:

1
sudo npm install -g --unsafe-perm homebridge

众多的社区插件,可以通过探索其他插件
本次我们将利用wiringpi树莓派GPIO的库 和 homebridge-gpio-wpi2插件来实现使用siri控制LED灯的亮灭。

1
2
sudo apt-get install wiringpi
sudo npm install -g homebridge-gpio-wpi2

联调

硬件连接

在启动homebridge 之前,首先将LED 发光二极管正极,通过杜邦线连接在 树莓派 gpio 口的27 管脚,也就是 靠近芯片那一侧,从上往下数第7个管脚。二极管负极,通过另一根杜邦线连接在 树莓派gpio的ground 管脚,我这里选择是第39管脚。

注意,插杜邦线要注意正负极,配合管脚图谨慎操作,避免树莓派gpio口被烧坏。请根据自己二极管可承受电流,选择性使用电阻来限流。

软件配置

在普通用户pi家目录 新建/home/pi/.homebridge/config.json文件,复制以下内容到config.json ,保存。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

{
"bridge": {
"name": "Homebridge",
"username": "CC:22:3D:E3:CE:30",
"port": 51826,
"pin": "133-45-678"
},
"platforms": [{
"platform" : "WiringPiPlatform",
"name" : "Pi GPIO (WiringPi)",
"overrideCache" : "true",
"autoExport" : "true",
"gpiopins" : [{
"name" : "灯",
"pin" : 27,
"enabled" : "true",
"mode" : "out",
"pull" : "down",
"inverted" : "false",
"duration" : 0,
"polling" : "true"
},{
"name" : "门",
"pin" : 22,
"enabled" : "true",
"mode" : "in",
"pull" : "off",
"inverted" : "false",
"duration" : 0
}]
}]
}

在命令行输入homebridge启动,如下图说明启动成功

如果你的iPhone 和树莓派在同一局域网下, 打开家庭应用,会自动显示可配对的设备homebridge,通过扫描或输入 类似133-45-678即可添加成功。

赶快试试开关吧,这时你也可以通过Siri 进行控制了呢。输入日志如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
6-80f9-017adae59b93
[2018-1-4 15:31:11] [Pi GPIO (WiringPi)] Turning off pin #27
[2018-1-4 15:31:11] [Pi GPIO (WiringPi)] 门 Configure GPIO Pin 57b3e135-6285-404b-9c47-a2f46ec4426b
[2018-1-4 15:31:11] [Pi GPIO (WiringPi)] Setting up interrupt callback
Setup Payload:
X-HM://0023OVLOU45DL
Scan this code with your HomeKit app on your iOS device to pair with Homebridge:
.
.
.
Or enter this code with your HomeKit app on your iOS device to pair with Homebridge:

┌────────────┐
133-45-678
└────────────┘

[2018-1-4 15:31:11] [Pi GPIO (WiringPi)] Loading cached GPIO pins complete
[2018-1-4 15:31:11] Homebridge is running on port 51826.
[2018-1-4 15:32:35] [Pi GPIO (WiringPi)] Turning on pin #27
[2018-1-4 15:32:36] [Pi GPIO (WiringPi)] Turning off pin #27

参考