By Toradex Leonardo Graboski Veiga

1). 简介

物联网(Internet of Things)概念的本质其实就是关于发送数据到网络,所以称为云服务。随着时代发展和技术进步,人们可以使用尺寸更小功耗更低的电子设备并很容易的连接到云端,不过有一个问题却始终困扰着电子工程师们:如何使用这些获取的数据?而这正是物联网的主题。

在Microsoft主页上面有一些实际的应用例子来展示IoT的应用:一个电梯公司通过物联网来改善并提供预先维护;一个工业自动化公司通过物联网深入了解油气产业供应链,同时提供预先维护;还有一个公司通过IoT预测驾驶人员行为然后优化汽车利用。在读完这个系列文章后,我们期待读者可以拥有足够的知识和工具去部署应用来深度检视同时优化整个系统 – 不仅仅是积攒了一堆数据,而是从中获取了有用的结果!

Azure 是Microsoft提供的云服务平台,提供了多种应用如数据库,虚拟机,应用服务,机器学习,数据流分析,媒体和CDN服务,大数据解决方案,以及包括IoT Hub的其他众多应用。就其提供的大量应用本身已经是使用Azure服务的很好理由,但Microsoft更进一步通过和Amazon Web Services的对比来进一步证明其方案是更好的 – 和前面相反,这是一个通过用户和时间来确认的强有力宣言。另外,高安全性,易于整合以及容易上手也是选择Azure服务的另一个理由。

本系列文章通过开发一个IoT应用,从读取现场传感器数据,展示数据到获取商业智能(BI)。所使用的用来连接传感器以及上传数据到云端的平台:Azure IoT certified partner Toradex 的Colibri VF61计算机模块 + Iris Carrier Board。应用程序获取传感器数据然后上传到来自Microsoft Azure云解决方案的一个叫做Azure IoT Hub 的IoT服务,然后就可以被各种所需要的Microsoft Azure服务来处理。这部分内容将在本系列文章的第二部分着重讲解,在此我们主要关注在如何配置Azure IoT Hub以及上传数据到它上面。

我们选用的IoT环境为模型车监控。为了演示方便,将Toradex平台和传感器置于遥控模型汽车内,如下图1所示;而图2则给出的目标应用的框图。


图1:遥控汽车


图2:应用框图

我们所选用的应用编程语言为Javascript 配合Node.js: 一个服务器端(本文中即Toradex嵌入式系统)基于Chrome V8 引擎编译的Javascript解释器。这个选择是考虑到Azure IoT Hub SDKs 可以提供的开发库。但是需要注意的是现在IoT Hub SDKs正处于频繁更新中,每一次更新都会有些改变(至少Node相关),所以在使用前需要考虑清楚。本文所使用的Azure IoT Node包版本为1.0.1。

整个环境的搭建,从开发嵌入式系统应用,到配置Azure来获取数据我们分为3个主要步骤,下面会分别介绍:

./ 配置Azure环境

./ 添加设备并发送信息到IoT Hub

./ Toradex嵌入式系统应用开发

2). 配置Azure环境

首先需要创建一个新的Azure账户:从Azure 网站可以申请30试用的免费账户。然后就可以使用账户里一定数目的信用额度来免费部署应用使用Azure 服务;同样,IoT Hub也有一个用于开发的包含有限资源的免费版本,且不受试用期限制。关于价格和IoT Hub的详细信息,请见这里。

设置好Azure账户后,需要创建IoT Hub。用新创建的Azure账户登陆Azure portal,选择 +New > Internet of Things > Azure IoT Hub。新的IoT Hub配置界面如下图3所示,“Pricing and scale tier”选项需要选择“Free”;然后在“Resource Group”选项创建一个新的资源组,另外“Location”选项需要和后面部署的服务保持一致;“Name”可以自由设定,而“IoT Hub Units”和”Device-to-cloud“选项在免费版本中则无法修改。点击“Create”后,服务就被部署了,这个过程可能需要几十秒时间。


图3:从Azure Portal创建IoT Hub

