Microsoft IoT Starter Kit 开发初体验
1. 引子
今年6月底,在上海举办的中国国际物联网大会上,微软中国面向中国物联网社区推出了Microsoft IoT Starter Kit ,并且免费开放1000套的申请。申请地址为:http://aka.ms/iotkits,目前仍然有效。当时一开放申请,我就在线填写了申请表,接下来就是长长的等待。相信很多朋友都是一样,在经过几个月的等待之后,终于拿到了这个开发套件,而有些朋友估计还在等待中。因为官方是一个月处理并邮寄一批,速度不是很快。但是,在经过了一段时间使用以后,我可以说,如果朋友们期待在这个最初版本的套件上开发基于Windows 10 IoT Core的程序的话,那么,还得再等等,因为后续的升级版本套件还在测试中。如果你有Linux和Arduino的基础,那么,恭喜你,你可以快速上手用了。接下来,就从我自己的角度,和大家分享这个套件的使用初体验。
2.开发套件硬件
首先,我们来看一看硬件配置,这次拿到的开发套件是微软物联网开发套件A型,包含了SeeeduinoCloud和Orange Pi Lite两块开发板,外围设备方面,包含Grove接口扩展板、200万像素摄像头、板载麦克风、温湿度传感器、光敏传感器、RGB灯、声音传感器、板载WIFI模块、8G Micro SD存储卡、一根MicroUSB线(给SeeeduinoCloud供电)和一根给Orange Pi Lite供电的USB线,值得注意的是,给SeeeduinoCloud供电的话,普通的充电器或者电脑的USB接口就足够了;但是,给Orange Pi Lite供电的话,最好找个电流大一些的充电器,比如1A以上的,官方标的是需要2A。另外,需要澄清的是,开发套件B不包含在免费赠送的范围内,据说,开发套件B型包含一块RaspberryPi 3 Model B、OLED显示屏、NFC、RFID卡、空气质量传感器、中继器、角度控制器等部件。
应该说,开发这两块开发板,用的套路是不一样的。首先,SeeeduinoCloud用的是Arduino IDE;Orange Pi Lite默认烧写运行的是Ubuntu系统,需要Linux环境的开发机。Grove接口扩展板和其他的各种传感器,是设计给SeeeduinoCloud用的;而摄像头,是设计给Orange Pi Lite用的。所以,这两部分硬件的概要图是这个样子的。


从性能上来看,Orange Pi Lite是不输给树莓派的,而淘宝的价格只有70+RMB,还是比较给力的。相比较而言,还是这块SeeeduinoCloud较贵,官网上的价格是50美金,不过它已经包含了无线WiFi,运行的环境是Openwrt+Arduino。
3. 软件与准备工作
从官方的宣传来看,称此套件“支持Arduino、OpenWrt、多种Linux发行版、Windows 10 IoT Core。为了更方便地连接Azure云服务,微软物联网开发套件在开发版中内置了Azure IoT SDK和Azure Cognitive Services认知服务SDK”。这里,需要大家注意的是,Arduino、OpenWrt是对于SeeeduinoCloud而言的,多种Linux发行版是对于Orange Pi Lite而言的,Windows 10 IoT Core是对于开发套件B的树莓派而言的。所以,不同的硬件运行不同的系统,开发工具和环境也不一样,这个大家需要留心,根据自己的实际需求来选择。
这里,我们先来测试SeeeduinoCloud和对应的Azure IoTHub服务。在开始之前,首先需要在自己的开发机器上安装Arduino IDE,因为SeeeduinoCloud需要使用Arduino IDE来编写执行的代码。如果没有安装该软件的朋友,可以到https://www.arduino.cc下载并安装最新的版本。
另外,使用Azure IoT服务的话,需要向世纪互联提交试用申请,地址为:https://www.azure.cn/pricing/1rmb-trial-full/?form-type=identityauth。当然,如果有国际版MSDN订阅的账户,其中包含了Azure服务的,也可以直接使用Azure IoT服务。套件中需要使用的Azure连接信息主要就是IoTHub的Hostname,Devicename和Key。有关IoTHub的创建,可以参考Azure的在线文档:https://www.azure.cn/documentation/articles/iot-hub-csharp-csharp-getstarted/。有关Device的创建,可以直接使用Device Explore工具,具体可以参考:https://github.com/Azure/azure-iot-sdks/tree/master/tools/DeviceExplorer
当然,如果要用别的免费的在线服务,也可以选择国内的Yeelink,具体可以参考:http://wiki.seeed.cc/Seeeduino_Cloud/
4. 硬件连接与初始设置
将开发套件中的SeeeduinoCloud、Grove接口扩展板和4个传感器取出,按照如下的连线方式连接:
① Grove - Temp&Humi Sensor -> A0;② Grove - Light Sensor -> A1;③ Grove - Sound Sensor -> A2;④ Grove - Chainable RGB LED -> D4,注意,Chainable RGB LED端接In。
连线完毕以后,效果图如下:

