本文会分以下几部分分享自己的观点和心得:
一、视频:介绍作品中各个系统架构和实用功能如何运作,整个视频20分钟;(顺利使用TencentOS tiny 及联网中间件完成腾讯云IoT平台对接的,需要提供图片或视频结果)
二、课题的提出,以及研发本物联网应用项目的意义;(物联网整体业务方案说明)(demo作品创新性)
三、腾讯云如何切入国计民生行业实现商业价值的思考;(物联网整体业务方案说明)
四、拥抱产业物联网,如何把腾讯云的价值赋能传统行业。(demo作品创新性)(物联网整体业务方案说明)
五、搭建该作品的技术分享:系统设计、硬件设计和软件编程;(物联网整体业务方案说明)(demo作品创新性)(TencentOS tiny和IoT Explorer试用感受反馈)
六、根据自己在实际操作云端设置过程和开发板,碰到的软件和硬件问题,提出一些改进的建议。(有效bug反馈)
一、我先演示一下作品成果的视频吧,大约20分钟时长:
https://www.bilibili.com/video/av65534990
二、研发本物联网应用项目的意义:
(一)物联网的前景
互联网已经为我们带来了黄金的20年。这20年里互联网几乎在每个行业都创造了辉煌。而接下来的20年,我们相信,物联网的“万物互联”将更加接地气、各种智能化的物联网设备将遍布世界的每一个角落,创造比互联网更加灿烂的明天!最近华为的鸿蒙操作系统、各种5G/4G/2G物联卡和模块,NB_IoT/LoRaWAN/WIFI/蓝牙/zigbee模块、三大运营商各自推出的物联网设备、物联卡套餐和平台搭建,都在引领着这个时代的潮流。
因此当收到TencentOS tiny和IoT Explorer开放体验的邮件的时候,我立马报名体验,希望能通过这次作品对物联网的应用有更深入的学习和思考,也希望能把自己的一些想法分享出来。
我选的课题是“智能空气质量检测和自来水检测净化系统”,以这2个子系统模拟传统行业设备的运作模式,以及他们的现有系统架构的工作方式进行运转。然后再通过物联网开放平台IoT Explorer和他们对接,提供更多的新特性和功能。最后阐述腾讯云如何拥抱产业互联网,并赋能传统行业,帮他们做出更多的互联网和物联网新性能,实现物联网技术为他们带来的商业价值。
(二)课题的提出
农作物、盐、土壤、食用油、水、空气这些都是和国计民生、和人们的日常生活息息相关的物品和产业。无论在哪方面能得到哪怕一点点的质量提升、产量提高、生产工艺、治理方法的突破,都是造福于民、造福于国家和民族的好事。个人或单位在这些方面如果能取得一些成就,将产生不可估量的经济价值!
而土壤、食用油、水、空气这几类产业,其检测技术、治理技术门槛高,想象空间非常大。比如水和土壤,在大规模工业化之前,到处都是干净清洁的土壤和水源,而现在是大部分土壤、几乎所有河流都被工业废水废渣污染,化肥的过量及非科学的使用导致土壤严重盐碱化。自来水的标准也是越来越宽松,几乎没有能达到直饮标准的自来水了。所以不少家庭都配套了水质净化器,或购买纯净水、矿泉水进行饮用,各种水处理的技术,如过滤材料和技术、电解技术、反渗透技术形成了万亿级别的市场。
空气污染则更加严重,空气中雾霾、甲醛、苯类气体的超标,工业废气和汽车尾气排出的氮氧化物,硫化物和磷氧化物,都时时刻刻在影响着人体的呼吸道健康。所以近几年各种检测的仪器、空气净化器、各种高压离子除霾器、化学除醛喷剂等工业和民用的产品就会不断被研发出来,为追求生活质量和身体健康的人提供更好的服务。这也是另一个万亿级别的市场。
国家已经在政策上下决心治理和改造各种恶劣环境,使人们能拥有更加健康的生活。那么,这些治理和改造将涉及到一系列环境数据的检测和采集,并在治理改造过程中需要观察其有效性、时效性,根据数据改进各种技术方案。这就需要大量提供各种检测功能的传感器和采集器,对各项数据进行探测和采集,分析其变化过程,从而指导执行方案。这些传感器的设计、检测方法、治理方法都值得我们去学习和研究。并有把握在一些技术应用上做出一定的成果。无论使用在车载上、工业上、民用上都能发挥其精准、长寿命、低成本的优势,满足各种消费人群的需求。
因此我的课题选用这2块的方向,是基于市场前景广阔,而他们现在的做法还偏传统,我们用物联网的思维可以帮他们将设备进行“万物互联”,分析小到局部区域、大到全球联网设备的运行情况、收集各设备检测和执行的各项数据进行收集、存储、分析,进一步指导设备改进的方向。协助设备生产商和运营商创造更多的市场布局、指导后续的推广规划,产生更多的商业价值。
三、腾讯云物联网的现状和展望
腾讯云如何切入国计民生行业实现商业价值的思考:
三大运营商拥有无可代替的基建资源、华为的通信设备遍布全球,这些是暂时无可取代的优势。而我们从另一个层面进行思考:他们相当于是给我们铺好了道路,我们在已经铺好的道路上,协助客户们解决应用技术问题、通过各种差异化的设计,为客户提供增值服务,收集和分析客户需要的设备综合数据,指导客户的市场推广、技术支持更加科学和结合实际情况的规划,实现更多的精准投放和有效使用,实现更高的盈利。
ToG的切入点可以从市政企业的设备管理入手,例如全国各地的自来水公司,可以把其检测设备和执行设备,通过腾讯提供的电路板和通信模块进行功能扩展,连网上腾讯云,提供腾讯云物联网服务。
ToB和ToC的切入点可以从支持企业设备的升级换代入手,例如PM2.5检测仪厂商、空气净化器产商、汽车净化器产商、通过宣传介绍喜欢物联网设备的便捷使用功能的消费者。
四、拥抱产业物联网,如何把腾讯云的价值赋能传统行业。
以上传统行业的标准设备架构,一般都会有很多硬件设备:如数据采集设备、动作执行设备,这些设备通过工业总线如RS485/以太网,搭配一个或若干个工业计算机/PC或PLC,运行应用程序做上位机。上位机的主要职责就是采集设备多种传感器(如温度、湿度、压力、流量等)的实时数据,通过该行业的生产工艺去控制硬件的配置和执行。这样的架构一般来说,设备各项数据只能存储在本地。有些自动化不够的企业,还停留在由操作员记录设备运行情况,上报给各级领导的情况,造成信息严重滞后,决策者得不到实时的信息,也无法下发实时的决策指令。
随着移动互联网的普及,各种设备信息的抄送,可以使用计算机或手机等移动设备的联网功能进行传输,这是一个不错的升级换代。
不过到了物联网的时代,我们可以让决策者们在办公区域、家里、车上、旅途中都可以根据自己的权限,直接得到需要的设备实时数据报告,随时根据需要调整的情况和操作权限去远程控制设备的各个设定参数。可以随时登录到云端服务器,查询和分析历史曲线,在全球任何一个地区都能查看全球所有旗下设备的运行/故障报告,制定新的指导方向。这是新一代的物联网思维:万物互联,信息实时传输。当代的市场,各种商机稍纵即逝,掌握更多的实时信息,更多的有效资料,就能把握商机,产生巨大的商业价值!
五、搭建该作品的技术分享:系统设计、硬件设计和软件编程;
(一)系统架构:
这个作品通过以下5大子系统组合,形成云端到终端的通信和控制:
1. 下位机:由一个8位单片机的最小系统,外接水位传感器和各控制电路,采集水位传感器的值,控制负离子发生器、等离子发生器、水泵和气泵的工作。
2. 上位机:客户端应用程序通过VB编制的一个小软件来实现,通过2个串口实时采集PM2.5传感器、自来水TDS和水位传感器的数据,再通过1个串口和下位机通讯,同步PM2.5传感器、TDS传感器和水位传感器的值,并发送命令控制各外设工作。VB小软件还提供手动和自动模式,手动可以实施控制喷烟、负离子发生器、等离子发生器、水泵和气泵开启和关闭。自动则把当前值对比设置值,通过一些逻辑让不同的器件工作,直到当前值达到设置值,则停止工作。
3. TencentOS_tiny_EVB_MX的开发板:它的作用就是承上启下,向上腾讯云通讯,向下和上位机通信,接受云端下发的控制命令及定时上报上位机的数据到云端,详情参考这里https://cloud.tencent.com/document/product/1098/35684。里面设计到几大关键技术:
(1)CPU 库 :TencentOS tiny 支持的 CPU IP 核架构,当前主要支持 ARM Cortex M0/3/4/7。
(2)驱动管理层 :包括板级支持包(BSP,主要由 MCU 芯片厂家开发与维护)、硬件抽象(HAL,主要由 TencentOS tiny提供,方便不同芯片的适配与移植)、设备驱动(Drivers,例如 Wi-Fi、GPRS、LORA 等模块的驱动程序)。
(3)内核 :TencentOS tiny是腾讯自研的精简RTOS实时内核,实时内核包括任务管理、实时调度、时间管理、中断管理、内存管理、异常处理、软件定时器、链表、消息队列、信号量、互斥锁、事件标志等模块。
(4)IoT 协议栈:TencentOS tiny 提供 lwip、AT Adapter、SAL 层,支持不同的网络硬件,例如以太网、串口 Wi-Fi、GPRS、NB-IoT、4G等通信模块。TCP/IP 网络协议栈上提供常用的物联网协议栈,例如 COAP、MQTT,支撑终端业务快速接入腾讯云。
(5)安全框架:TencentOS tiny 为了确保物联网终端数据传输安全以及设备认证安全,提供了完整的安全解决方案。安全框架提供的 DTLS 和 TLS 安全协议,加固了 COAP 及 MQTT 的传输层,可确保物联网终端在对接腾讯云时实现安全认证和数据加密;另外针对低资源的终端硬件,安全框架还提供与腾讯云 IoTHub 配套的密钥认证方案,确保资源受限设备也能在一定程度上实现设备安全认证。
(6)组件框架:TencentOS tiny 提供文件系统、KV 存储、自组网、JS 引擎、低功耗框架、设备框架、OTA、调试工具链等一系列组件,供用户根据业务场景选用。
(7)开放 API(规划开发中):TencentOS tiny 将在协议中间件和框架层上提供开放 API 函数,方便用户调用中间件功能,使用户无需过多关心中间件具体实现,快速对接腾讯云,实现终端业务上云的需求,期望最大程度减少终端物联网产品开发周期,节省开发成本。
4. 手机APP:Android手机app,用于控制喷烟和采集PM2.5和TDS当前值的移动端
5. 云端:构造和下位机匹配的数据模板,下发控制命令。
(二)各子系统的硬件和软件说明:
为了大家更好地理解,我画了一个系统运作框图,它也是我上位机的dashboard。下面我通过一个例子来讲整套系统的运转模式。
腾讯云IoT服务器就是腾讯云上IoT Explorer平台,我配置了一个数据模板,有PM2.5和TDS两个数据,它可以下发到TencentOS开发板,开发板收到后,会在OLED上显示,同时同步数据给上位机“净化系统监控计算机”,这个应用程序的自动模式,会把云端下发的数值作为设置值,然后实时通过“TencentOS净化系统扩展控制板”读取各传感器的值,然后驱动水泵和负离子和等离子发生器运转,净化到和设置的值相等,则停止工作。
大家会关心,各个子系统是如何连接通信的,下面就是他们的连接图,有硬件基础的同学应该一眼就看懂他们之间通信的接口,并能猜出各种转换电路和驱动电路,后面我会一步步下钻,给大家看具体的电路设计:
做嵌入式开发的习惯永远是先保证硬件能正常工作,才会开始写软件逻辑。刚开始写的软件,都是为了测试硬件是否没错,例如一个GPIO口控制一个PNP三极管的导通和关闭,是否真的送1就是导通,送0就是关闭,需要写些测试代码调试硬件。那么我们也从硬件开始讲。
这是扩展板整个系统的原理图:
对应的实物图就是这样:
扩展板主要由单片机的最小系统构成,学过硬件的同学都懂,我就不累赘了。我主要讲下面三部分内容:(1)供电;(2)串口通信;(3)控制电路;
(1)供电:我选择了市面AC-DC的适配器,直接实现220V市电转成了12V直流电,然后再搭2块电源转换电路,一个是从12V转到9V,提供给水泵、气泵、等离子和负离子发生器使用,另外一块电源电路是12V直流转5V电源,主要提供给水位传感器和WIFI模块使用(也就是原理图显示的VCC),单片机和驱动电路都是需要3.3V,又通过BL8060电平转换模块实现5V转3.3V(原理图显示的3.3V和VDD都是同一电压)。
(2)串口:这里面用了2个串口,我直接在实物里面标出来吧。
初始化代码是:
两个串口的接收和发送数据中断处理代码如下:
那么我们扩展板的UART1和上位机的应用程序通信主要做了什么事情?其实就2件事情:(1)读取水位传感器的值;(2)发送控制水泵、气泵、负离子和等离子发生器的命令;其实还有一件事情要做,先卖个关子,看看你能否猜出。
(1)读取水位传感器的值;
从原理图能看出水位上线传感器的GPIO是P2.3,而水位下限传感器的GPIO是P2.2
因此我们需要在单片机程序里面关联好硬件:
在主程序中,如果收到上位机发“@01R”的指令,则说明它想获得水位传感器的值,那么读取对应的GPIO口获取值,然后拼接成约定好的数据格式发送给上位机。
(2)发送控制水泵、气泵、负离子和等离子发生器的命令
讲一下控制硬件的电路吧,为了大家理解方便,我尽量把一些无关的线删掉。左边P7_3是mcu的一个GPIO口,我们的目的是能驱动净化水泵工作。因为净化水泵所需的驱动电压是9V,而单片机的GPIO口的电平是3.3V,因此我采用继电器实现隔离,又避免电机接通和断开时电流太大反向击穿MOS管。驱动继电器开闭的驱动电路,我选择PNP三极管做一级驱动,然后再驱动MOS管,让J6的1变成VDD,2为GND。经过2级放大电路,电流才足够驱动继电器工作。我们来分析他们的逻辑,P7_3输出为1,即高电平,右图K01为高电平,PNP三极管导通,此时P沟道的MOS管的G点为低电平,MOS管导通,J6接口的1号脚为VDD,2号脚为GND,通过排线连接,右边排线端子2脚为VDD,1脚为GND,此时继电器第3脚Con 为VDD,第4脚Con-为GND,导通,Out 和Out-连通,电机电源接通,净化水泵电机工作。其他电路类似,不再重复。
我们需要在单片机的代码里面定义好硬件,写好驱动程序。
我们举例这个控制净化水泵工作的代码,硬件使用GPIO口P7_3,单片机配置OP_relay2和它映射。当单片机收到上位机对光耦继电器的开闭命令,会对GPIO口进行操作。
刚才卖的关子,就是扩展板还需要和什么通信呢?其实扩展板还有一个WIFI模块ESP8266,和TencentOS开发板类似,就不重复说了。
为何扩展板需要一个WIFI模块呢?因为现在移动互联网办公越来越多,因此很多企业都会有android/iOS APP端,我临时写了一个,比较粗糙和简单,大家凑合看吧。
这种页面开发在鹅厂都是a piece of cake的事情,我就重点放在单片机处理逻辑上来说吧。单片机通过串口和WIFI模块8266通信,然后WIFI模块和手机app通信。
WIFI模块的一些通讯,都是用AT指令集,这些需要去看看ESP8266芯片的datasheet
单片机在系统启动时需要发送对应的指令去联机。单片机和wifi模块连接成功后,当用户点击APP上“连接”按钮的时候,手机和wifi模块就自动连接上,从而实现了手机和电路板通信链路的打通:
那么我们思考,APP和单片机通信主要是哪些?喷烟和停止喷烟是需要APP发控制命令让单片机去控制外设。上面显示PM2.5和TDS的目标值和实时值,则是需要有单片机传回给APP。可是从硬件来看,扩展板只是采集水位开关的值,PM2.5和TDS的值是有PC APP直接采集,因此扩展板需要定期同步这2个值,我的做法是PC APP每0.2秒发送一次PM2.5和TDS的目标值和当前值给扩展板,扩展板把数据存在一个数组里面,当APP来请求数据的时候就把这个数组里的值传给它。
从计算机上的应用程序获取PM2.5和TDS的目标值和实时值,存在全局变量copybuf数组里
当APP发送读取数据的时候,单片机就把这个数据传给了APP
APP收到后就去解码,然后回显到APP对应的label上。通讯的数据格式是这样,所以copybuf里面的值就是PM25TDS012345678901END。其中012是TDS实时值,345是TDS目标值,678是PM2.5的实时值,901是PM2.5的目标值。
APP如何去控制硬件工作呢?其实和上位机和单片机通信的方式一样,我们用Hand2这个函数来负责处理APP和单片机的通讯。
讲完和扩展板的连接后,我们需要讲讲上位机,它总共有4个串口,一个用电脑的USB直接链接TencentOS Tiny开发板,另外一个用电脑的USB再扩展一个USB HUB,引出三个USB,分别做USB-UART转换,1个串口和功能扩展板连接,另外2个串口和PM2.5和TDS传感器连接:
实物如下:
明白了他们的硬件连接,看看软件如何处理。上位机的界面是这样:
上面是和扩展板通讯的串口,它可以读到执行器件那部分的高水位阈值和低水位阈值的值,是从扩展板采集数据后上报到上位机来。执行器件的喷烟开和关、离子发生器的开和关和抽水泵的开和关的控制,是通过上位机下发命令给扩展板,再通过GPIO去控制外设的。
下面自动读取PM2.5值是定期从PM2.5的传感器读取它的值,然后再把值赋给“空气质量数据”的PM2.5当前值。TDS通讯也是同理,只是要获取TDS的值,需要先发一串“FDFDFD”的命令下去,才能获取当前值,读取的TDS值后也是同理,赋值到上面“水质量数据”的TDS当前值。
在读取真实值的上面,有PM2.5虚拟数据和TDS虚拟数据,这也是为了调试方便,抛开硬件,看软件能否正常运作
最下面部分,是连接TencentOS Tiny开发板的串口,它接收从腾讯云云端发送的设置值,再赋值到上面“空气质量数据”的“PM2.5设置值”,和“水质量数据”的“TDS设置值”。
手动模式是我开始要测试硬件是否能正常通讯和各控制命令是否能如期工作,自动模式则是加入逻辑代码,把当前的值对比云端下发的设置值,如果未达到设置值,则启动净化系统,直至接近设置值则停止工作。
大家有没注意我用2个绿色框框出2个“上限阈值”和“下限阈值”,为什么要加这2个值,一方面是为了保护电机的工作,当当前值达到设置值的时候,电机停止工作,此时当前值稍稍上涨一点,电机又得工作,这样电机的工作和停止状态切换就很频繁,容易损坏,因此通过设置这样的阈值,可以给电机一点休息的时间,延长电机的寿命。想想现实生活中有没这样的例子?其实有,以前直频空调也是用这样的方式,当我们设置25度,此时制冷到25度,电机停止工作,可是这是传感器取回来的值,实际上,可能温度会继续降到24度,然后慢慢温度上升,直到高于26度,电机才开始工作。
手机APP和PC APP代表2个端,他们和实际的空气质量检测和监控子系统,自来水的检测和监控子系统连接和通讯的关键技术点都讲完了,下面我们要看如何从云端发送命令到TencentOS开发板,以及开发板把数据同步到OLED屏幕,再把数据下发到PC APP。如果这条链路搞定,那么整套系统就实现了从云端到终端全链路的通讯。
腾讯云物联网开放平台:https://console.cloud.tencent.com/iotexplorer
我新建了一个产品,叫“智能空气质量及自来水检测净化系统”
我自定义了2个属性,一个是TDS,一个是PM25,是整数型数据类型
然后在TencentOS开发板上的STM32L431RCT6的SDK中,我们对他们的需要做几个配置:(1)配置WIFI的SSID和密码;(2)配置和云端产品关联的产品ID、设备名称和设备密钥;(3)配置一个数据结构和腾讯云端的数据模板一致的结构体,实现数据同步。(1)和(2)在《TencentOS tiny内测开发板入门指南》 第28和29页已经解释得很清楚了,同学可以直接查看参考。下面我分享一下我TencentOS开发板中和腾讯云通讯部分的代码。也是用C语言来实现。
先定义有2个属性,用结构体来定义这2个变量,封装成一个对象,和腾讯云上配置的数据模板对应:
在开发板复位后,对数据做一个初始化。
当腾讯云端有数据变化时会调用这个回调函数,最后sg_delta_arrived=true:
update_self_define_value把腾讯云上传下来的json的key-value值分别取出来,存在我们定义的全局变量sg_ProductData里面,它是一个结构体,里面有2个属性,上面已说明。
于 sg_delta_arrived=true,就会执行灯光处理逻辑:
deal_down_stream_user_logic会把云端的PM25和TDS的值往OLED里面写:
OLED有8行,取值是0-7,每个字符会占用2行,因此TDS显示的值会放在第0列,第0行,而PM2.5的值会放在第0列,第3行(偏移量是2),如下函数所示。
看到的结果是这样:
整个从云端到终端的电路和代码都讲完了。下面讲讲我TencentOS tiny和IoT Explorer试用感受反馈:
这块开发板做工精细,设计者明显是布板的高手,元器件的布局非常合理,扩展模块和通信模块位置无论是在扩展性方面的考虑,使用位置上的考虑,以及抗干扰能力方面的考虑都独具匠心。个人认为如果是使用wifi模块和可燃气体探测模块(我的开发板配套的是这个模块,工作电流约100多mA)这样的大功率消耗,扩展的电池是起不到多大续航能力的。估计硬件开发者会考虑后续的蓝牙/zigbee/NB_IoT这些能实现低功耗通信模块的应用。
建议尽快扩展当今主流应用的2G/4G/NB_IoT等物联卡模块,帮用户省去配网的繁琐操作。现在我使用的配网方式是在SDK中直接输入我家的SSID和密码用wifi扩展模块进行登录。在移动网信号还不错的地方,我把手机热点设置成家里路由器一样的时候也能顺利上云,不过出错率相对有点高,10有1-2次连接失败。建议SDK中对连接不上的情况,应该用AT RST指令进行复位再重新连接,成功率会增加。
TencentOS tiny SDK我认为编得非常好。框架结构清晰,脉络分明。很容易理解并修改。比如我就只用了一个晚上就读通并把它修改成我需要的代码。
IoT Explorer方面,个人认为做得还不错,产品的创建和设置操作非常简单,很多细节都考虑了初期使用者的感受,尽量的做到了傻瓜化操作。赞一个!我在下一节的bug描述里面有几个认为可以优化的细节,希望开发者们能采纳和改进,并做出更多更好的功能,一起创造腾讯云物联网平台美好的明天!
六、根据自己在实际操作云端设置过程和开发板,碰到的软件和硬件问题,提出一些改进的建议。
1. 已发布不能修改,也不能删除,也不能改名。我就遇到这个问题,我创建了一个产品,然后总是“下一步”,一不小心发布了,然后就什么都不能改,后来查了说明,确实有说明发布后不给改了,怪我之前没仔细阅读。但是错就错了,我想要这个名字啊,因为和我的作品的名字一样,重新创建一个又不能重名,那我想,我删掉呗,结果也不能。那改个名可以吧?好像也不行。要不然最少也得给个人工申诉功能,回撤“已发布”状态吧。
2. 显示和设置的属性值用同一个,结果上报的数据总是会覆盖正在设置的值,非常不友好,这是我在8月15日调试时候的样子,还是以拖动的方式来设置值,但是如果我设置值的时间大于上报的时间,刚才改的设置值就会被上报数据覆盖掉。
而我在16日发现这里改变成另外一种以填值的方式进行了部分改善(估计其他同学也发现了上述问题并反馈了,进行了这个方法的修改),并没有改变这个问题:
我认为应该有2个显示数据,一个是当前值,一个是期望值,当用户拖动或者改变前端数据的时候,上报的数据不应该覆盖拖动的进度条或期望值,此时上报的数据只变更“当前值”,设置一个超时时间,例如1分钟,时间到了,用户依然没有变更数据,则把新上报的数据同步期望值以及进度条,就可以解决这个问题。
3. 选用的WIFI模块ESP8266的稳定性不是太好,实验室阶段可以用,但是批量还是不建议。此外建议尽快扩展当今主流应用的2G/4G/NB_IoT等物联卡模块,帮用户省去配网的繁琐操作。
4. 开发板指导说明书中应该重点阐述串口供电和ST-LINK不能同时通电,以免烧坏开发板或通信器。(两台不同计算机进行操作时)