上面操作完成后,可以看到IoT Hub已经出现在控制台,也就是Azure Portal主页。点击后,如下图4所示页面会打开:里面包含“Essentials” 是如IoT Hub地区等基本信息;“Usage”是提供给系统管理员注册设备数目以及从设备发送信息数量的反馈信息;“Monitoring”是显示收到信息数量。


图4:IoT Hub 主面板

仍然在IoT Hub主面板上,为了让其他应用也可以访问服务,”Settings“选项卡里面的“Shared access policies“选项需要被选中。在新打开的” Shared access policies“选项卡中,点击“iothubowner”规则选项,这个包含了本IoT Hub所有可能的权限。如下图5所示,“iothubowner”选项卡会打开,然后复制”Connection string – primary key”对应的内容留作后用:这个是下一步用于管理和监控这个IoT Hub服务的钥匙。


图5:获取iothubowner connection string

3). 添加设备并发送信息到IoT Hub

现在云端设置已经完成,我们需要在开发主机上面安装iothub-explorer工具来添加设备到IoT Hub,另外如果开发主机是Windows的话,也可以选择Device Explorer工具。鉴于本文所使用的开发主机系统为Ubuntu 14.04,我们采用iothub-explorer。需要注意所需Node版本为0.12.x或以上(根据说明如需全部功能工作需要4.x或以上版本),但目前apt-get工具只能安装0.10.x版本。为了解决这个问题,需要先后安装Node Version Manager (NVM)和Node 版本0.12.9. 然后在终端中使用NPM(Node Package Manager)来安装iothub-explorer。

---------------------

$ npm install iothub-explorer@latest

---------------------

然后可以运行iothub-explorer help参数来查看使用方法

---------------------

$ iothub-explorer help

---------------------

根据上面命令的打印结果,iothub-explorer 包含有create和monitor事件参数。首先,我们配合上面图5中获取的connection string使用iothub-explorer工具来创建一个设备“tdx_iot_car”。注意“--connection-string”参数用来显示设备connection string (和图5中获取的IoT Hub connection string不同),这个也需要保存下来用来连接这个新创建的设备到IoT Hub,是的可以使用Colibri VF61应用来发消息到Hub。

---------------------

$ iothub-explorer "HostName=toradex.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=putyoursharedaccesskeyfromtheconnectionstringhere" create tdx_iot_car --connection-string

Created device tdx_iot_car

-

deviceId:                   tdx_iot_car

generationId:               635931262207620183

etag:                       MA==

connectionState:            Disconnected

status:                     enabled

statusReason:               null

connectionStateUpdatedTime: 0001-01-01T00:00:00

statusUpdatedTime:          0001-01-01T00:00:00

lastActivityTime:           0001-01-01T00:00:00

cloudToDeviceMessageCount:  0

authentication:

SymmetricKey:

primaryKey:   somesharedaccesskeyreturned

secondaryKey: somesecondaryaccesskeyreturned

-

connectionString: HostName=toradex.azure-devices.net;DeviceId=tdx_iot_car;SharedAccessKey=somesharedaccesskeyreturned

---------------------

 

4). Toradex嵌入式系统应用开发

现在来设置Colibri VF61 计算机模块 + Iris 载板。本文中使用Toradex发布的预编译Linux image (Colibri_VF_LinuxConsoleImageV2.5),如何刷写image到模块请参考这里。然后请参考下面步骤安装Node.js, NPM 包和git – 安装过程需要一些时间,尤其是curl步骤。

---------------------

# opkg update

# opkg install nodejs

# opkg install tar

# curl -L https://www.npmjs.com/install.sh | sh

# opkg install git

---------------------

本文所展示的例程(send_data.js)相关packages installer和node文件存放于这里,可以通过下面命令将其clone到目标板上面并安装node packages

---------------------

# git clone https://github.com/leograba/azure-iot-car.git

# root@colibri-vf:~# cd azure-iot-car

# root@colibri-vf:~# npm install

---------------------