给SeeeduinoCloud上电,参考http://wiki.seeed.cc/Seeeduino_Cloud/文档的Network Config部分,配置SeeeduinoCloud连接无线路由器的SSID和密码(当然,如果想直接使用RJ45以太网接口的朋友,可以直接忽略)。首先,进入SeeeduinoCloud,其密码是seeeduino,如下图所示。

其次,在System部分,配置可用的无线路由器的SSID和密码,如下图所示。

设置结束以后,点击Configure and Restart,重启以后,可以登录无线路由器,发现它能够通过WiFi连接了。当然,从SeeeduinoCloud上电到连接上WiFi,需要一定的时间(大概30秒)。它的主机名是“--”,比较奇怪。

5. 设置Azure IoTHub连接字符串
使用Putty客户端,根据IP地址连接SeeeduinoCloud,按照“root,seeeduino”登录。如下图所示。

在根目录下,使用ls命令查看现有的文件。

可见,其中已经包含了一些必须的文件。这些文件在出厂的时候已经设置好了,需要修改的就是AzureConnectionString。因为这个是连接IoTHub的字符串。
使用 vi 键入 host name、device id 与 device key 到文件 " AzureConnectionString "。文件路径为 " /root/AzureConnectionString "。
或者使用 echo 命令输入字符串,如下(下面的问号用上面申请到的连接字符串代替):
echo -n 'HOST_NAME:???.azure-devices.???
DEVICE_ID:???
DEVICE_KEY:???' > /root/AzureConnectionString
6. Arduino编程并下载程序
利用Arduino IDE打开源代码工程,可以去https://github.com/WayenWeng/Seeeduino_Cloud_Azure_IoT_Hub_Client/下载。把Seeeduino_Cloud_Azure_IoT_Hub_Client-master\Arduino Code\libraries下的两个文件夹解压到Arduino IDE的libraries目录下。如下图所示。

打开工程,可以发现,程序主要采集的数据就是温度、湿度、光照强度和声音强度,采集的时间间隔可以通过loop中的delay函数来控制,其中的参数是以毫秒为单位的,默认应该是1000,也就是1秒钟采集一次数据,可以根据实际情况修改。另外,发送和接收数据是通过调用根目录下的AzureMessageSend和AzureMessageReceive来实现的,这部分内容并不在Arduino控制的范围内。当然,如果用户需要增加其他的传感器数据,就可以在扩展板上接其他传感器,在程序中读取,并封装到消息体里面就可以。然后,如果硬件连接正确的话,就可以在工具-端口中找到Seeeduino对应的COM号。最后,点击上传,就可以将程序上传到Seeeduino中。

7. 运行程序并监控数据
在Putty工具中,使用ps命令,就可以查看进程,如下图所示。

其中可以找到AzureIoTHubClient,该进程是默认启动的。为了监控数据采集和发送的状态,可以显示启动它。在命令行中,输入./AzureIoTHubClient,回车。如果正常的话,会显示客户端连接Azure IoTHub的状态信息,如下图所示。

之后,程序就会每隔1秒钟采集数据,并发送给IoTHub,如下图所示。

在本地,可以使用Device Explore来监控对应设备的数据,如下图所示。

另外,也可以在Azure的主页上查看已经发送的数据数量,如下图所示。

8. 数据的在线可视化-PowerBI
传感器采集的数据是冷冰冰的,如何让它活跃起来,我们可以使用微软提供的Stream Analytics和PowerBI来实现数据的多样化显示。首先,需要在Azure的主页上新建一个流分析的业务,并将其输入配置为之前新建的IoTHub,输出配置为PowerBI,如下图所示。

当IoT Hub和Stream Analytics都运行起来以后,登录到PowerBI,设置图标的样式,如下图所示。

之后,可以将报表固定到某个Dashboard上,如下图所示。

保存,回到PowerBI主页,就可以看到实时的传感器数据的视图了,如下图所示。

