使用Arduino搭建基于阿里云平台的物联网智能家居
使用Arduino搭建基于阿里云平台的物联网智能家居
-
- 1, 系统的主要功能
- 2, 必要的准备工作
- 3, 通过温湿度传感器读取数据后传输至云端系统管理端口
- 4, 由云端系统控制设备运行状态
- 5, 调用IoT Studio工具构建界面并展示交互界面
- 1, 系统的主要功能
1,实现的功能
这是一个融合软硬件技术的智能家居集成系统。用户可以通过手头拥有的PC和手机对家中或办公场所的部分硬件设备实施控制操作。该系统具备外网接入功能,在线用户可在不同地点通过 respective 网络手段进行设备管理:例如,在北京用手机流量控制上海设置WiFi连接的LED灯饰。让我们从零开始学习并构建这样一套物联网家居控制系统。
2,前期的准备工作
2.1 Arduino D1 wifi模块(WeMos D1)

这一款开发板的价格非常低廉,在市场上销售价最低。该开发板配备了 WiFi 模块。当然你可以选择其他型号的开发板。不过本项目采用了 Arduino D1 平台。后续内容将按照 Arduino D1 的标准进行介绍。
2.2 环境配置
下载Arduino IDE(下载教程略),接下来打开这个软件

启动运行程序后将自动完成ESP8266开发板包的安装过程,在Arduino IDE环境中。完成安装后系统界面将呈现预设的配置状态。
启动运行程序后将自动完成ESP8266开发板包的安装过程,在Arduino IDE环境中。完成安装后系统界面将呈现预设的配置状态。

在开发管理过程中会遇到ESP8266这一设备,在此处我们选择了WeMos D1 R1型号作为主控芯片。其余设备的选择可以根据我的配置图片进行设置。百度网盘下载地址:https://pan.baidu.com/s/11xX78XKHsYYIeCmulxHOkA 提取码:1111 安卓安装完成后,请通过安卓数据线将开发板与电脑进行连接。
注释:正常情况下应能在IDE中识别到该端口;如果确认连接至电脑,则即使线路及开发板均未出现问题也仍然无法识别新的串口

打开后选择安装即可。
在接下来的步骤中, 我们将设置阿里云平台环境参数, 启动Arduino IDE软件, 并前往其工具栏中的"Tools"菜单项下的"Library Manager"进行操作. 在软件工具包管理器(即Tools菜单栏中的Library Manager)中搜索并安装AliyunIoTSDK组件, 确保设备能够连接至云端物联网平台.

接下来搜索 ArduinoJson并安装

然后是 PubSubClient ,安装

接下来是 Crypto,安装

最后是 AWS-SDK-ESP8266,安装

将上面的库安装成功后打开阿里云的示例程序

代码
#include <ESP8266WiFi.h>
static WiFiClient espClient;
#include <ArduinoJson.h>
#include <AliyunIoTSDK.h>
AliyunIoTSDK iot;
#define PRODUCT_KEY "xxxxx"
#define DEVICE_NAME "Device_D"
#define DEVICE_SECRET "xxxxxxxxxxx"
#define REGION_ID "cn-shanghai"
#define WIFI_SSID "xxxxxx"
#define WIFI_PASSWD "xxxxxxxx"
void wifiInit(const char *ssid, const char *passphrase)
{
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, passphrase);
WiFi.setAutoConnect (true);
WiFi.setAutoReconnect (true);
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.println("WiFi not Connect");
}
Serial.println("Connected to AP");
}
void setup()
{
Serial.begin(115200);
wifiInit(WIFI_SSID, WIFI_PASSWD);
AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID);
// 绑定属性回调
AliyunIoTSDK::bindData("PowerSwitch", powerCallback);
}
unsigned long lastMsMain = 0;
void loop()
{
AliyunIoTSDK::loop();
if (millis() - lastMsMain >= 5000)
{
lastMsMain = millis();
// 发送事件到阿里云平台
AliyunIoTSDK::sendEvent("xxx");
// 发送模型属性到阿里云平台
AliyunIoTSDK::send("CurrentTemperature", 30);
}
}
void powerCallback(JsonVariant p)
{
int PowerSwitch = p["PowerSwitch"];
if (PowerSwitch == 1)
{
//
}
else
{
//
}
}
编译程序,提示编译成功

