本书是对树莓派开发的内容进行全面升级之后的第 3 版,囊括丰富的实践示例,详细讲解树莓派的配置与管理、网络连接、操作系统及软件,以及使用Python进行树莓派开发的各项技巧,包括有关Python编程的基础知识、列表与字典、Python高级特性。同时,本书还涉及机器视觉、硬件基础、控制硬件、电机、数字输入、传感器、显示设备、音频设备、物联网、家庭自动化、Arduino等内容。
本书适合程序员、计算机软硬件爱好者,以及对树莓派感兴趣的读者阅读,也适合作为树莓派相关实践课程的指导书。
这是一本全面升级的实战图书,通过200多个动手实验为读者演示了如何在树莓派上运行Linux系统,如何利用Python对树莓派进行编程,如何将树莓派与传感器、电机和Arduino进行连接,以及如何将树莓派用于物联网。
本书涉及以下主题:
(1)配置树莓派并连接网络
(2)使用基于Linux的操作系统
(3)使用Python进行树莓派编程
(4)通过机器视觉让树莓派“睁眼看世界”
(5)通过GPIO接口控制硬件
(6)通过树莓派控制不同类型的电机
(7)使用开关、键盘及其他数字输入
(8)通过传感器测量温度、亮度和距离
(9)利用各种方式连接物联网并实现家庭自动化
西蒙·蒙克博士(Dr. Simon Monk)已经撰写了很多关于电子学和开源硬件的图书,他还为MonkMakes公司设计产品,这是他与妻子Linda共同经营的一家公司。同时,他还是移动软件公司Momote Ltd.的联合创始人,并拥有软件工程博士学位以及控制论和计算机科学的学士学位。
第3版前言 1
第1章 配置与管理 5
1.0 引言 5
1.1 选择树莓派型号 5
1.2 装配系统 8
1.3 封装树莓派 10
1.4 选择电源 11
1.5 选择操作系统 13
1.6 通过NOOBS刷写microSD卡 14
1.7 在不借助NOOBS的情况下安装操作系统 17
1.8 使用PiBakery配置和刷写SD卡 18
1.9 使用PiBakery配置headless模式的树莓派 20
1.10 从真正的硬盘或U盘启动 22
1.11 连接DVI或VGA显示器 24
1.12 使用复合视频显示器/电视 24
1.13 调整显示器中的图像尺寸 26
1.14 优化性能 27
1.15 修改密码 29
1.16 关闭树莓派 30
1.17 为树莓派安装摄像头模块 32
1.18 使用蓝牙设备 34
第2章 网络连接 36
2.0 引言 36
2.1 连接有线网络 36
2.2 查看自己的IP地址 37
2.3 配置静态IP地址 39
2.4 为树莓派配置网络名称 42
2.5 配置无线网络连接 44
2.6 使用控制台线联网 46
2.7 利用SSH远程控制树莓派 48
2.8 利用VNC远程控制树莓派 50
2.9 利用RDP远程控制树莓派 52
2.10 在Mac网络中实现文件共享 53
2.11 将树莓派用作网络附接存储系统 55
2.12 网络打印 58
第3章 操作系统 60
3.0 引言 60
3.1 通过图形界面处理文件 60
3.2 将文件复制到U盘中 61
3.3 启动一个终端会话 63
3.4 利用终端浏览文件系统 64
3.5 复制文件或文件夹 66
3.6 重命名文件和文件夹 67
3.7 编辑文件 68
3.8 查看文件内容 70
3.9 在不借助编辑器的情况下创建文件 70
3.10 创建目录 71
3.11 删除文件或目录 71
3.12 以超级用户权限执行任务 72
3.13 理解文件权限 73
3.14 修改文件的权限 75
3.15 修改文件的属主 76
3.16 屏幕截图 76
3.17 利用apt-get安装软件 77
3.18 删除利用apt-get安装的软件 78
3.19 利用Pip安装Python库 79
3.20 通过命令行获取文件 79
3.21 利用Git获取源代码 80
3.22 获取本书的随附代码 82
3.23 在系统启动时自动运行程序或脚本 85
3.24 让程序或脚本作为服务自动运行 85
3.25 定期自动运行程序或脚本 87
3.26 搜索功能 88
3.27 使用命令行历史记录功能 89
3.28 监视处理器活动 90
3.29 文件压缩 92
3.30 列出已连接的USB设备 93
3.31 将输出从命令行重定向到文件 93
3.32 连接文件 94
3.33 使用管道 94
3.34 不将输出结果显示到终端 95
3.35 在后台运行程序 96
3.36 创建命令别名 96
3.37 设置日期和时间 97
3.38 查看SD卡剩余存储空间 98
3.39 检查操作系统版本 98
3.40 更新Raspbian操作系统 99
第4章 软件 101
4.0 引言 101
4.1 搭建媒体中心 101
4.2 安装办公软件 102
4.3 打造网络摄像头服务器 103
4.4 运行老式游戏控制台模拟器 105
4.5 运行树莓派版Minecraft 107
4.6 树莓派无线电发射器 107
4.7 编辑位图 109
4.8 编辑矢量图 110
4.9 互联网广播 111
第5章 Python入门 113
5.0 引言 113
5.1 在Python 2和Python 3之间做出选择 113
5.2 使用Mu编辑Python程序 114
5.3 使用Python控制台 117
5.4 利用终端运行Python程序 118
5.5 为值(变量)命名 119
5.6 显示输出结果 120
5.7 读取用户的输入 120
5.8 算术运算 121
5.9 创建字符串 122
5.10 连接(合并)字符串 122
5.11 将数字转换为字符串 123
5.12 将字符串转换为数字 124
5.13 确定字符串的长度 125
5.14 确定某字符串在另一个字符串中的位置 125
5.15 截取部分字符串 126
5.16 使用字符串替换另一个字符串中的内容 127
5.17 字符串的大小写转换 127
5.18 根据条件运行命令 128
5.19 值的比较 129
5.20 逻辑运算符 130
5.21 将指令重复执行特定次数 131
5.22 重复执行指令直到特定条件改变为止 132
5.23 跳出循环语句 132
5.24 定义Python函数 133
第6章 Python中的列表与字典 135
6.0 引言 135
6.1 创建列表 135
6.2 访问列表元素 136
6.3 确定列表长度 136
6.4 为列表添加元素 137
6.5 删除列表元素 138
6.6 通过解析字符串创建列表 139
6.7 遍历列表 139
6.8 枚举列表 140
6.9 列表排序 141
6.10 分割列表 142
6.11 将函数应用于列表 142
6.12 创建字典 143
6.13 访问字典 144
6.14 删除字典元素 145
6.15 遍历字典 146
第7章 Python高级特性 147
7.0 引言 147
7.1 格式化数字 147
7.2 格式化时间和日期 148
7.3 返回多个值 149
7.4 定义类 150
7.5 定义方法 151
7.6 继承 152
7.7 向文件中写入内容 153
7.8 读文件 154
7.9 序列化 155
7.10 异常处理 156
7.11 使用模块 157
7.12 随机数 158
7.13 利用Python发送Web请求 160
7.14 Python的命令行参数 160
7.15 从Python运行Linux命令 161
7.16 从Python发送电子邮件 162
7.17 利用Python编写简单Web服务器 163
7.18 让Python无所事事 164
7.19 同时进行多件事情 165
7.20 将Python应用于树莓派版Minecraft 166
7.21 解析JSON 168
7.22 创建用户界面 169
7.23 使用正则表达式在文本中搜索 171
7.24 使用正则表达式来验证数据输入 173
7.25 使用正则表达式抓取网页 174
第8章 机器视觉 176
8.0 引言 176
8.1 安装SimpleCV 176
8.2 为机器视觉配置USB摄像头 177
8.3 将树莓派的摄像头模块用于机器视觉 179
8.4 数硬币 179
8.5 人脸检测 182
8.6 运动检测 184
8.7 光学字符识别 186
第9章 硬件基础 187
9.0 引言 187
9.1 GPIO连接器使用说明 187
9.2 使用GPIO接口时树莓派的安全保护 189
9.3 配置I2C 190
9.4 使用I2C工具 191
9.5 配置SPI 193
9.6 安装PySerial以便通过Python访问串口 194
9.7 安装Minicom以检测串口 194
9.8 使用带有跳线的面包板 195
9.9 使用树莓派的排线连接面包板 196
9.10 使用树莓派Squid 198
9.11 使用Raspberry Squid按钮 199
9.12 利用两个电阻器将5V信号转换为3.3V 200
9.13 利用电平转换模块将5V信号转换为3.3V 201
9.14 利用电池为树莓派供电 202
9.15 利用锂电池为树莓派供电 203
9.16 Sense HAT入门指南 204
9.17 Explorer HAT Pro入门指南 205
9.18 RasPiRobot Board入门指南 207
9.19 使用Pi Plate原型板 208
9.20 制作树莓派扩展板 211
9.21 树莓派Zero与W型树莓派Zero 213
第10章 控制硬件 215
10.0 引言 215
10.1 连接LED 215
10.2 让GPIO引脚进入安全状态 218
10.3 控制LED的亮度 218
10.4 利用晶体管开关大功率直流设备 220
10.5 使用继电器控制大功率设备的开关 222
10.6 控制高压交流设备 224
10.7 用Android手机和蓝牙控制硬件 225
10.8 编写用于控制开关的用户界面 228
10.9 编写控制LED和电机的PWM功率的用户界面 229
10.10 改变RGB LED的颜色 230
10.11 将模拟仪表用作显示器 232
第11章 电机 235
11.0 引言 235
11.1 控制伺服电机 235
11.2 精确控制伺服电机 239
11.3 精确控制多台伺服电机 241
11.4 控制直流电机的速度 243
11.5 控制直流电机的方向 244
11.6 使用单极步进电机 247
11.7 使用双极步进电机 251
11.8 利用步进电机HAT驱动双极步进电机 252
11.9 使用RasPiRobot Board驱动双极步进电机 253
11.10 打造一款简单的机器人小车 255
第12章 数字输入 258
12.0 引言 258
12.1 连接按钮开关 258
12.2 通过按钮开关切换开关状态 261
12.3 使用双位拨动开关或滑动开关 262
12.4 使用三位拨动开关 263
12.5 按钮去抖 265
12.6 使用外部上拉电阻器 267
12.7 使用旋转(正交)编码器 268
12.8 使用数字键盘 271
12.9 检测移动 273
12.10 为树莓派添加GPS模块 275
12.11 拦截按键 278
12.12 拦截鼠标移动 279
12.13 使用实时时钟模块 280
12.14 为树莓派提供重启按钮 283
第13章 传感器 286
13.0 引言 286
13.1 使用电阻式传感器 286
13.2 测量亮度 289
13.3 利用热敏电阻器测量温度 290
13.4 检测甲烷 292
13.5 测量二氧化碳浓度 294
13.6 测量电压 296
13.7 为测量而降低电压 298
13.8 使用电阻式传感器与ADC 300
13.9 使用ADC测量温度 301
13.10 测量树莓派的CPU温度 303
13.11 利用Sense HAT测量温度、湿度和气压 304
13.12 利用数字传感器测量温度 306
13.13 利用MMA8452Q模块测量加速度 308
13.14 使用Sense HAT检测磁北 312
13.15 使用Sense HAT的惯性管理单元 313
13.16 利用簧片开关检测磁场 314
13.17 利用Sense HAT感应磁场 315
13.18 测量距离 316
13.19 使用飞行时间传感器测量距离 318
13.20 电容式触摸传感技术 320
13.21 用RFID读写器读取智能卡 322
13.22 显示传感器的值 325
13.23 利用USB闪存驱动器记录日志 326
第14章 显示设备 328
14.0 引言 328
14.1 使用四位LED显示设备 328
14.2 在I2C LED矩阵上面显示消息 330
14.3 使用Sense HAT LED矩阵显示器 332
14.4 在Alphanumeric LCD HAT上显示消息 333
14.5 使用OLED图形显示器 335
14.6 使用可寻址的RGB LED灯条 337
14.7 使用Pimoroni Unicorn HAT 340
14.8 使用ePaper显示屏 341
第15章 音频设备 343
15.0 引言 343
15.1 连接一个扬声器 343
15.2 控制声音的输出位置 345
15.3 通过命令行播放声音 346
15.4 通过Python程序播放声音 346
15.5 使用USB麦克风 347
15.6 播放蜂鸣声 349
第16章 物联网 352
16.0 引言 352
16.1 使用Web接口控制GPIO输出 352
16.2 在网页上显示传感器读数 356
16.3 Node-RED入门 358
16.4 使用IFTTT发送电子邮件及其他通知 361
16.5 利用ThingSpeak发送推文 364
16.6 CheerLights 366
16.7 向ThingSpeak发送传感器数据 368
16.8 使用Dweet和IFTTT响应推文 370
第17章 家庭自动化 373
17.0 引言 373
17.1 通过Mosquitto将树莓派打造成MQTT代理 373
17.2 组合使用Node-RED与MQTT服务器 376
17.3 刷写Sonoff Wi-Fi智能开关,使其适用于MQTT 380
17.4 配置Sonoff Wi-Fi智能开关 385
17.5 通过MQTT使用Sonoff网络开关 387
17.6 利用Node-RED制作Sonoff闪烁开关 389
17.7 Node-RED Dashboard扩展 391
17.8 基于Node-RED的预定事件 394
17.9 通过Wemos D1发布MQTT消息 395
17.10 在Node-RED中使用Wemos D1 398
第18章 Arduino与树莓派 400
18.0 引言 400
18.1 通过树莓派对Arduino进行编程 401
18.2 利用Serial Monitor与Arduino进行通信 402
18.3 配置PyFirmata以便通过树莓派来控制Arduino 404
18.4 通过树莓派对Arduino的数字输出进行写操作 406
18.5 使用PyFirmata与TTL串口 407
18.6 使用PyFirmata读取Arduino的数字输入 409
18.7 利用PyFirmata读取Arduino的模拟输入 411
18.8 模拟输出(PWM)与PyFirmata 412
18.9 利用PyFirmata控制伺服电机 414
18.10 在树莓派上使用小型Arduino 415
18.11 使用支持Wi-Fi的小型Arduino兼容系统(ESP8266) 416
附录A 配件与供应商 419
附录B 树莓派引脚 426