
本书遵循由个别到一般,又由一般到个别的哲学原理,研究窄带物联网(NB-IoT)应用开发共性技术,目标是降低开发门槛、节约开发成本、缩短开发时间。 本书从技术科学层面提出了NB-IoT应用架构,形成可复用、可移植的模板、构件和类,成为NB-IoT应用开发的“基石”。NB-IoT应用架构由终端(UE)、信息邮局(MPO)、人机交互系统(HCI)三个部分组成。针对UE,本书提出了通用嵌入式计算机(GEC)的概念,在硬件上把MCU硬件最小系统及面向具体应用的共性电路封装成一个整体,为用户提供芯片级的可重用的硬件实体;在软件上,把嵌入式软件分为BIOS程序与User程序两部分。针对MPO,本书将其抽象为固定IP地址及端口。针对HCI,本书凝练出云平台侦听程序、客户端程序、Web网页程序、微信小程序、手机APP程序等应用模板,为“照葫芦画瓢”地完成具体的NB-IoT应用开发提供共性技术。全书形成了以GEC为核心,以构件为支撑,以应用模板为基础的NB-IoT应用开发生态系统。
窄带物联网(NB-IoT)是3GPP于2016年5月完成核心标准制定的,面向智能抄表、工厂设备远程测控、智能农业、智能家居等应用领域的新一代物联网通信体系,是低功耗广域网LPWAN的重要一员。NB-IoT应用系统将成为许多实体行业的关键技术。然而,进行NB-IoT应用开发具有较高的技术门槛,研发成本高、周期长,是许多终端企业面临的重要难题。为了解决这个难题,学术界需要从技术科学层面、从面向应用角度出发来研究NB-IoT应用产品开发的共性技术,为产业界进行NB-IoT应用开发提供基础支撑。本书着眼于这一目标,研究与NB-IoT应用开发共性技术相对应的抽象模型,为降低NB-IoT应用开发的技术门槛提供技术基础。 本书从技术科学层面出发,提出了NB-IoT应用架构。该架构由终端(UE)、信息邮局(MPO)和人机交互系统(HCI)三个部分组成。UE是形式各异的NB-IoT应用产品,其共性技术研究是本书的重点之一。本书把负责NB-IoT通信的设施抽象为MPO,以便简化应用系统的编程。HCI是通用计算机、笔记本电脑、平板电脑、手机等设备的抽象,具有服务器、网页、微信、短信、手机APP等技术表现形式,其共性技术的抽取以及与UE的通信的共性技术研究,也是本书重点内容之一。 本书以构件为基础、以与具体的微控制器芯片无关性为目标,提出了通用嵌入式计算机(GEC)的概念、基本组成及实现方法,通过分析凝练UE所共有的GPIO、UART、A/D、Flash、SysTick、I2C、SPI、UECom等模块的基本知识要素,给出了遵循嵌入式软件工程基本原则的底层驱动构件封装,并把它们固化驻留在微控制器芯片中,类似于通用计算机的基本输入/输出系统(BIOS)。在此基础上给出了用户(User)程序的应用模板,可以使用户专注于应用程序的开发。本书以类为基础,提出了HCI的应用模板。通过分析NB-IoT通信的共性,以MPO为基础,在充分研究HCI共性技术的基础上,以C#语言为蓝本,遵循类封装的基本原则,设计了PC方的通信接口类HCICom,具有良好的可移植性,实现了HCI应用层程序的可复用性。此外,通过数据库及显示页面的动态设计,实现了在一定条件下物理量增减的程序自适应性。为了比较完整地涵盖NB-IoT应用开发的知识要素,本书还给出了HCI应用的多样性研究,在云平台(云服务器)侦听程序及数据入库的基础上,对客户端程序、网页程序、微信小程序、手机APP等多种不同表现形式给予了关注,也设计了对应的应用模板。 本书给出的NB-IoT应用开发共性技术,最大限度地凝练了NB-IoT应用开发过程的一般规律,形成可复用、可移植的模板、构件和类,成为NB-IoT应用产品开发的“基石”和模板(“葫芦”),以便开发人员在此模板的基础上进行特定的应用开发(“照葫芦画瓢”),体现了人类认识过程由个别到一般,又由一般到个别的哲学原理,可有效降低NB-IoT应用开发的技术门槛、减少研发成本、提高研发效率。 本书由王宜怀负责编制提纲和统稿工作,并编写了第1~3章、第11~12章,张建编写了第4~8章及对应的附录,刘辉编写了第9~10章、第13~14章及对应的附录,刘银龙编写了第15和16章。博士研究生施连敏、彭涛,硕士研究生陈成、汪博、钱涵佳、周靖越、周欣、葛新越、张艺琳、范小青、孙亚军、程宏玉、黄志贤、刘贤德、张蓉、徐昕等协助完成了程序编写、调试及书稿整理等工作。他们卓有成效的工作,使本书更加实用。ARM教育生态部、苏州电信、安芯教育、苏嵌教育等对本书提供了大力支持,电子工业出版社的编辑为本书的出版做了大量细致的工作,在此一并表示诚挚的谢意。 本书虽历时三载,但鉴于作者水平有限,书中难免会存在不足和错误之处,恳望广大读者提出宝贵意见和建议,以便再版时改进。 苏州大学 王宜怀 2019年1月
第1章 概述 1 1.1 窄带物联网NB-IoT简介 2 1.1.1 物联网连接的分类 2 1.1.2 NB-IoT的起源及简明发展历程 3 1.1.3 NB-IoT技术特点及其与其他LPWAN技术比较 4 1.1.4 为什么NB-IoT会流行 6 1.2 降低NB-IoT应用开发技术门槛的基本思路 8 1.2.1 NB-IoT应用开发所面临的难题 8 1.2.2 解决NB-IoT应用开发所面临难题的基本思路 9 1.3 本书主要内容 9 第2章 NB-IoT应用架构的基本要素 13 2.1 建立NB-IoT应用架构的基本原则 13 2.2 UE、MPO与HCI的基本定义 13 2.2.1 NB-IoT终端(UE) 14 2.2.2 NB-IoT信息邮局(MPO) 14 2.2.3 NB-IoT人机交互系统(HCI) 15 2.3 NB-IoT通信过程与应用开发相关的基本概念 15 2.3.1 与终端UE相关的基本概念 15 2.3.2 与信息邮局(MPO)相关的基本概念 17 2.3.3 与人机交互系统(HCI)相关的基本概念 19 2.4 对NB-IoT通信过程的简明理解 20 2.5 本章小结 21 第3章 NB-IoT通信快速测试方法 22 3.1 无须终端(UE)硬件情况下测试NB-IoT通信 22 3.2 初步理解整个通信过程 25 3.3 金葫芦IoT-GEC开发套件基本描述 27 3.3.1 金葫芦IoT-GEC开发套件设计思想 27 3.3.2 金葫芦IoT开发套件硬件组成 28 3.3.3 金葫芦IoT-GEC开发套件的文档与软件模板 29 3.4 利用金葫芦IoT-GEC开发套件理解NB-IoT通信过程 30 3.4.1 金葫芦IoT-GEC开发套件的硬件系统快速测试方法 30 3.4.2 终端(UE)与人机交互系统(HCI)通信快速测试方法 31 3.5 下载与测试终端用户程序 32 3.5.1 用户程序更新软件AHL-UserPrgUpdate 32 3.5.2 下载过程中常见的错误及解决方法 35 3.6 本章小结 37 第4章 理解NB-IoT的通信过程 38 4.1 理解终端用户程序的执行过程 38 4.1.1 开发终端用户程序使用的集成开发环境 38 4.1.2 终端(UE)中BIOS程序主要功能 39 4.1.3 终端(UE)的用户程序工程结构 40 4.1.4 User_GEC_Basic主流程及中断处理程序 42 4.2 初步理解UE与MPO的构件UECom 46 4.2.1 UECom构件的设计要点 46 4.2.2 UECom构件的头文件 47 4.2.3 UECom构件的使用方法 53 4.3 理解用户服务器侦听程序US-Monitor的执行过程 55 4.3.1 US-Monitor工程框架 55 4.3.2 US-Monitor的执行过程 56 4.4 初步理解HCI与MPO的通信接口类HCICom 58 4.4.1 HCICom类的设计要点 58 4.4.2 HCICom类的属性、方法和事件 60 4.4.3 HCICom类的使用方法 62 4.5 理解数据入库过程 63 4.5.1 查看数据库与表的简单方法 63 4.5.2 各数据表的用途 64 4.5.3 操作数据库的基本编程方法 66 4.6 本章小结 67 第5章 基于云转发服务的“照葫芦画瓢”样例 68 5.1 功能需求:增加热敏传感器 68 5.2 “照葫芦画瓢”:终端用户程序的更改 70 5.2.1 终端用户程序“画瓢处”的查找、确认 70 5.2.2 终端用户程序内容修改 71 5.3 “照葫芦画瓢”:US-Monitor的更改 73 5.3.1 US-Monitor程序“画瓢处”的查找、确认 73 5.3.2 US-Monitor程序内容的修改 74 5.4 联合测试及自我练习 76 5.4.1 联合测试 76 5.4.2 自我练习 77 5.5 本章小结 77 第6章 云服务器侦听程序CS-Monitor 78 6.1 云服务器侦听程序CS-Monitor涉及的技术基础 78 6.1.1 云服务器侦听程序CS-Monitor的概念 78 6.1.2 WebSocket协议概述 79 6.1.3 JSON格式 80 6.2 开发CS-Monitor程序的基本条件 80 6.2.1 申请与登录远程云服务器 80 6.2.2 在云服务器CS上安装必要的软件 82 6.3 运行CS-Monitor编程模板 83 6.3.1 确认网络端口是否已对外开放 83 6.3.2 复制CS-Monitor工程与数据库 84 6.3.3 修改AHL.xml文件中有关连接配置 85 6.3.4 修改UE程序的发送地址 85 6.3.5 运行CS-Monitor程序 86 6.4 基本理解CS-Monitor编程模板 88 6.4.1 CS-Monitor编程模板的工程框架 89 6.4.2 CS-Monitor编程模板的自动执行流程 91 6.4.3 WebSocket服务器与客户端的通信 101 6.4.4 CS-Monitor编程模板按键事件的解析 107 6.5 CS-Monitor程序的“照葫芦画瓢” 109 6.6 本章小结 110 第7章 通过PC客户端的数据访问 111 7.1 运行CS-Client及观察自己的NB-IoT终端实时数据 111 7.1.1 直接运行CS-Client编程模板 111 7.1.2 观察NB-IoT终端的实时数据 114 7.2 基本理解CS-Client的编程模板 115 7.2.1 CS-Client编程模板的结构 115 7.2.2 PC客户端模板执行流程 116 7.2.3 主要按键事件的实现 122 7.3 CS-Client程序的“照葫芦画瓢” 125 7.4 本章小结 126 第8章 通过Web网页的数据访问 128 8.1 运行Web网页及观察NB-IoT终端的实时数据 128 8.1.1 打开NB-IoT的Web网页方法 128 8.1.2 观察NB-IoT终端实时数据 129 8.2 基本理解NB-IoT的Web网页模板 130 8.2.1 NB-IoT的Web网页模板的工程结构 130 8.2.2 NB-IoT的Web网页模板功能分析 131 8.2.3 通过Web网页的数据访问过程 132 8.2.4 NB-IoT的Web网页编程的进一步讨论 140 8.3 NB-Web网页的“照葫芦画瓢” 142 8.4 本章小结 144 第9章 通过微信小程序的数据访问 145 9.1 运行已发布的NB-IoT微信小程序 145 9.1.1 直接运行微信小程序模板 145 9.1.2 观察自己的NB-IoT终端实时数据 146 9.2 在开发环境中运行NB-IoT微信小程序 147 9.2.1 前期准备 147 9.2.2 运行NB-IoT微信小程序 148 9.3 基本理解NB-IoT的微信小程序模板 151 9.3.1 NB-IoT的微信小程序模板工程结构 151 9.3.2 NB-IoT的微信小程序模板开发过程 153 9.3.3 NB-IoT的微信小程序的运行分析 156 9.4 NB-IoT微信小程序编程的进一步讨论 158 9.4.1 微信小程序的函数执行流程 158 9.4.2 微信小程序的WebSocket连接 160 9.4.3 数据的处理与使用 162 9.4.4 组件模板 166 9.5 “照葫芦画瓢”:开发自己的NB-IoT微信小程序 167 9.5.1 “照葫芦画瓢”:实现新增温度的添加 168 9.5.2 “照葫芦画瓢”:动态组件的生成 170 9.5.3 “照葫芦画瓢”:添加一个页面功能 170 9.5.4 “照葫芦画瓢”:导航菜单的创建 171 9.6 NB-IoT微信小程序模板的发布 171 9.7 本章小结 172 第10章 通过Android APP的数据访问 173 10.1 查看已发布的NB-IoT的Android APP 173 10.1.1 直接运行Android APP模板 173 10.1.2 观察自己的NB-IoT终端实时数据 174 10.2 在开发环境中运行NB-IoT的Android APP 175 10.2.1 开发环境的安装 175 10.2.2 项目导入并编译运行 175 10.3 基本理解NB-IoT的Android APP模板 177 10.3.1 NB-IoT的Android APP开发环境 177 10.3.2 NB-IoT的Android APP模板工程结构 178 10.3.3 NB-IoT的Android APP模板的执行过程 180 10.4 NB-IoT的Android APP编程的更深入讨论 185 10.4.1 APP函数执行流程 185 10.4.2 WebSocket连接的建立 185 10.4.3 WebSocket数据处理 187 10.5 “照葫芦画瓢”:开发自己的NB-IoT的Android APP 189 10.5.1 “照葫芦画瓢”:实现新增温度的添加 190 10.5.2 “照葫芦画瓢”:动态生成控件 191 10.6 本章小结 193 第11章 通用嵌入式计算机的概念与组成 194 11.1 提出GEC概念的缘由 194 11.1.1 物联网终端开发方式存在的问题与解决办法 194 11.1.2 提出GEC概念的时机、GEC的定义与特点 195 11.1.3 GEC在NB-IoT应用架构中的位置 197 11.2 GEC的硬件实例 198 11.2.1 金葫芦IoT-GEC型号含义 198 11.2.2 金葫芦AHL-A系列硬件组成 199 11.2.3 金葫芦AHL-A系列引脚图 202 11.2.4 金葫芦AHL-A系列引脚功能表 203 11.3 GEC内的BIOS与User程序框架 205 11.3.1 GEC内的BIOS与User程序功能划分 205 11.3.2 User程序软件框架 207 11.3.3 GEC中的三类构件 209 11.4 本章小结 210 第12章 GEC常用基础构件 211 12.1 GPIO构件 211 12.1.1 GPIO构件的知识要素 211 12.1.2 GPIO构件的API 213 12.1.3 GPIO构件API的测试方法 215 12.2 UART构件 221 12.2.1 UART构件的知识要素 221 12.2.2 UART构件的API 223 12.2.3 UART构件API的测试方法 225 12.3 ADC构件 227 12.3.1 ADC构件的知识要素 227 12.3.2 ADC构件的API 229 12.3.3 ADC构件API的测试方法 229 12.4 Flash构件 231 12.4.1 Flash构件的知识要素 231 12.4.2 Flash构件的API 232 12.4.3 Flash构件API的测试方法 234 12.5 I2C构件 235 12.5.1 I2C构件的知识要素 235 12.5.2 I2C构件的API 240 12.5.3 I2C构件API的测试方法 242 12.6 SPI构件 244 12.6.1 SPI构件的知识要素 244 12.6.2 SPI构件的API 247 12.6.3 SPI构件API的测试方法 249 12.7 PWM构件 250 12.7.1 PWM构件的知识要素 251 12.7.2 PWM构件的API 253 12.7.3 PWM构件API的测试方法 254 12.8 本章小结 255 第13章 基于GEC的UE软/硬件设计过程 256 13.1 输入/输出分析 256 13.1.1 输入/输出的共性分析 256 13.1.2 输入/输出的个性分析 257 13.2 快速规范的硬件评估 258 13.2.1 复制User工程框架 258 13.2.2 编程评估各硬件单元 259 13.3 硬件原理图绘制与PCB电路板制作 270 13.3.1 构件化硬件原理图绘制的简明规则 270 13.3.2 PCB布板的简明规则 274 13.4 功能软件的设计与测试 277 13.4.1 功能需求 277 13.4.2 GEC硬件需求 277 13.4.3 软件设计 277 13.4.4 软件测试 280 13.5 本章小结 281 第14章 UECom构件与HCICom类解析 282 14.1 UECom构件的设计与解析 282 14.1.1 UECom构件的基本实现过程 282 14.1.2 UECom构件主要函数的执行流程及代码解析 286 14.1.3 UECom构件的应用流程 294 14.2 HCICom类的设计与解析 295 14.2.1 HCICom类的成员变量 295 14.2.2 理解HCICom类的对外方法 295 14.2.3 HCICom类的应用流程 301 14.3 本章小结 301 第15章 基于GEC的NB-IoT应用产品开发实例 303 15.1 基于NB-IoT的实验室管家 303 15.1.1 LBS的输入/输出分析 303 15.1.2 LBS的硬件评估 305 15.1.3 LBS功能软件设计与测试 310 15.2 基于NB-IoT的多传感器数据采集系统 316 15.2.1 TE传感器输入/输出分析 316 15.2.2 TE传感器的硬件评估 318 15.2.3 TE传感器软件设计与测试 325 15.3 不同系统联合测试及总结 330 15.3.1 实验室管家系统的联合测试 330 15.3.2 多传感器数据采集系统的联合测试 331 15.3.3 软/硬件协同测试共性总结 332 15.4 本章小结 332 第16章 进一步讨论 334 16.1 新增部件基本方法 334 16.1.1 新增部件的构件制作 334 16.1.2 新增部件的测试方法 339 16.2 NB-WSN网关 343 16.2.1 NB-WSN网关的功能 343 16.2.2 NB-WSN网关实例 343 16.2.3 基于NB-WSN网关的NB-IoT应用架构 344 16.3 通信模组与MCU的更换问题 345 16.3.1 通信模组的更换问题 345 16.3.2 MCU的更换问题 345 16.4 安全问题 345 16.4.1 NB-IoT应用产品的安全需求分析 345 16.4.2 基于金葫芦NB-IoT应用架构的加密方法 347 16.5 实时操作系统(RTOS)的融入问题 347 16.5.1 RTOS的基本作用、选择与使用场景 348 16.5.2 RTOS中与任务相关的基本概念 348 16.5.3 RTOS下编程的一般步骤 353 16.6 本章小结 354 附录A 开发语言概要 355 附录B 终端(UE)涉及的文档 397 附录C 人机交互系统(HCI)涉及的文档 416 附录D HTU21D温湿度传感器中文技术手册 459 附录E 术语和缩写 473 参考文献 475