基于 Arduino 和 IoT 云平台搭建物联网系统

本文介绍了如何利用Arduino MKR1000、湿度传感器和IoT云平台Carriots构建物联网系统,监测土壤湿度并在湿度低于阈值时发送提醒。文章详细讲解了从连接传感器、配置云平台到集成IFTT服务的过程。

原文:Building an IoT System Using Arduino and IoT Cloud Platform
责编:屠敏,关注物联网、移动开发领域,寻求报道或投稿请发邮件tumin@youkuaiyun.com

在这篇文章中,我们将介绍如何搭建一款监测土壤水分的物联网系统,用于在土壤干燥时发出警报,提醒用户。本项目使用了 IoT 云平台来管理警报系统,同时存储来自传感器的数据。众所周知,物联网是当今热门话题之一,它将改变我们的未来及生活方式。如今我们可以自己动手搭建物联网系统,因为市场上已有一些原型板,这使得我们不用花费太多金钱及精力就可以着手物联网项目。

搭建 IoT 系统项目

构建这个项目,我们需要:

  1. Arduino MKR1000;
  2. 湿度传感器;
  3. IoT 云平台 Carriots 的免费账户(点击这里创建账户);
  4. IFFT 账户(点击这里,了解更多)。

该项目的核心理念是搭建一个监测土壤水分的 IoT 系统,勘测土壤的湿度。Arduino MKR1000 控制传感器向 Carriots IoT 平台发送数据。Carriots 平台反过来存储来自传感器的数据,并检测存储的值何时达到阈值。下文我们会分享如何分析数据。现在可以假设 Carriots IoT 平台能够以某种方式调用一个 IFFT 服务,并向用户发送一个提醒的短消息。构建该 IoT 系统,我们可以探索如何使用 IoT 生态系统的组件。此外,该项目使用 LED 矩阵显示湿度土壤状态。接下来,我们看看具体怎么搭建。

检测传感器数据

第一步,我们必须读取传感器数据。该 IoT 项目使用了 YL-38 + YL-69 传感器,这个是可以插入要检查的土壤中的模拟传感器。那么如何将传感器连接到 Arduino,如下所示:

代码很简单。我们 从A1 引脚读取数据,然后计算湿度:

float moistureHum = analogRead(A1);
moistureHum = (1023 - moistureHum) * 100 /1023;

此外,还需将 Arduino MKR1000 连接到互联网,以便它可以发送数据:

#include "WiFi101.h"
WiFiClient client;
void setup() {
  Serial.begin(9600);
  Serial.print("Starting...");
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    while (true);
  }
  connectToWifi();
}

connectToWifi() 包含:

void connectToWifi() {
  while ( status != WL_CONNECTED) {
   Serial.print("Attempting to connect to WPA SSID: ");
   Serial.println(ssid);
   // Connect to WPA/WPA2 network:
   status = WiFi.begin(ssid, pass);
   // wait 10 seconds for connection:
  delay(10000);
 }
}

这样,如以上代码所述,我们可以管理显示湿度的 LED 矩阵。接下来就聚焦于物联网云平台上。

连接到 IoT 云平台

在将数据发送到云端之前,我们必须配置 Carriots 平台才能管理数据。 Carriots 使用了分层结构来对设备进行分组和管理。因此,在使用设备之前,必须创建此结构。用户一旦登录,先点击“Hierarchy”,再点击“ Project”,填写所需的数据,如下图:

下一步创建服务,填写所需的数据:

最后,创建组:

以上的步骤只需做一次。最后一步是配置设备。它表示我们用来发送数据的物理设备。该设备属于在最后一步创建的组,组属于服务,服务属于项目。配置步骤非常简单,如下图所示:

至此,配置步骤已完成。我们需将 Arduino 设备连接到 Carriots 并开始发送数据。上图中,Id.developer 这个参数很重要,它代表了将来自 Arduino 设备的数据绑定到 Carriots 设备的唯一标识符。另一个重要参数是 API 密钥。你可以在设置>API密钥菜单中找到它。为了发送数据,我们将这个函数添加到上面的代码中:

void sendData(float data) {
  if (client.connect(server,80)) {
   Serial.println("Connected to the server....");
   String jsonData = "{\"protocol\":\"v2\",\"device\":\""+DEVICE_ID+
                     "\",\"at\":\"now\",\"data\":{\"soil\":\""+
                     String(data)+"\"}}";  // Make a HTTP request
  client.println("POST /streams HTTP/1.1");
  client.println("Host: api.carriots.com");
  client.println("Accept: application/json");
  client.println("User-Agent: Arduino-Carriots");
  client.println("Content-Type: application/json");
  client.print("carriots.apikey: ");
  client.println(API_KEY);
  client.print("Content-Length: ");
  int thisLength = jsonData.length();
  client.println(thisLength);
  client.println("Connection: close");
  client.println();
  client.println(jsonData);
 }
}

注意该函数发送一个包含从传感器读取的数据的 JSON 有效载荷。必须在 loop()方法中调用此函数。运行这个程序,我们可以发现设备向 Carriots 发送数据,如下所示:

监控物联网传感器数据

接下来是监控数据。通常在物联网系统中,我们不仅希望从传感器获取数据,而且当这些值超出特定值时,我们希望监视这些信息以采取完善措施。本项目中,当土壤太过干燥时,我们要告知用户。虽然 Carriots 拥有内置的电子邮件系统,但我们更倾向于与 Carriots 集成的另一个有用的平台,即 IFFT。该平台提供了多种集成服务。

为了提醒用户,我们需要两个组件:

  1. 监控数据系统;
  2. 警报系统。

作为监控数据系统,本 IoT 系统项目使用 Carriots 监听器。监听是分析输入值及应用特定规则的一个过程。当规则被验证时,它就会调用一个脚本。对于 Carriots 的有趣方面是,我们可以使用 Groovy 作为脚本语言来调用外部服务。

警报系统建立在 IFFT 上。在完成 Carriots 的任务之前,配置 IFFT 非常有必要。如上所述,当湿度达到阈值时,我们想要发送一条短消息提醒用户。为了实现这个功能,需要在 IFFT 中配置一个短消息服务。在此之前,我们需要一个免费的帐户。那么首先我们创建一个新的 Applet:

点击“+”添加服务并搜索“Maker”服务:

选择“Maker webhooks”来启用 IoT Maker。接下来配置 maker 服务,并填入触发发送消息进程的事件名称:

最后,启动发送消息服务,配置所有必需的参数,如目标号码和消息体:

现在,我们来看一下 Carriots 平台的监听器。首先创建一个新的监听器,调用与之前刚创建的 Applet 相关的 URL。当监听器调用 URL 时,IFFT 发送一条短消息。配置监听器流程如下图所示:

最后一步是配置表达式。我们可以使用 Groovy 写这个案例。

综上,我们可以验证当土壤水分低于阈值水平时,手机上是否会收到一条短信。

总结

通过本文,相信大家已经学会了如何使用传感器、Arduino 和 IoT 云平台构建 IoT 系统。也正如本文所述,我们可以集成现有的平台和服务来构建一款 IoT 系统。


2017年7月1日(星期六),「【在线峰会】一天掌握物联网全栈开发之道」将在 优快云 学院召开,集结来自物联网领域的一线专家,从整体架构、技术栈、应用开发平台到实战经验与安全方案,希望通过一天的时间,帮助开发者快速掌握物联网全栈开发之道,也为所有对物联网感兴趣的软件开发者、嵌入式开发人员以及希望从互联网技术背景转入物联网的开发人员提供一个良好的学习晋升平台。五折优惠倒计时5天,火热报名中,欲购从速,详情点击注册参会

