云中树莓派(1):环境准备

云中树莓派(2):将传感器数据上传到AWS IoT 并利用Kibana进行展示

1. 传感器安装及配置

1.1 DHT22 安装

DHT22 是一款温度与湿度传感器,它有3个针脚,左边的第一个引脚(#1)为3-5V电源,第二个引脚(#2)连接到数据输入引脚,最右边的引脚(#4)接地。

而树莓派3B 一共有40个针脚(GPIO,General Purpose I/O Ports,通用输入/输出端口),只需要将传感器的3个引脚接入板子上的合适引脚即可。我的连接是 1 - 01,2 - 07, 4 - 09。注意 DHT22的数据引脚连接的GPIO编号为 07名称为 GPIO04。下面的代码中会用到。

1.2 简单测试

安装代码库:

git clonehttps://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo apt-get update
sudo apt-get install build-essential python-dev
sudo python setup.py install

简单的python测试代码:

import Adafruit_DHT as dht
import time while True:
time.sleep(2.5)
h,t = dht.read_retry(dht.DHT22, ) #这里的 4 就指的是 GPIO04
print 'Temp = %.1f"C, Humidity = %.1f%%RH' % (t, h)

测试结果:

2. AWS IoT 实现

要实现的效果如下:

2.1 AWS IoT 配置

在 https://ap-southeast-1.console.aws.amazon.com/iot/home?region=ap-southeast-1#/thinghub 上做如下操作。

(1)创建 thing

(2)创建 thing 的证书,并下载

(3)创建 policy

policy 负责授权,上面的配置表示对所有资源都允许所有 aws iot 操作。

(4)将 policy 附加给第二步中创建的证书,将 thing 也附加给证书。

(5)创建一个 AWS ElasticSearch domain

(6)创建一条 rule,将树莓派传上来的数据导入 ElasticSearch

操作的具体配置:

几个配置项:

  • ID:ES 中每个文档的_id,这里使用自动生成的uuid
  • 索引:保存树莓派文档的索引,取名为 homepi,它是一个逻辑命名空间
  • 类型:索引下面的一个 type,表示对应树莓派的数据

2.2 树莓派中的配置

(1)安装 AWS IoT device python SDK

   git clone https://github.com/aws/aws-iot-device-sdk-python
cd aws-iot-device-sdk-python/
python setup.py install

(2)将 2.1 中下载到的四个证书上传到树莓派中

root@raspberrypi:/home/pi/awsiot# ls -lt
total
-rw-r--r-- pi pi Aug : VeriSign-Class3-Public-Primary-Certification-Authority-G5.pem
-rw-r--r-- pi pi Aug : aec2731afd-certificate.pem.crt
-rw-r--r-- pi pi Aug : aec2731afd-private.pem.key
-rw-r--r-- pi pi Aug : aec2731afd-public.pem.key

(3)编写代码

import RPi.GPIO as GPIO
import Adafruit_DHT as dht
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient
from time import sleep
from datetime import date, datetime # initialize GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup() # AWS IoT certificate based connection
myMQTTClient = AWSIoTMQTTClient("123afhlss411")
myMQTTClient.configureEndpoint("*************.iot.ap-southeast-1.amazonaws.com", )
myMQTTClient.configureCredentials("/home/pi/awsiot/VeriSign-Class3-Public-Primary-Certification-Authority-G5.pem", "/home/pi/awsiot/aec2731afd-private.pem.key", "/home/pi/awsiot/aec2731afd-certificate.pem.crt")
myMQTTClient.configureOfflinePublishQueueing(-) # Infinite offline Publish queueing
myMQTTClient.configureDrainingFrequency() # Draining: Hz
myMQTTClient.configureConnectDisconnectTimeout() # sec
myMQTTClient.configureMQTTOperationTimeout() # sec #connect and publish
myMQTTClient.connect()
myMQTTClient.publish("homepi/dht22", "connected", ) #loop and publish sensor reading
while :
now = datetime.utcnow()
now_str = now.strftime('%Y-%m-%dT%H:%M:%SZ') #e.g. --18T06::.877Z
h,t = dht.read_retry(dht.DHT22, ) #07 引脚的名称是 GPIO04
print 'Temp = %.1f"C, Humidity = %.1f%%RH' % (t, h)
payload = '{ "timestamp": "' + now_str + '","temperature": ' + "{:.2f}".format(t)+ ',"humidity": '+ "{:.2f}".format(h) + ' }'
print payload
myMQTTClient.publish("homepi/dht22", payload, )
sleep()

代码很简单,稍微解释一下:

  • 利用 AWS IoT device sdk 创建和 AWS IoT Core 的 MQTT 连接
  • 利用 DHT22 sdk 每隔10秒从传感器获取温度和湿度数据
  • 利用 AWS IoT device sdk 将数据发到 MQTT topic

(4)运行代码,在 AWS IoT 中进行测试,能够收到传上来的树莓派传感器数据

(5)在 ElasticSearch 中也能看到数据统计

2.3 配置 Kibana

AWS ElasticSearch 默认内置了一个 Kibana,可以在 ES 的界面上看到其链接。打开该链接,然后做以下配置:

(1)配置 index pattern

配置的目的是让 Kibana 定位到 ES 中的某个或者某几个 index。这里就是用 homepi 这个index。

(2)配置 Virsualize,然后就可以看到图了

话说最近家里气温一直都在30度以上,本来以为晚上会低点的。湿度倒是有一些变化。

3. 一点感受

  • github 是个好地方,大家分享的东西避免了大量重复造轮子的劳动
  • AWS free tier 是个好东西,做一些PoC测试基本上不用花钱,但是要注意得看清楚免费提供的资源的内容,否则钱不小心就花出去了,另外就是定期看看账单
  • AWS 文档实在太丰富了,一个文件动辄两三百页
  • AWS IoT 平台应该归类为 应用支持平台AEP(Application Enablement Platform),提供了设备接入(MQTT)、与AWS服务对接、数据分析、安全等内容。
  • AWS ElasticSearch 功能感觉还不是太全面,界面上能做的事情不多,权限管理有些复杂
  • 动手做,做了之后再分享,是一件蛮有意思的事情

参考链接:

欢迎大家关注我的个人公众号:

云中树莓派(2):将传感器数据上传到 AWS IoT 并利用Kibana进行展示的更多相关文章

  1. 【AllJoyn专题】基于AllJoyn和Yeelink的传感器数据上传与指令下行的研究

    接触高通物联网框架AllJoyn不太久,但确是被深深地吸引了.在我看来,促进我深入学习的原因有三点:一.AllJoyn开源,对开源的软硬件总会有种莫名的喜爱,虽然或许不会都深入下去:二.顺应潮流,物联 ...

  2. C#工业物联网和集成系统解决方案的技术路线(数据源、数据采集、数据上传与接收、ActiveMQ、Mongodb、WebApi、手机App)

    目       录 工业物联网和集成系统解决方案的技术路线... 1 前言... 1 第一章           系统架构... 3 1.1           硬件构架图... 3 1.2      ...

  3. Arduino UNO +ESP8266采集数据上传到贝壳网

    集成电路设计大赛赛程将至,我现在还是毫无头绪,然后又报了一个互联网+,比赛报了,东西就必须出来,时间很紧的情况下,所以选择了开源的arduino的进行完成.从开始接触Arduino到完成工程,前前后后 ...

  4. OneNET麒麟座应用开发之四:数据上传测试

    已经测试过OneNET麒麟座开发板了,这次来尝试与OneNET的连接和数据上传.这也是我们测试这块开发办的主要原因,因为在十几种我们有这种将分散的采集点数据上传到后台的需求. 先看看麒麟座这块开发板, ...

  5. PDA手持扫描资产标签,盘点完成后将数据上传到PC端,固定资产系统查看盘点结果

    固定资产管理系统介绍: 致力于研发条码技术.集成条码系统的专业性公司,针对客户的不同需求,提供一站式的企业条码系统解决方案:包括功能强大的软件系统.安全可靠的无线网络.坚固耐用的硬件系统.灵活易用的管 ...

  6. 如何优化 FineUI 控件库的性能,减少 80% 的数据上传量!

    在开始正文之前,请帮忙为当前排名前 10 唯一的 .Net 开源软件 FineUI 投一票: 投票地址: https://code.csdn.net/2013OSSurvey/gitop/codevo ...

  7. Octopus系列之数据上传格式要求说明

    各个数据列要求 价格列:字符串类型[美元价格] 产品名字:可以支持"/"等字符 分类名字:去空格处理 不得包含"&"符号 主图:一定要有主图列 不为空 ...

  8. 重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件

    [源码下载] 重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件 作者:webabcd 介绍重新想象 Windows 8.1 Sto ...

  9. C#数据上传方法

    /// <summary> /// 连接成功后开始调用数据上传程序 /// </summary> public void CallDataUpload() { //指定上传日期 ...

随机推荐

  1. UE4 C++ Tips

    篇写的是关于UE4的C++方面的小技巧: 1.在构造函数里 //构建组件 RootComponent = CreateDefaultSubobject<USceneComponent>(T ...

  2. oracle ZHS16GBK的数据库导入到字符集为AL32UTF8的数据库(转载+自己经验总结)

    字符集子集向其超集转换是可行的,如此例 ZHS16GBK转换为AL32UTF8. 导出使用的字符集将会记录在导出文件中,当文件导入时,将会检查导出时使用的字符集设置,如果这个字符集不同于导入客户端的N ...

  3. ajax解决跨域

    http://www.cnblogs.com/sunxucool/p/3433992.html 为什么会出现跨域跨域问题来源于JavaScript的同源策略,即只有 协议+主机名+端口号 (如存在)相 ...

  4. 【mybatis源码学习】mybtias基础组件-反射工具

    一.JavaBean的规范 类中定义的成员变量也称为字段,属性则是通过getter/setter方法得到的,属性只与类中的方法有关,与是否存在对应成员变量没有关系. 属性的getter/setter方 ...

  5. Compoxure example 应用说明

    Compoxure 官方提供了一个demo应用,包含了cache,error,layout 等功能 环境准备 demo 使用docker-compose 运行 clone 代码 git clone h ...

  6. hermes kafka 转http rest api 的broker 工具

    hermes 与nakadi 是类似的工具,但是设计模型有很大的差异,hermes 使用的是webhook的模式(push) nakadi 使用的是pull(event stream),各有自己解决的 ...

  7. kettle的资源库创建及修改密码

    在kettle中的转换或者作业等资源的存储的仓库称为资源库:分为文件资源库.数据库资源库. 一个转换或者作业可以属于某个资源库或者一个单独的文件形态存在. 一.数据库资源库 1.1在mysql中创建一 ...

  8. spring mvc 请求参数日期格式化 代码

    package com.sbl.pay.subaccount.converter; import java.text.DateFormat; import java.text.SimpleDateFo ...

  9. spring-boot-dependencies jar 不完整的问题

    集成 springboot 有两种方式. 1 直接 父项目指向  springboot <parent> <groupId>org.springframework.boot&l ...

  10. MySQL 绿色版安装Window 系统

    为了便捷安装现在网上提供了许多的绿色版本MySQL安装包,下载后解压即可使用,但是MySQL 下载直接运行还是有一点小问题,需要把MYSQL 注册成为系统服务: 1.下载mysql绿色版本 例如:my ...