请前往阿里云物联网平台进行环境配置。访问 阿里云 网站的用户如果没有账号需要先注册,并在登录成功后建议在搜索栏中查找物联网平台信息。访问该服务前请注意:试用该服务仅需支付象征性的小费用,请确保填写正确的联系方式以便顺利获取试用资格。

点击创建的公共实例,点击创建产品


在该领域内我们强烈推荐您选择自定义品类别以确保您的产品属性更加合理和专业(hhh),创建成功后请立即准备完成相应的设备

点击前往添加

一旦设备创建完成,您将能够访问您的设备.状态指示灯未被点亮的原因是你尚未将设备与开发板进行连接.如果完成了一次成功的连接操作后,则该指示灯将始终保持在线或离线状态.

接下来点击查看

请在界面上标注 PRODUCT_KEY、DEVICE_NAME、DEVICE_SECRET 和 REGION_ID 等信息,并将其作为字段参数保存至程序对应位置
#include <ESP8266WiFi.h>
static WiFiClient espClient;
#include <ArduinoJson.h>
#include <AliyunIoTSDK.h>
AliyunIoTSDK iot;
#define PRODUCT_KEY "xxxxx"
#define DEVICE_NAME "Device_D"
#define DEVICE_SECRET "xxxxxxxxxxx"
#define REGION_ID "cn-shanghai"
#define WIFI_SSID "xxxxxx"
#define WIFI_PASSWD "xxxxxxxx"
regional_id标识阿里云实例所属的地域 请注意根据具体位置进行设置 如果您选择上海地区 请填写’shanghai’;在北京市则填写’beijing’ 等等
为了优化现有代码库的功能,请修改上一步下载的源代码文件;请访问本机Arduino设备中的[Arduino Library]文件夹;通常在软件说明书中详细说明了安装步骤。

进入library后找到PubSubClient文件夹


启动记事本以打开PubSubClient.h文件内部的宏定义MQTT_MAX_PACKET_SIZE和MQTT_KEEPALIVE,并将其大小设置为1024和60

返回至Arduino IDE进行程序重编译。
将修改好的代码发送至开发板。
一旦上传成功,则打开串口终端观察。
能够观察到与云端平台建立连接。
同时,在线状态已从未激活更新为已上线。
经过上述操作流程后系统已顺利完成配置。
3,使用温湿度模块,将读取到的温湿度上传至云平台
因为不同用户安装的温湿度模块种类不一

点击编辑草稿,添加自定义功能

请记住这里的标识符(最好是有条理和规律的),稍后Arduino程序需要用到那些特定的数值。

添加成功后切记要点击发布到上线状态,否则的话功能就未曾真正添加进去。
切换到Arduino IDE,这时大家需要根据自己的温湿度模块来读取温湿度参数,假设温度值为a1,湿度值为b1,变量类型均为float,上传数据代码应为
AliyunIoTSDK::loop();
if (millis() - lastMsMain >= 5000)
{
lastMsMain = millis();
AliyunIoTSDK::send("1111", a1);
AliyunIoTSDK::send("1112", b1);
}
其中AliyunIoTSDK::send("1111", a1);中的数字" )是开发过程中预先设定的一个标识符,在后续应用中具有特定含义。
随后重新编译程序并进行文件传输操作后,在云端平台能够接收到来自外部的数据反馈。
打开设备后会显示物模型数据信息,并参与我项目的各项核心功能实现。

4,从云平台控制设备
既然能够将数据传输至云端,则也能够将指令发送至开发板。以下将详细说明操作流程:首先,请您访问阿里云物联网平台;接着,在产品选项中选择相应的设备;随后,请您依次点击新增功能并按照提示完成配置;最后,在功能列表中找到对应的功能模块并进行参数设置。具体来说,在此处设置一个开关量即可实现对板载LED的状态控制。