【RT-Thread作品秀】基于物联网云平台的智能环境监测设计作者:赵帅 概述智能环境监测系统基于 STM32H7系列芯片开发,通过光照传感器与温湿度传感器采集环境中的光照与温湿度数据,通过WIFI将系统采集到的环境数据实时的上传至物联网云平台,也可以通过PC端软件实时的监控环境数据。该系统适用于家庭、办公室、教室等场所的进行环境监控,该系统具有实时性高、功耗低,丢包率低,随时随地监控数据等特点,是一个实用的设计。 开发环境下位机:硬件:stm32f407-atk-explorer 扩展板:DHT11温湿度传感器,BH1750光照传感器,板载AP6212 WIFI模块 RT-Thread版本:RT-Thread V 4.0.3 开发工具及版本:RT-Sudio 上位机: Qt版本:Qt5 开发工具:Qt Creator4.11.0 RT-Thread使用情况概述内核部分:调度器,信号量,事件集 调度器:创建多个线程来实现不同的工作。 信号量:用来同步线程。 事件集:通知数据采集完成 组件部分:IIC框架, Sensor框架,SAL 套接字抽象层 IIC框架:驱动光照传感器,获取光照强度数据 Sensor框架:将温湿度传感器注册到sensor上。使用该框架提高了代码的复用性。 SAL套接字抽象层:该组件实现了对不同网络协议栈或网络实现接口的抽象,并对上层提供一组标准的API接口,方便网络应用的开发与稳定性。 软件包部分: cJSON:C语言实现的极简的解析 JSON 格式的软件包。 Onenet:RT-Thread 针对 OneNET 平台连接做的的适配,通过这个软件包,可以让设备在 RT-Thread 上非常方便的连接 OneNet 平台,完成数据的发送、接收、设备的注册控制等功能。 pahomqtt,:本软件包是在 Eclipse paho-mqtt 源码包的基础上设计的一套 MQTT 客户端程序。 Webclient:提供设备与 HTTP Server 的通讯的基本功能。 硬件框架使用stm32h7做为系统主控,通过外接dht11传感器、bh1750传感器来采集外界的温湿度数据与光照强度。 使用AP6211wifi模块,实现设备的联网,以及连接云平台的功能。 软件框架说明下位机流程图: 上位机流程图: 上位机数据的获取是通过调用OneNet云平台的API接口来获取数据,因此需要使用HTTP协议。在QT中,QNetworkAccessManager类可以完成基于HTTP协议的数据传输。既可以向网络发送请求,也可以接收网络的应答。但是,具体的网络请求需要通过QNetworkRequest类实现,网络的应答通过QNetworkReply类来实现。在数据获取成功之后,通过调用QT中JSON相关的API函数,根据数据格式匹配出相应的环境数据。之后发送dataSignal()信号,执行setVallue槽函数将数据显示在用户界面上。通过定时器来定时发送get请求,实现数据实时更新的目的。流程图如下图所示。 软件模块说明art_mqtt_init_entry:初始化 mqtt,初始化成功后,释放信号量,通知ArtOneNetUploadThread线程可以向OneNet发送数据。 art_onenet_upload_entry:线程接收到事件后,将数据发送至OneNet云平台 art_dht11_read_entry:温湿度数据采集线程,采集到数据后发送事件 art_bh1750_read_entry:光照采集线程,采集到数据后发送事件 演示效果演示视频 代码地址(附件为代码地址,下载后打开可见)比赛感悟通过这次RT-Thread x STM32 全连接创意创客大赛,增加了我的实际动手能力。 在这次比赛中,通过 RT-Thread官网上的文档中心,让我学到了多线程及其调度、信号量、邮箱、消息队列、内存管理、定时器等知识点,也了解了多线程的编程技术。通过这次比赛,让我对这些知识点有了进一步的理解。 由于rt-thread提供了各种传感器相关的软件包支持,这是使我能够快速完成一个项目的重要原因。如果没有这些软件包,项目到开发将不会如此之快。感谢rt-thread社区提供的开源软件包。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值