第4部分:如何在Google Cloud Platform上使用TICK Stack创建一个物联网项目

导航至

第4部分:将InfluxDB集成到物联网项目中

到目前为止,本系列已经介绍了InfluxDB是什么,如何在Google Compute Engine上设置InfluxDB主机,并编写了一个可以与之交互的Python应用程序。

本部分现在将上一节中编写的Python客户端应用程序代码与一个实际使用Arduino、温度传感器和InfluxDB作为数据库存储所有收集到的温度读数的物联网项目相结合。

首先,让我解释最终目标是什么,以及这是该过程中的第一步。目标是建立一系列低成本的气候/环境模块,捕获各种类型的数据,如温度、湿度等。然后将所有这些数据放入云中,我们最终可以构建仪表板、警报等。云中的所有好东西都将由InfluxDB提供支持。

现在,我们将解释一个设置,其中我们创建了一个由Arduino Uno、温度传感器、可以读取Arduino Uno数据的Python应用程序以及将数据发布到云中的系统。

硬件设置

我使用了以下设备

  • Arduino Uno 微控制器
  • LM35 温度传感器
  • 最终我们将有一个与Arduino接口以读取和传输值的Raspberry Pi,但为了验证事情,现在通过安装了Python的笔记本电脑/台式机为Uno供电。Uno和PC之间的通信是通过串行端口通信进行的。

Arduino Uno + 温度传感器设置

以下是LM35传感器连接到Arduino Uno板的方式。

lm35

当然,我们使用了面包板将这些连接在一起,但我在这里简化了图示,以便您知道哪些连接到哪些引脚。

LM35有3个引脚

  • 第一个引脚连接到Arduino的5V电源引脚
  • 第三个引脚是GND
  • 中间引脚是VOUT,它发出我们需要的捕获值。我们将其连接到Arduino的模拟引脚(A0)。然后我们可以编写Arduino代码来读取该值,如下所示。

Arduino代码

Arduino代码如下所示,非常简单

float temp;
int tempPin = 0;

void setup()
{
Serial.begin(9600);
}

void loop()
{
temp = analogRead(tempPin);
temp = temp * 0.48828125;
Serial.print(temp);
Serial.println();
delay(10000);
}

您会在循环中注意到,每10秒钟,我们都会打印出从模拟引脚(#0)读取的温度值。

如果您运行Arduino IDE附带的串行端口监视器,并且Arduino已上电并按图所示连接,那么您将找到以下所示的温度值被打印在串行监视器上

com15一旦发生这种情况,我们知道Arduino设置是好的,我们现在需要编写一个在PC上的客户端程序,该程序与Arduino接口,通过串行端口读取值,然后将这些值写入InfluxDB数据库。

现在我们可以将之前章节中用于写入InfluxDB数据库的代码集成到一起。集成后的代码如下所示

import serial
import datetime
from influxdb import InfluxDBClient

#Setup some constants with InfluxDB Host and Database name
INFLUXDB_HOST = '<PublicIPInfluxDBHost>'
INFLUXDB_NAME = 'temperature_db'

#Connect to Serial Port for communication
ser = serial.Serial('COM15', 9600, timeout=0)

#Setup a loop to send Temperature values at fixed intervals
#in seconds
fixed_interval = 10
while 1:
try:
 #temperature value obtained from Arduino + LM35 Temp Sensor
 temperature_c = ser.readline()
 #Timestamp
 timestamp = datetime.datetime.utcnow().isoformat()

 #Station Name that is recording the temperature
 station_name = "S2"

 #Initialize the InfluxDB Client
 client = InfluxDBClient(INFLUXDB_HOST,'8086','','',INFLUXDB_NAME)

 #Write a record
 json_data = [
     {
         "measurement":"temperature",
 "time":timestamp,
 "tags": {
     "Station":station_name
 },

 "fields": {
     "value":temperature_c
 }
     }
 ]

 bResult = client.write_points(json_data)
 print("Result of Write Data : ",bResult)
 time.sleep(fixed_interval)
except ser.SerialTimeoutException:
 print('Error! Could not read the Temperature Value from unit')
 time.sleep(fixed_interval)

这完成了集成。现在我们有一个端到端的物联网原型应用,它能够每10秒收集一次温度读数并将其存储在InfluxDB中。这只是天气站读取数据的一个例子。我们现在可以在整个城市部署多个这样的天气站。每个天气站都将有这个设置和代码,唯一的变化将是站名,它将被设置为特定的站名

因为我们已将站名作为标签创建,所以我们的InfluxDB设置现在可以帮助我们存储数据以及查询所有站点的数据,多个站点以及更多。

这完成了设置InfluxDB并将其与物联网项目集成的教程。

接下来是什么?

  • 在第五部分中,我们将调查TICK堆栈的其他部分,看看它如何帮助我们进一步收集和可视化我们要收集的传感器数据。我们还将了解如何根据数据中的某些阈值值设置警报。关注我们的Twitter @influxdb 以获取本系列博客的下一篇文章。
  • 想提升您的InfluxDB知识?查看我们经济实惠的虚拟公开培训