选择读写类型的步骤是进行读写操作。重新编写并更新Arduino程序后,在线发布并完成更新流程。其中点亮的是带有_board LED_的小型指示灯。其对应的端口设置为2号位。值得注意的是,在设计电路时需特别关注该开发板的特色:其端口号并非直接继承自Arduino UNO的设计模式。

例如,在我的程序中定义了D1端口对应的GPIO值为3。
void powerCallback(JsonVariant p)
{
int PowerSwitch = p["1234"];
if (PowerSwitch == 1)
{
digitalWrite(2,LOW);
}
else
{
digitalWrite(2,HIGH);
}
}
同时应在setup中进行相应的定义
AliyunIoTSDK::bindData("1234", powerCallback);
再次编译程序后,请上传至开发板


选择light(自己定义的属性名),选择开,点击设置按钮

该系统将向操作反馈发送指令成功。当操作完成时,请查看开发板上的LED指示灯是否被点亮。类似地,在执行关闭操作时,请注意观察指示灯的状态是否已经断开了电源连接。


Arduino的全部代码
#include <ESP8266WiFi.h>
static WiFiClient espClient;
#include <ArduinoJson.h>
#include <AliyunIoTSDK.h>
AliyunIoTSDK iot;
#define PRODUCT_KEY "xxxxx"
#define DEVICE_NAME "Device_D"
#define DEVICE_SECRET "xxxxxxxxxxx"
#define REGION_ID "cn-shanghai"
#define WIFI_SSID "xxxxxx"
#define WIFI_PASSWD "xxxxxxxx"
void wifiInit(const char *ssid, const char *passphrase)
{
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, passphrase);
WiFi.setAutoConnect (true);
WiFi.setAutoReconnect (true);
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.println("WiFi not Connect");
}
Serial.println("Connected to AP");
}
void setup()
{
Serial.begin(115200);
wifiInit(WIFI_SSID, WIFI_PASSWD);
AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID);
// 绑定属性回调
AliyunIoTSDK::bindData("1234", powerCallback);//这里的标识码根据你在云平台的设定自己调整
}
unsigned long lastMsMain = 0;
void loop()
{
AliyunIoTSDK::loop();
}
void powerCallback(JsonVariant p)//这里的标识码根据你在云平台的设定自己调整
{
int PowerSwitch = p["1234"];
if (PowerSwitch == 1)
{
digitalWrite(2,LOW);
}
else
{
digitalWrite(2,HIGH);
}
}
至此点亮LED全部完成
5,使用IoT Studio设计美观的交互程序
我们刚刚实现了温湿度数据的读取以及LED灯的远程点亮。然而,在实际应用中,我们无法通过云平台来控制这些设备。值得高兴的是,阿里云为我们提供了丰富的接口,并且无需编写任何代码即可构建出一个优雅的前端界面。下面让我们介绍一下具体的流程吧!

进入之后选择" [ 项目的管理 ] " 选项(链接地址为 ' 普通项目的' '新增项目的' 和'建立新空白项目的'设置

创建成功之后web应用,点击新建


点击确定后会自动跳转到开发界面

单击左侧的组件图标;双击其中一个按钮,并将其拖动到画布区域中;单击右侧的"打开"按钮;单击左侧的交互区域进行操作。

根据功能需求进行设备属性参数设置时,请确保操作过程较为简便,“将按钮分别设为开启和关闭状态”。完成设置后请立即执行保存操作,并对设置效果进行预览。

一个简单的界面就诞生了,点击开,会发现LED亮,点击关会发现LED灯熄灭。
在保证控制的同时也可以展示数据信息。拖动左侧组件的仪表盘至画布区域。单击左侧配置数据源按钮。同样地,请选择您定义的功能项(例如温度、湿度等)。这样操作后, 开发板采集的数据会实时上传至云平台, 并在网页界面中实时显示

贴一张我项目的图片

在PC端开发的同时也可以在移动端开发,点击移动应用,新建

这里的开发流程同上,贴一张图

到此为止本次分享已顺利完成;至此大功告成!如需获取项目源码请随时与我联系;致以最诚挚的感谢!感谢诸位的关注与支持;此外如您认为本文对您有所裨益不妨一键三连表示赞赏!