后记
整个项目调试过程中,需要注意在输入Azure连接字符串时,最好通过VI输入,因为如果使用Windows的记事本等工具输入,有可能会带入一些不必要的字符,影响Azure IoT Hub的连接。
参考链接
1. IoT Starter Kit申请地址:http://aka.ms/iotkits
2. Azure试用申请::https://www.azure.cn/pricing/1rmb-trial-full/?form-type=identityauth
3. IoTHub的创建:https://www.azure.cn/documentation/articles/iot-hub-csharp-csharp-getstarted/
4. Device Explore工具:https://github.com/Azure/azure-iot-sdks/tree/master/tools/DeviceExplorer
5. SeeeduinoCloud上手文档:http://wiki.seeed.cc/Seeeduino_Cloud/
6. 程序代码托管地址:https://github.com/WayenWeng/Seeeduino_Cloud_Azure_IoT_Hub_Client/
Microsoft IoT Starter Kit 开发初体验的更多相关文章
- Microsoft IoT Starter Kit 开发初体验-反馈控制与数据存储
在上一篇文章<Microsoft IoT Starter Kit 开发初体验>中,讲述了微软中国发布的Microsoft IoT Starter Kit所包含的硬件介绍.开发环境搭建.硬件 ...
- Microsoft IoT Starter Kit
Microsoft IoT Starter Kit 开发初体验 1. 引子 今年6月底,在上海举办的中国国际物联网大会上,微软中国面向中国物联网社区推出了Microsoft IoT Starter K ...
- Xamarin.iOS开发初体验
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0
- IOS开发初体验
IOS开发初体验 搭建开发环境 不多说什么了,开发环境的搭建太简单了,上App Store搜索XCode下载就行了,说多了都是眼泪 创建第一个IOS项目--HolleIOS 创建工程 选择工程创建位置 ...
- 中文代码示例之NW.js桌面应用开发初体验
先看到了NW.js(应该是前身node-webkit的缩写? 觉得该起个更讲究的名字, 如果是NorthWest之意的话, logo(见下)里的指南针好像也没指着西北啊)和Electron的比较文章: ...
- Online开发初体验——Jeecg-Boot 在线配置图表
Online开发——初体验(在线配置图表) 01 通过JSON数据,快速配置图形报表 02 通过SQL数据,快速配置图形报表 03 图表模板配置,实现不同数据源图表合并展示 04 图表布局,支持单排. ...
- Apache Beam入门及Java SDK开发初体验
1 什么是Apache Beam Apache Beam是一个开源的统一的大数据编程模型,它本身并不提供执行引擎,而是支持各种平台如GCP Dataflow.Spark.Flink等.通过Apache ...
- ThinkPHP -- 开发初体验及其几个配置文件的介绍
ThinkPHP是一款不错的轻量级的PHP+MVC框架,它吸取了Ruby On Rails的特性,不仅将Model.View.Controller分开,而且实现了ORM.模板标签等高级特性. 开 ...
- 介绍使用Cordova和Web Starter Kit开发Android
介绍 如今,每个人都想制作移动应用程序,为什么不呢?世界上有更多的移动设备比任何其他用户设备.Android尤其流行,但是为什么不从一个众所周知的跨平台应用的基础开始呢?Android的开发显然比其他 ...
随机推荐
- [c++] Templates
Template是编译时多态.所有的模板都是在编译时产生对应的代码,它没有面向对象中的虚表,无法实现动态多态. Function Template A function template is a p ...
- 使用RMAN创建复制数据库
我的实验环境: - 源数据库A机: RHEL6.4 + Oracle 11.2.0.4 IP地址:192.168.99.159 db_name=oradb 数据库已正常运行 - 复制数据库B机: RH ...
- Sql Server 聚集索引扫描 Scan Direction的两种方式------FORWARD 和 BACKWARD
最近发现一个分页查询存储过程中的的一个SQL语句,当聚集索引列的排序方式不同的时候,效率差别达到数十倍,让我感到非常吃惊 由此引发出来分页查询的情况下对大表做Clustered Scan的时候, 不同 ...
- 小白Linux入门 一
1 win7电脑上安装虚拟机,准备文件 vmware 12 http://www.orsoon.com/Soft/89658.html ubuntu 16.04 http://cn.ubuntu.c ...
- Java进击C#——语法之基础
本章简言 上一章讲到关于项目工程开发常用的知识点,有了前面俩章的介绍之后.本章正式开始介绍关于C#的基础语法.我们都很清楚C#也是面向对象的计算机语言.而且他跟JAVA的相似度高达80%.所以很多语法 ...
- Moon.Orm与其他Orm的技术对比
有时候在思考大家为什么喜欢EF,为什么又出现这么多的Orm,为什么Nhiberate被人许多人接收又被许多人拒绝 最后发现结论:萝卜白菜各有所爱.适合自己的就是最好的. EF 微软团队支持(可谓强大的 ...
- Elasticsearch 全教程
Elasticsearch 权威指南 在线阅读 国外自动指向 GITBOOK 项目 | 国内用户自动指向 阿里云 GITHUB 仓库 译者前言 译者现在的工作项目中需要用到 Elasticsearch ...
- Vue.js说说组件
什么是组件:组件是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.在较高层面上,组件是自定义的元素,Vue.js的编译器为它添加特殊功能.在有些情况下,组件也可以是原生HTM ...
- securityPolicy与安全策略等级配置
securityPolicy配置节是定义一个安全策略文件与其信任级别名称之间的映射的集合.配置如下所示 其中name是指定映射到策略文件的命名的安全级别,一般的值有Full,Hight,Medium, ...
- 【手记】未能从程序集System.Net.Http.Formatting中加载类型System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter
实际报错如图: 如果你跟我一样是在折腾Asp.Net WebApi 2.x时遇到这个问题,请参看如下办法: 删除现有System.Net.Http.Formatting引用(如果引用了的话) 重新引用 ...