第1章 物联网与网络协议 1
1.1 本章主要内容 1
1.2 物联网与IP 2
1.2.1 IPv4 2
1.2.2 IPv6 2
1.2.3 6LoWPAN 3
1.3 物联网与HTTP 6
1.3.1 HTTP 6
1.3.2 REST风格 6
1.4 物联网与CoAP 7
1.4.1 CoAP 8
1.4.2 RFC文档汇总 8
1.5 物联网与MQTT协议 10
1.5.1 MQTT协议 10
1.5.2 MQTT主题 10
1.5.3 MQTT服务质量 11
1.6 本章小结 12
第2章 物联网与开源硬件 13
2.1 本章主要内容 13
2.2 Arduino 13
2.2.1 Arduino简介 13
2.2.2 常用Arduino型号 14
2.2.3 Arduino扩展接口 15
2.3 树莓派 16
2.3.1 树莓派简介 16
2.3.2 常用树莓派型号 16
2.3.3 树莓派扩展接口 19
2.4 本章小结 20
第3章 网络技术回顾 22
3.1 本章主要内容 22
3.2 IP 23
3.2.1 动手尝试 23
3.2.2 IPv4首部 26
3.2.3 IPv4地址 27
3.2.4 IPv6首部 28
3.2.5 IPv6地址 30
3.3 UDP 31
3.3.1 动手尝试 31
3.3.2 UDP首部 35
3.3.3 UDP示例分析 35
3.4 TCP 37
3.4.1 动手尝试 37
3.4.2 TCP首部 41
3.4.3 TCP示例分析 42
3.4.4 UDP与TCP对比 43
3.5 HTTP 44
3.5.1 动手尝试 44
3.5.2 HTTP工作模式 50
3.5.3 HTTP首部 51
3.5.4 HTTP请求方法 53
3.5.5 HTTP状态码 53
3.5.6 HTTP首部字段 54
3.5.7 HTTP的优势与问题 54
3.6 本章小结 56
第4章 CoAP快速入门 57
4.1 本章主要内容 57
4.2 Copper插件入门 58
4.2.1 Copper插件安装 58
4.2.2 Copper插件入门示例 59
4.3 Arduino CoAP服务器实现 61
4.3.1 获取示例 61
4.3.2 示例说明 62
4.3.3 动手测试 67
4.3.4 着手分析 70
4.4 本章小结 73
第5章 CoAP核心 74
5.1 本章主要内容 74
5.2 CoAP首部 74
5.2.1 版本编号Ver 75
5.2.2 报文类型T 75
5.2.3 标签长度指示TKL 75
5.2.4 准则Code 76
5.2.5 报文序号Message ID 77
5.2.6 标签Token 77
5.2.7 选项Options 77
5.2.8 分隔符0xFF 78
5.2.9 负载Payload 78
5.3 CoAP工作模式 78
5.3.1 逻辑分层结构 79
5.3.2 报文类型 79
5.3.3 请求/响应模式 81
5.4 CoAP重传机制 83
5.4.1 CoAP重传情况分析 83
5.4.2 传输参数说明 84
5.4.3 最大传输耗时(MAX_TRANSMIT_SPAN) 85
5.4.4 最大等待时间(MAX_TRANSMIT_WAIT) 86
5.5 CoAP方法 87
5.5.1 GET 87
5.5.2 POST 87
5.5.3 PUT 87
5.5.4 DELETE 87
5.6 CoAP响应码 87
5.6.1 正确响应 88
5.6.2 客户端错误 88
5.6.3 服务器错误 89
5.7 CoAP选项 90
5.7.1 选项格式 90
5.7.2 URI相关选项 91
5.7.3 Content-Format选项 92
5.7.4 Accept选项 92
5.7.5 Etag选项 92
5.7.6 If-Match选项 94
5.7.7 If-None-Match选项 96
5.7.8 选项示例 97
5.8 CoAP媒体类型 99
5.8.1 link-format类型 100
5.8.2 文本与二进制类型 100
5.8.3 JSON类型 101
5.9 本章小结 102
第6章 CoAP扩展 103
6.1 本章主要内容 103
6.2 CoAP资源描述 103
6.2.1 CoAP资源描述原理 103
6.2.2 CoAP资源描述详解 105
6.3 CoAP观察者模式 106
6.3.1 观察者模式原理 106
6.3.2 CoAP观察选项 107
6.3.3 观察者模式示例 108
6.4 本章小结 110
第7章 CoAP软件实现 111
7.1 本章主要内容 111
7.2 libcoap 112
7.2.1 libcoap安装 112
7.2.2 libcoap使用详解 114
7.2.3 libcoap入门示例 117
7.3 aiocoap 119
7.3.1 aiocoap安装 120
7.3.2 aiocoap入门示例 120
7.3.3 aiocoap块传输示例 124
7.3.4 aiocoap树莓派GPIO示例 126
7.4 node-coap 129
7.4.1 Node.js安装 130
7.4.2 node-coap入门示例 132
7.4.3 node-coap媒体类型示例 135
7.5 Californium 137
7.5.1 准备工作 137
7.5.2 Californium入门示例 140
7.6 本章小结 149
第8章 CoAP调试工具 150
8.1 本章主要内容 150
8.2 Copper调试工具 150
8.2.1 Copper地址栏 151
8.2.2 Copper工具栏 152
8.2.3 Copper响应首部 153
8.2.4 Copper负载内容 154
8.2.5 Copper请求选项 154
8.2.6 Copper使用示例 155
8.3 Wireshark 163
8.3.1 Wireshark安装 164
8.3.2 Wireshark使用 164
8.3.3 Wireshark示例 166
8.4 本章小结 169
第9章 微型物联网系统——服务器部分 171
9.1 本章主要内容 171
9.2 假想需求 171
9.3 原型设计 172
9.3.1 系统结构说明 172
9.3.2 系统流程设计 173
9.3.3 网页原型设计 174
9.4 详细设计 174
9.4.1 技术选型说明 175
9.4.2 数据库设计 176
9.4.3 CoAP API设计 176
9.4.4 HTTP API设计 177
9.5 具体实现 179
9.5.1 数据库实现 180
9.5.2 CoAP路由实现 183
9.5.3 Web前端实现 190
9.5.4 Web后端实现 195
9.6 综合测试 199
9.6.1 启动微型物联网系统 199
9.6.2 增加模拟数据 200
9.6.3 访问默认设备 200
9.6.4 使用分页功能 200
9.6.5 访问其他设备 201
9.7 本章小结 202
第10章 微型物联网系统——设备部分 203
10.1 本章主要内容 203
10.2 设备与网络结构说明 203
10.2.1 设备说明 203
10.2.2 网络结构说明 205
10.3 Contiki入门 206
10.3.1 Contiki初步 207
10.3.2 native入门示例 211
10.3.3 安装交叉工具链 212
10.3.4 SensorTag入门示例 213
10.4 搭建边界路由 218
10.4.1 创建Slip-Radio 218
10.4.2 创建Native-Border-Router 219
10.5 增加NAT64 223
10.5.1 NAT64简介 223
10.5.2 安装Jool 224
10.5.3 UDP NAT64示例 225
10.6 CoAP Client Sensor 231
10.6.1 加入网络并启动任务 232
10.6.2 获取传感器数据 233
10.6.3 传递传感器数据 235
10.7 综合测试 238
10.7.1 启动CoAP服务器 238
10.7.2 启动边界路由和NAT64 239
10.7.3 生成并下载固件 239
10.7.4 查看运行结果 239
10.8 本章小结 242
参考文献 243