现在我们可以在目标板上面运行例程向IoT Hub发送数据,但有几点需要解释下:例程使用HTTP协议通讯,但AMQP和MQTT协议也是支持的;变量“connecionString”数值必须和上面用iothub-explorer工具创建新设备时候所保存下来string一致:

---------------------

var connectionString = "HostName=toradex.azure-devices.net;DeviceId=tdx_iot_car;SharedAccessKey=somesharedaccesskeyreturned"

---------------------

Setinterval()循环函数随机产生数值发送到IoT Hub, 用来模拟传感器数据,如温度,声纳传感器距离数据,加速度和陀螺仪传感器,一些gps坐标数据和来自目标板的时间日期等。如何从真实传感器获取数据将在这个系列文章的下一篇进行说明。JSON Stringify() 函数用来产生一个JSON编码数据串,然后封装于Message object用于发送。下面是一个JSON格式数据串示例:

---------------------

{"ObjectName":"toradex2",

"ObjectType":"SensorTagEvent",

"temp":24.889683,

"acceleration:

{"accel_x":10.018892,"accel_y":0.039468,"accel_z":-0.081328},

"gyroscope":

{"gyro_x":-0.0532362,"gyro_y":-0.01597086,"gyro_z":0},

"distance":0.17017,

"boardTime":1458064972706}

---------------------

正常情况下,在程序运行时候sendEvent()函数里面的callback函数不应打印任何串口输出。下面是在Colibri VF61上面运行程序并正常工作时候的串口打印输出:

---------------------

# node send_data.js

sending message to the IoT Hub

sending message to the IoT Hub

sending message to the IoT Hub

sending message to the IoT Hub

sending message to the IoT Hub

sending message to the IoT Hub

sending message to the IoT Hub

sending message to the IoT Hub

---------------------

为了确保数据被收到,在Azure Portal IoT Hub面板会显示每天的消息计数,同时监控图表上面会有尖峰显示,如下图6所示。需要注意这些信息大概需要几十秒才会在portal上面显示出来。


图 6: 在Azure Portal中确认数据被收到

另外,也可以使用iothub-explorer工具通过“monitor-event”参数配合device id来查看发送到IoT Hub的数据流,不过需要Colibri VF61程序要同步运行,而通过Azure Portal查看则不需要。下面图7展示了iothub-exploer收取目标板发送数据情况,上面是具体监测数据命令:

---------------------

$ iothub-explorer "your_iothub_connection_string" monitor-events yourdevice

---------------------


图7:用iothub-explorer收取目标板发送数据

 

5). 总结

Microsoft Azure网站上面提供了很多文档用于帮助用户开发更复杂和稳固的应用。参考这些文档可以从中获取更多有用信息,如创建一个设备,或者从Hub获取设备发送的数据是可以通过编程来完成的。另外,在接下来的文章中我们将侧重连接真实传感器到Colibri VF61 + Iris载板,并传输真实传感器数据到IoT Hub, 这个也可以用作其他Azure 服务来给设备部署应用提供深度检视或变量操控。

我们希望通过本文可以让用户了解并最终使用Toradex 嵌入式系统方案配合Auzre IoT Hub服务,然后从中获益。同时,我们也想在这里感谢来自巴西的Grupo Viceri团队在Azure and Business Intelligence上面的丰富经验最终促成了这个IoT Car 项目。

本文最初发表于Embarcados.com, Portuguese,详见这里。

