图灵程序设计丛书 Arduino技术指南
作者:[美] 约翰 休斯(John M.Hughes) 著 武传海 译
出版时间: 2017年版
丛编项: 图灵程序设计丛书
内容简介
本书主要讲解了Arduino开发板的物理特性与接口功能,Arduino使用的各种AVR微控制器,Arduino特有的编程环境,各种扩展板,可与Arduino一起工作的传感器、继电器模块、小键盘以及其他附加组件,从零开始创建自定义扩展板的步骤,介绍各种分析设计问题、定义实体与可测试需求的方法,确保开发成功。
目录
目录
前言
第 1 章 Arduino 家族 1
1.1 Arduino 简史.1
1.2 Arduino 设备类型.2
1.3 Arduino 实物展示.3
1.4 Arduino 兼容设备.6
1.4.1 硬件兼容设备 6
1.4.2 软件兼容设备 7
1.5 Arduino 命名约定.8
1.6 使用Arduino 可以实现的目的9
1.7 更多信息 .11
第 2 章 AVR 微控制器 .12
2.1 背景.12
2.2 内部架构 .13
2.3 内部存储器 .16
2.4 外围功能 .16
2.4.1 控制寄存器 16
2.4.2 数字I O 端口 .17
2.4.3 8 位定时器 计数器 18
2.4.4 16 位定时器 计数器 19
2.4.5 定时器 计数器预分频器 .19
2.5 模拟比较器 .19
2.6 模数转换器 .20
2.7 串行I O.21
2.7.1 USART 22
2.7.2 SPI .22
2.7.3 TWI .23
2.8 中断 24
2.9 看门狗定时器 .26
2.10 电气特性 .26
2.11 更多信息 .27
第3 章 Arduino 专用AVR 微控制器 .28
3.1 ATmega168 328 29
3.1.1 内存 29
3.1.2 特性 29
3.1.3 封装 30
3.1.4 端口 31
3.1.5 引脚电路 31
3.1.6 模拟比较器输入 31
3.1.7 模拟输入 32
3.1.8 串行接口 32
3.1.9 定时器 时钟I O .33
3.1.10 外部中断 33
3.1.11 Arduino 引脚分配 34
3.1.12 基本电气特性 35
3.2 ATmega1280 ATmega2560 35
3.2.1 内存 35
3.2.2 特性 37
3.2.3 封装 37
3.2.4 端口 37
3.2.5 引脚功能 38
3.2.6 模拟比较器输入 38
3.2.7 模拟输入 39
3.2.8 串行接口 39
3.2.9 定时器 时钟I O .40
3.2.10 外部中断 41
3.2.11 Arduino 引脚分配 41
3.2.12 电气特性 44
3.3 ATmega32U4 44
3.3.1 内存 44
3.3.2 特性 45
3.3.3 封装 46
3.3.4 端口 46
3.3.5 引脚功能 47
3.3.6 模拟比较器输入 47
3.3.7 模拟输入 47
3.3.8 串行接口 48
3.3.9 定时器 时钟I O .49
3.3.10 外部中断 50
3.3.11 USB2.0 接口 .51
3.3.12 电气特性 52
3.3.13 Arduino 引脚分配 52
3.4 熔丝位 .53
3.5 更多信息 .55
第4 章 Arduino 技术细节 .56
4.1 Arduino 特性与功能.56
4.2 Arduino USB 接口 57
4.3 Arduino 物理大小.59
4.3.1 全尺寸基本Arduino PCB 类型.60
4.3.2 Mega 类型的Arduino PCB .61
4.3.3 小型Arduino PCB62
4.3.4 特殊用途PCB 类型 .65
4.4 Arduino 引脚布局.66
4.4.1 Arduino 基线引脚布局 66
4.4.2 扩展基线引脚布局 67
4.4.3 Mega 引脚布局 72
4.4.4 非标准布局 74
4.5 更多信息 78
第5 章 对Arduino 与AVR 微控制器编程 .79
5.1 微控制器交叉编译 .80
5.2 BootLoader 81
5.3 Arduino IDE 环境 .83
5.3.1 安装Arduino IDE 84
5.3.2 配置Arduino IDE 85
5.4 使用Arduino IDE 进行交叉编译 86
5.4.1 Arduino 可执行映像 89
5.4.2 Arduino 软件创建过程 89
5.4.3 程序标签卡 90
5.4.4 Arduino 软件架构 91
5.4.5 运行时支持:main() 函数 92
5.4.6 程序示例 94
5.4.7 常量 97
5.4.8 全局变量 97
5.5 库 .98
5.5.1 在Arduino 程序中使用库 .98
5.5.2 将库添加到Arduino IDE 101
5.5.3 创建自定义库 103
5.6 Arduino 源代码.103
第6 章 不使用Arduino IDE 编程 .105
6.1 IDE 替换方案 .105
6.1.1 PlatformIO 105
6.1.2 Ino .107
6.2 AVR 工具链 .108
6.2.1 安装工具链 111
6.2.2 make 112
6.2.3 avr-gcc.113
6.2.4 binutils 113
6.2.5 avr-libc 116
6.3 从零开始构建C 或C++ 程序 .118
6.3.1 使用avr-gcc 或avr-g++ 进行编译 118
6.3.2 多个源文件与make 程序 118
6.4 AVR 汇编语言 .120
6.4.1 AVR 编程模型 .121
6.4.2 创建AVR 汇编语言程序 123
6.4.3 AVR 汇编语言资源 .125
6.5 上传AVR 可执行代码 126
6.5.1 系统内编程 126
6.5.2 使用Bootloader 编程 .127
6.5.3 不使用Bootloader 上传 .127
6.5.4 JTAG .129
6.5.5 AVRDUDE .129
6.5.6 将Arduino 用作ISP 131
6.5.7 Bootloader 运作 131
6.5.8 更换Bootloader 133
6.6 小结 .133
第7 章 Arduino 库 .134
7.1 库组件 .134
7.1.1 EEPROM 136
7.1.2 Ethernet .138
7.1.3 Firmata 144
7.1.4 GSM 148
7.1.5 LiquidCrystal 157
7.1.6 SD .160
7.1.7 Servo .163
7.1.8 SPI .164
7.1.9 SoftwareSerial .165
7.1.10 Stepper 167
7.1.11 TFT .167
7.1.12 Wi-Fi .170
7.1.13 Wi-Fi 类 172
7.1.14 IPAddress 类 172
7.1.15 Server 类 172
7.1.16 Client 类 173
7.1.17 UDP 类 173
7.1.18 Wire .174
7.1.19 Esplora .176
7.2 第三方库 .179
第8 章 扩展板 182
8.1 扩展板的电气特性 .183
8.2 扩展板的物理特性 .184
8.3 堆叠扩展板 .186
8.4 常用Arduino 扩展板186
8.4.1 输入 输出 .187
8.4.2 I O 扩展板 187
8.4.3 I O 拓展板 191
8.4.4 继电器扩展板 194
8.4.5 信号路由扩展板 196
8.4.6 存储器 199
8.4.7 通信 201
8.4.8 串行I O 与MIDI .201
8.4.9 Ethernet .202
8.4.10 蓝牙 204
8.4.11 USB .205
8.4.12 ZigBee .207
8.4.13 CAN 208
8.4.14 原型 211
8.4.15 制作自定义原型扩展板 213
8.4.16 运动控制 214
8.4.17 DC 与步进电机控制 214
8.4.18 PWM 与舵机控制 216
8.4.19 显示器 217
8.4.20 仪表扩展板 223
8.4.21 适配器扩展板 225
8.4.22 混杂扩展板 226
8.5 非常见Arduino 扩展板230
8.6 资源 231
第9 章 模块与I O 组件 .233
9.1 模块234
9.1.1 物理外形 235
9.1.2 接口 235
9.1.3 模块来源 238
9.1.4 模块说明 238
9.2 Grove 模块 260
9.3 传感器与模块介绍 .261
9.4 传感器 .262
9.4.1 温度、湿度、压力传感器 263
9.4.2 倾斜传感器 267
9.4.3 声音传感器 268
9.4.4 光线传感器 269
9.4.5 磁场传感器 272
9.4.6 振动与敲击传感器 273
9.4.7 运动传感器 274
9.4.8 接触与位置传感器 275
9.4.9 距离传感器 278
9.5 通信 279
9.5.1 APC220 无线模块 279
9.5.2 315 433 MHz RF 模块 .280
9.5.3 ESP8266 收发器.280
9.6 输出设备与元件 .281
9.6.1 光源 281
9.6.2 继电器、电机与舵机 285
9.6.3 模拟信号输出 287
9.7 用户输入 .288
9.7.1 键盘 288
9.7.2 摇杆 289
9.7.3 电位器与旋转编码器 289
9.8 用户输出 .289
9.8.1 文本显示器 290
9.8.2 图形显示器 291
9.9 支持功能 .291
9.9.1 时钟 292
9.9.2 定时器 293
9.10 连接 294
9.10.1 使用裸露跳线 294
9.10.2 模块连接系统 294
9.10.3 自己动手制作连接器 295
9.10.4 选择连接方法 297
9.11 供应商资源 .297
9.12 小结 .297
第 10 章 自己动手制作元件 .299
10.1 准备工作 .301
10.2 制作扩展板 .305
10.2.1 物理考虑 .306
10.2.2 堆叠扩展板 .307
10.2.3 电气考虑 .308
10.3 制作GreenShield 扩展板 .309
10.3.1 目标 .309
10.3.2 定义与规划 .309
10.3.3 设计 .310
10.3.4 制作原型 .316
10.3.5 **终软件 .322
10.3.6 装配 .328
10.3.7 **终验收测试 .332
10.3.8 运行 .333
10.3.9 后续步骤 .334
10.4 制作与Arduino 兼容的PCB .334
10.5 Switchinator 335
10.5.1 定义与规划 .335
10.5.2 设计 .336
10.5.3 原型 .347
10.5.4 软件 .350
10.5.5 制造 .353
10.5.6 验收检测 .356
10.5.7 后续步骤 .356
10.6 资源 .356
第 11 章 项目:可编程信号发生器 358
11.1 项目目标 .360
11.2 定义与规划 .360
11.3 设计 362
11.3.1 功能 .362
11.3.2 外壳 .363
11.3.3 电路图 .364
11.4 搭建原型 .366
11.4.1 控制输入与模式 .367
11.4.2 显示输出 .368
11.4.3 DDS 模块 369
11.5 软件 .370
11.5.1 源代码组织 .371
11.5.2 软件描述 .372
11.5.3 DDS 库 378
11.5.4 测试 .379
11.6 **终组装 .382
11.6.1 上拉电阻阵列 .382
11.6.2 输入保护 .383
11.6.3 机箱外壳 .384
11.6.4 DC 电源.386
11.7 **终测试与结束 .386
11.8 削减开支 .387
11.9 成本明细 .388
11.10 资源 .389
第 12 章 项目:智能调温器 .390
12.1 背景 390
12.1.1 HVAC 概述 .391
12.1.2 温度控制基础 .392
12.1.3 智能温度控制 .394
12.2 项目目标 .395
12.3 定义与规划 .395
12.4 设计 .396
12.4.1 功能 .396
12.4.2 外壳 .397
12.4.3 电路图 .399
12.4.4 软件 .399
12.4.5 用户输入 输出 402
12.4.6 控制输出 .406
12.5 原型 406
12.5.1 DHT22 传感器 407
12.5.2 旋转编码器 .408
12.5.3 实时时钟模块 .409
12.5.4 LCD 扩展板 410
12.6 软件 .410
12.6.1 源代码组织 .410
12.6.2 软件描述 .410
12.6.3 测试 .413
12.7 **终版本 .413
12.7.1 组装 .414
12.7.2 测试与运行 .416
12.8 成本明细 .417
12.9 后续步骤 .417
12.10 资源 .418
第 13 章 模型火箭发射器:设计研究 419
13.1 概览 419
13.2 设计周期 .420
13.3 目标 421
13.4 选择与定义功能需求 .423
13.5 进行初步设计 .426
13.5.1 设计可行性 .429
13.5.2 初始元件列表 .432
13.6 原型 432
13.7 **终设计 .433
13.7.1 电气特征 .433
13.7.2 物理外形 .438
13.7.3 软件 .440
13.7.4 测试与运行 .442
13.8 成本分析 .443
附录A 工具与配件 444
附录B AVR ATmega 控制寄存器 455
附录C Arduino 与兼容产品厂商 477
附录D 推荐阅读 482
附录E Arduino 与AVR 软件开发工具 .484
关于作者.487
关于封面 487