申赞伟, 殳国华, 张士文, 张 峰, 刘彦博
(上海交通大学电子信息与电气工程学院,上海 200240)
物联网是在互联网的基础上,将连接扩展和延伸到任何物体之间,并实现信息交换的互连网络[1]。近年来日新月异的物联网技术深刻地改变了人们的生产、生活方式[2]。随着大带宽、低时延的第5代移动通信技术的逐步普及商用,“万物互联”的物联网愿景将加速实现[3]。为培养与蓬勃发展的物联网产业相适应的工程技术人才,很多高校都开设了相关的物联网实验课程[4]。目前这些实验课程的实施大致分为以下几种类型:基于简单的传感器物联网实验,如火灾报警、光控和声控电路实验等[5-6],这类物联网实验较为简单,没有体现完整的物联网架构,不利于学生理解掌握物联网理论知识;基于封装实验箱的物联网实验[7],此类物联网实验装置隐藏了底层原理,不利于学生理解原理知识,且难以扩展更新;有的高校采用大型物联网实训平台开展物联网实验[8-9],虽然功能齐全,但是价格昂贵,且占地面积大,不便于安装维护。
利用低成本器件设计浏览器-服务器模式的耦合度低、功能丰富、架构完整的智能家居物联网系统实验。利用常见传感器采集家居环境数据,低成本32 bit系列微控制器(SGS-THOMSON Microelectronics 32 bit Microcontroller Unit,STM32)单片机开发板搭建Web服务器并同时充当网关,使用发光二极管(Light-Emitting Diode,LED)模拟用电器,同时构建超文本标记语言(HyperText Markup Language,HTML)用户页面,实现客户端监视环境数据并发送指令以控制家居系统。
系统架构如图1所示,实验方案涵盖了感知层、网络层和应用层等完整的物联网体系结构。方案采用客户端-服务器模型,其中客户端为Web浏览器,服务器为基于STM32搭建的Web服务器,两者通过以太网方式进行通信。之所以采用Web浏览器-Web服务器架构,是因为大部分用户对于万维网较为熟悉,且网页制作在不同的计算机平台上的标准比较规范[10],同时万维网覆盖范围广,Web浏览器-Web服务器架构易于扩展。
图1 智能家居物联网系统架构图
在本系统,用户通过Web浏览器向服务器请求交互页面,该页面为存储在Web服务器中的HTML文件,用户通过交互页面控制家居系统,且页面可显示家居环境数据。在感知层,主要是监测家居环境的传感器,如温度传感器、湿度传感器和细颗粒物(Fine Particulate Matter,PM2.5)传感器,以及日常家用电器设备。
(1)服务器。轻量级网际互联协议(Light weight Internet Protocol,LwIP)是一个小型开源的传输控制协议/网际互联协议(Transmission Control Protocol/Internet Protocol,TCP/IP)[11]。LwIP是轻量级IP协议,在保持TCP协议主要功能的基础上仅需要15KB左右的随机存取存储器(Random Access Memory,RAM)和40KB左右的只读存储器(Read-Only Memory,ROM)等硬件资源[12],这使得LwIP协议栈适合在低端的嵌入式设备中使用。LwIP支持地址解析协议、网际协议版本4(Internet Protocol version 4,IPv4)和Internet控制报文协议,且它实现了IP数据报分片重组、拥塞控制、数据重传等功能。本实验方案就是将LwIP移植到STM32单片机上,以支持以太网通信,并在此基础上搭建Web服务器。Web服务器的核心作用就是接收客户端用户指令并控制电器的工作状态,还可以获取传感器的测量值并传输至网络层,进而可以被客户端获取,所以STM32单片机也充当了网关的角色。如图2所示,服务器主要包含:STM32主芯片(STM32F407ZGT6)、以太网(ENC28J60)、液晶显示器(Liquid Crystal Display,LCD)、温湿度传感器、PM2.5传感器、实时时钟、定时器和用电器等模块。
图2 服务器结构图
温度传感器、湿度传感器及PM2.5传感器测量得到温、湿度值、PM2.5值后,将数据发送给服务器。服务器得到传感器数据后,通过服务器端嵌入技术将数据插入网页[13]。当浏览器对服务器发起请求时,服务器就将网页发送至浏览器,通过浏览器解析显示数据,用户就可在客户端的浏览器上实时监视环境温度、湿度值及PM2.5值。
当服务器接收到客户端的定时开启请求时,服务器首先获取客户端所发送的开启指令和定时时间,利用STM32的实时时钟模块实现对用电器的定时开启。实时时钟模块拥有一个连续计数的计数器,在相应的软件配置下,可以提供时钟日历的功能。该模块还提供了闹钟中断功能[14],设置闹钟中断允许位,将用户提交的定时开启时间值存储至闹钟寄存器,当系统时间与定时时间匹配时,可以产生闹钟中断。在闹钟中断程序中,点亮LED,即执行打开用电器的指令。
本方案采取脉宽调制(Pulse Width Modulation,PWM)技术进行功率调节。PWM利用微处理器的输出来调节脉冲信号的占空比[15]。服务器根据用户指令相应地改变捕获/比较寄存器值,通过改变输出脉冲的占空比,实现调节LED的亮度,即改变电器相关模块的工作电压。
(2)通信网络。本方案采用家庭路由器搭建以太网。Web服务器和客户端个人电脑(Personal Computer,PC)分别接入家庭路由器的两个局域网(Local Area Network,LAN)口,服务器和客户端的IP地址均由路由器的动态IP配置功能分配得到。图3(a)为客户端所获取的IP地址示意图,可见,PC的IP地址为192.168.1.105,子网掩码为255.255.255.0。图3(b)为服务器IP地址示意图,Web服务器初始化成功以后,STM32单片机的LCD显示其获得的IP地址为192.168.1.101。所以客户端与服务器位于同一个子网中,无须路由器进行IP数据报转发,两者即可通信。基于家用路由器搭建以太网,以以太网作为设备连接的基本形式,便于网络的进一步扩展,且可使学生更形象直观地理解计算机网络理论知识。
图3 路由器动态IP地址配置示意图
(3)客户端。如图4所示为客户端页面。为使用户页面更加优雅和形象,采用了jQuery用户界面(jQuery User Interface,jQuery UI)库文件和层叠样式表(Cascading Style Sheets,CSS)技术[16]。页面实现了空调、加湿器和电灯的控制界面,包含了用电器开启按钮、开启时间文本框、调节电器相关模块工作电压的滑块和LED亮度视觉反馈的矩形区域。用户可在文本框中输入开启时间并点击开关按钮,实现对用电器的定时开启。用户还可以移动滑块,实现对用电器的相关模块工作电压控制。另外,页面中还可以显示传感器所测量得到的家居环境的温度、湿度及PM2.5值,为用户决策提供依据。
图4 客户端页面
客户端页面的核心是利用JavaScript代码程序侦测HTML页面事件,该事件可以接受用户输入并发送至服务器[17]。以定时开启用电器为例,页面部分关键代码如图5所示,代码中定义了clickSwitch()函数,在这个函数里指定了硬件统一资源定位符(Uniform Resource Locator,URL)地址,并读取表单数据(定时开启指令及时间值),将其打包为JavaScript对象简谱(JavaScript Object Notation,JSON)格式,method属性指定请求方式为超文本传输协议(Hyper Text Transfer Protocol,HTTP)GET请求,并将clickSwitch()函数注册为鼠标点击事件。当用户点击按钮时,clickSwitch()函数会被触发运行,读取用户动作内容,并发送至Web服务器。采用异步JavaScript和XML(Asynchronous JavaScript And XML,AJAX)技术提交用户请求,以实现向服务器发送异步请求,节约网络带宽和服务器资源,这对以STM32单片机作为低成本服务器的智能家居系统,具有重要意义。以控制家用空调(以LED1进行模拟)为例,在页面的“开启时间”文本框里输入“17”“36”(17:36),点击开启按钮,此时会触发clickSwitch()函数,将“17”“36”时间值和开关指示“1”(代表要开启电器)3个参数通过HTTP 1.1协议向Web服务器提交GET请求,假设服务器IP地址为192.168.1.101,则请求链接格式为http://192.168.1.101/led1?switch=1&hour=17&minute=36,学生可以通过浏览器调试工具直观、形象地观察到该用户请求链接。当用户移动滑块进行功率调节时,程序读取滑块所指示的PWM值,同时触发clickSwitch()函数执行,函数将PWM值以GET请求方式提交至服务器,假如PWM值为240,则请求链接格式为http://192.168.1.101/led1?PWM=240。
图5 客户端页面关键代码
基于教学成本和场地考虑,方案采用红色LED模拟空调,绿色LED模拟加湿器,蓝色LED模拟电灯,LED的亮灭和亮度变化可以很好地模拟用电器的开关和相关模块的工作电压调节场景。同时,使用PC、家用路由器、STM32单片机、DHT11湿度传感器、DS18B20温度传感器、GP2Y1014AU PM2.5传感器等器件搭建如图6、7所示的系统装置。客户端PC和单片机服务器通过网线接入路由器LAN口,传感器和LED置于“通用”电路板上,通过杜邦线与单片机输入、输出(Input Output,I/O)口连接。可见,该物联网系统包含了完整感知层、网络层、应用层3层架构,并且架构各层之间实现了松耦合。对系统进行功能测试时,首先用浏览器打开HTML用户页面,在“空调开关”的区域的文本框输入时间(17:36),并开启开关按钮。当系统时间达到所预约的定时时间后,可以观察到,如图7(a)所示,空调成功开启(红色LED点亮)。当用户在浏览器上向右移动滑块,调节空调制冷模块的工作电压,红色LED亮度增加。在服务器端,空调的工作状态还可以由LCD显示。如图7(b)所示,空调(Air Conditioner,AC)的开关状态为“On”,Power(制冷功率)状态为“High”。LCD也正确显示了当前环境的温度、湿度和PM2.5值,表明传感器也都处于正常工作状态。温度、湿度和PM2.5值等数据还可以传输至客户端,由浏览器解析并显示,实现客户端监视。
图6 智能家居物联网系统装置图
图7 智能家居物联网系统感知层设备及状态显示
本实验构造了涵盖感知层、网络层和应用层等完整架构的物联网系统,学生不仅锻炼了传感电路设计、控制电路设计等基本的电工电子技能素养,并且基于计算机网络原理和前后端开发技术搭建起完整的客户端-服务器架构,形成了专业理论的有效衔接,实现了多学科背景知识的融会贯通。同时,通过编写简单的前后端代码、调试观察浏览器请求信息,可深刻理解物联网的应用层与感知层的信息传输过程,触摸物联网技术本质。
本实验功能需求丰富多样,采取了层次递进、灵活要求的设计方式,以实现因才施教、区分教学。设定了多层次任务目标供学生灵活选择。
基本任务:使用传感器实现对环境指标数据的采集,搭建用电器控制电路。
进阶任务:搭建完整的Web浏览器-Web服务器模型,并且编写HTML用户页面,以实现客户端控制和监视家居系统。
本实验是一个融合较多学科背景的综合实践,涉及知识面较广,教学实施过程中注重详略得当,着重加强对学生的启发引导,培养学生自主学习知识、自主解决问题的能力。比如实验中所涉及必需但非核心知识点,比如前端设计中的HTTP协议、URL、HTML、CSS、jQueryUI库等知识,教师会向学生推荐相关的参考书籍、网课等,鼓励学生自主学习;对于路由器的设置、LwIP协议移植等操作方法,向学生提供技术手册或者开源网址供学生查阅参考,以锻炼学生自主实践动手能力。
本物联网系统实现了架构各层之间的松耦合,安装有支持HTML标准的浏览器的个人电脑、平板电脑或手机均可以作为客户端,服务器为STM32单片机,通过家用路由器或小型交换机就可以搭建以太网。有效降低了系统的搭建、测试、联调的场地和设备要求,便于装置的灵活部署,学生在实验室、自习室甚至宿舍均可以进行实验探究与操作。松耦合性还有助于学生充分发挥主观能动性,通过发散思维,实现系统功能的进一步扩展。例如,学生尝试将以太网通信方式改为Wifi无线通信方式时,仅需要在“通用”板上添加一个ESP8266模块,并与STM32串口相连,再通过发送AT指令与路由器实现连接即可。本实验所需要的器件成本较低、易于获取,有利于推广教学。
本实验以日常家居场景为切入点构建物联网系统,实现了客户端监视家居温度、湿度、PM2.5值和定时开启用电器并调节相关模块的工作电压,其功能需求贴近生活实际,可以很好地激发学生的动手兴趣。由于学生对该情景比较熟悉,所以更利于学生迸发创新思维、实现功能拓展。
本文以智能家居为背景,设计了涵盖感知层、网络层和应用层的物联网系统实验,学科背景知识综合度高、覆盖知识面广,有助于学生专业知识的融会贯通,深刻理解掌握物联网理论知识;采用层次递进的教学方式,注重培养学生自主学习、自主实践的能力;实验系统各部分耦合性弱,有利于实验的灵活扩展,各部分所采用的分立器件成本较低,利于实验的推广教学;实验场景贴近生活实际,可以很好激发学生动手兴趣。