Microsoft Azure IoT Hub应用 – 第一部分:向云端发送数据相关推荐

  1. Microsoft正式发布Azure IoT Hub与Event Grid的集成

    在经历为期六个月的公开预览后,微软宣布正式发布IoT Hub与Azure Event Grid的集成.组合使用两者可以提高对客户设备事件的支持,实现数据库更新.工单(ticket)创建和定价管理等操作 ...

  2. 【物联网云端对接-1】 通过HTTP协议与微软Azure IoT hub进行云端通信

    在2015年曾写过一篇文章<从微软build 2015.展望微软未来发展>,提到了微软的Azure和Windows 10 IoT,那算是初次接触微软物联网技术.比較幸运的是在兴许的时间里. ...

  3. Azure IoT Hub 十分钟入门系列 (2)- 使用模拟设备发送设备到云(d2c)的消息

    本文主要分享一个案例: 10分钟- 使用Python 示例代码和SDK向IoT Hub 发送遥测消息 本文主要有如下内容: 了解C2D/D2C消息: 了解IoT Hub中Device的概念 了解并下载 ...

  4. 针对世纪互联Azure IoT Hub的一种设备下线通知方案

    本文介绍: 世纪互联Azure IoT Hub的一种获取设备下线通知方案 视频介绍: 您可在B站观看视频介绍:https://www.bilibili.com/video/BV1RK4y1b7Zp/ ...

  5. Azure IoT Hub DPS custom allocation policies by functions- 在DPS中启用设备自定义分配策略

    Azure IoT Hub DPS custom allocation policies by functions- 在DPS中启用设备自定义分配策略 视频介绍: azure iot hub DPS ...

  6. Azure IoT Hub和Event Hub相关的技术系列-索引篇

    Azure IoT Hub和Event Hub相关的技术系列,最近已经整理了不少了,统一做一个索引链接,置顶. Azure IoT 技术研究系列1-入门篇 Azure IoT 技术研究系列2-设备注册 ...

  7. Azure IoT Hub入门 - 接口介绍

    Azure IoT Hub作为多租户服务,对不同的用户暴露了不同的接口(如下图所示). 下面对各类接口进行详细解释: 设备接口: Send device-to-cloud messages: 通过该接 ...

  8. Azure IoT Hub 十分钟入门系列 (1)- 10分钟带你了解Azure IoT Hub 并创建IoT Hub

    建议您先对<Azure 上 IoT 整体解决方案概览 >进行了解. 本文主要分享一个案例: 10分钟-了解Azure IoT Hub并创建Azure IoT Hub 本文主要有如下内容: ...

  9. 微软云azure iot hub开发环境部署

    微软云当前势头越来越强,此文简单写下之前的经验. 1. 注册 1)注册地址 https://portal.azure.com/   https://azure.microsoft.com/zh-cn/ ...

最新文章

  1. SecureCRT 6.7.1 注冊机 和谐 破解 补丁 方法
  2. 关于共享单车,说点什么
  3. AI公开课:19.04.17杨松帆—好未来AI Lab负责人《为人工智能时代打造一个AI老师》课堂笔记以及个人感悟
  4. java识别系统_[Java教程]Java识别操作系统
  5. php date( ymd_PHP DATE()
  6. 代码生成利器-NCodeGenerate 教程(2) NCodeGenerate的代码公用之一
  7. 【报告分享】“流量重构”时代来临,2020-2021中国消费互联网竞争趋势报告-腾讯.pdf(附下载链接)...
  8. 微软双机双柜方案讨论
  9. Android开发中图表的使用
  10. codeigniter中base_url和site_url
  11. Java线程状态及其转移
  12. 深入理解Moya设计
  13. html如何加页脚,html-如何将页脚扩展到页面底部?
  14. python3抓取aqi
  15. 反向代理和正向代理的概念
  16. 服务器与微信联通,联通微信和钉钉服务
  17. 阿里面试应该注意什么?通过5轮面试的阿里实习生亲述
  18. 硬件学习(一)电容作用
  19. 2022个人邮箱注册哪个好?163企业邮箱怎么申请注册个人电子邮箱
  20. 水平集详解与代码分析一

热门文章

  1. 红杉观点|生成式AI:一个创造性的新世界
  2. 郎意难坚,侬情自热(文/王路)
  3. 计算机浏览页面,计算机默认网页浏览器怎么设置
  4. 树莓派之DHT11传感器
  5. caffe训练途中停止之后继续训练
  6. 搜索引擎友好的HTML
  7. 基于 Quartz 的调度中心
  8. 某计算机内存容量是512kb,某计算机主存容量为512kb,Cache容量为16kb,每块有16个字,每字32位。 (1...
  9. 【Python爬虫】用Python爬取娱乐圈排行榜数据
  10. 网站广告效果评测指标介绍