Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 657|回复: 0

用Raspberry Pi搭建Azure IOT解决方案

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-7-7 12:29:39 | 显示全部楼层 |阅读模式

    Raspberry Pi是一款基于Linux的单板机电脑。它由英国的树莓派基金会所开发,目的是以低价硬件及自由软件刺激在学校的基本计算机科学教育。树莓派配备一枚博通(Broadcom)出产的ARM架构700MHz BCM2835处理器,256MB內存(B型已升级到512MB内存),使用SD卡当作存储媒体,且拥有一个Ethernet、两个USB接口、以及HDMI(支持声音输出)和RCA端子输出支持。树莓派只有一张信用卡大小,体积大概是一个火柴盒大小,可以运行像《雷神之锤III竞技场》的游戏和进行1080p视频的播放。操作系统采用开源的Linux系统如Debian、ArchLinux,自带的Iceweasel、KOffice等软件,能够满足基本的网络浏览、文字处理以及电脑学习的需要。

    当然Raspberry Pi也可以成为最佳的IOT的终端设备,通过传感器收集数据,以供后台系统进行分析等。

    一.Raspberry Pi的数据采集

    本文采用Raspberry Pi 2B,有4个USB接口,一个Ethernet接口,一个HDMI接口,一个MicroSD插槽,一个3.5毫米音频插孔和复合视频,摄像头接口(CSI),显示接口(DSI),另外还有一个40Pin的GPIO接口。

    我购买的淘宝链接:

    https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-11372085286.12.V3rWzS&id=522217122138

    价格在210元左右。

    另外,Raspberry Pi的传感器有多种多样。可以通过GPIO的接口进行连接。本文采用的是集成的传感器: Sense Hat。

    Sense Hat保护多种传感器:陀螺仪、加速度计、磁力仪、温度、气压、湿度。另外还包含一个8×8 RGB LED matrix和一个Joystick的活动手柄。

    我购买的淘宝链接为:

    https://item.taobao.com/item.htm?spm=a1z09.2.0.0.MivT32&id=522031087011&_u=7bp4gm8c97

    价格在240元左右。

    将Sense Hat与Pi连接,然后系统开机上电。默认的操作系统为Linux系统Raspbian,是从Debian演进来的。关于其由来可以参考:

    http://arstechnica.com/information-technology/2013/03/how-two-volunteers-built-the-raspberry-pis-operating-system/2/

    在Bash Shell中编写Python2.7的程序,获得温度传感器数据:

    #!/usr/bin/python

    from sense_hat import SenseHat

    sense = SenseHat()

    sense.clear()

    temp = sense.get_temperature()

    print(temp)

    运行此程序,可以在屏幕上打印目前的温度。

    同样,可以通过get_humidity()和get_pressure()等方法获得其他传感器的数值。

    具体的Sense-hat的各种python方法,请参考:

    https://pythonhosted.org/sense-hat/api/

     

    二.在Azure上创建Event Hub、Stream Analytics和SQL Azure DB

    1.创建Event hub:

    选择Custom create:

    填写相应的信息后输入:

    这样就创建了Event Hub的一个PaaS的服务。在配置中,创建一个Shared Access Policies:

    Save以后可以获得其SharedAccessKey:

    2.创建SQL Azure Database

    在Azure管理界面中选择SQL DB。在Server中选择Add:

    输入用户名和密码。创建SQL Server。

    然后选择创建SQL Database:

    创建好后,把本机的地址加入SQL的白名单:

    使用SQL的客户端连接数据库:

    在Options中选择数据库:

    登陆后创建table:

    Create table [dbo].[hwtest1] (

    Time Datetime2 (6) Null,

    DeviceId Varchar (16) Null,

    Temperature Float (53) Null,

    Humidity Float (53) Null

    );

    GO

    Create clustered index [hwtest1] on [dbo].[hwtest1] ([DeviceId] ASC);

    3.创建Stream Analytics

    创建成功后,在Input中添加Input:

    选择Event Hub:

    然后添加Event Hub的设置:

    在事件格式中选择JSON和UTF8

    创建Output:

    选择SQL Database,添加SQL的配置:

    在Query的设置中加入下面的配置:

    这里的DeviceId,Temperature,Humidity等参数必须在Python程序、Stream Analytics和SQL中相同。否则数据将不能取到。

    Input、Output和Query设置好后就可以启动此Job了。

    三.将Raspberry Pi的数据上传到Azure的Event Hub

    在Raspberry Pi上安装Azure的SDK:

    pip install azure

    安装完成后,更改Azure Service Bus的endpoint。请参考:

    https://msdn.microsoft.com/en-us/library/azure/dn578439.aspx

    对于Python的endpoint更改:

    在/usr/local/lib/python2.7/dist-packages/azure/servicebus/constants.py

    修改31行的配置

    #SERVICE_BUS_HOST_BASE = '.servicebus.windows.net'

    SERVICE_BUS_HOST_BASE = '.servicebus.chinacloudapi.cn'

     

    创建Python程序:

    #!/usr/bin/python

    from azure.servicebus import ServiceBusService

    from sense_hat import SenseHat

    from time import sleep

    import json;

    sense = SenseHat()

    sbs = ServiceBusService("hwtest", shared_access_key_name="hwtest", shared_access_key_value="xxxxxx=")

    while True:

    temp1 = sense.get_temperature()

    humi = sense.get_humidity()

    press = sense.get_pressure()

    temp= {'DeviceId': 'dev-01', 'Temperature': temp1, 'Humidity': humi}

    sbs.send_event('hwtest', json.dumps(temp))

    sleep(60)

    调试程序让其后台运行。

    四.查看数据

    Raspberry Pi运行后,数据将发送到Azure的Event Hub。

    在Pi上可以通过tcpdump查看是否有https的包发送:

    tcpdump port 443

     

    在Stream Analytics上可以查看事件的情况:

    如果既有input又有output,说明配置正常。

    在Sql客户端上查询:

    Select * from hwtest1;

    五.通过Excel和PowerBI对数据进行分析

    目前Raspberry Pi的数据已经上传到了Event Hub,经过Stream Analytics发送到了SQL Server的表中。用户的展现可以通过Exel,PowerBI实现。

    1.Exel的展现:

    在Excel中选择数据,选择"自其他来源",选择"来自SQL Server"。

    设置SQL Server:

    选择相应的数据库和相应的表:

    导入数据后,可以选择"插入",选择"数据透视图":

    在进行相应的选择后,将显示数据透视图:

    2.通过PowerBI实现展现

    打开网站: http://powerbi.microsoft.com

    下载Desktop的软件,进行安装。

    在客户端软件上进行SQL的连接配置:

    此时可以看到SQL中的表:

    选择import:

    选择相应的配置,就可以把数据以折线的形式展现出来:

    至此,所有的工作结束。

     

     

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-21 03:14 , Processed in 0.076378 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表