一. Arduino 库文件下载与代码书写
1.Arduino配置
首先一定要下载arduino,笔者是在官网下载的,感觉速度不慢,所以就不附上下载安装包了。打开arduino,然后点击文件>>首选项
找到附加开发板地址>>
点击箭头处,添加以下内容 http://arduino.esp8266.com/stable/package_esp8266com_index.json
添加之后>>点击完成>>点击工具>>点击开发板管理器
打开完成后,在搜索栏搜索ESP8266,就会出现,选择一个最新版本安装即可,在写本文时,笔者已经完成安装。
当开发板相关文件安装完成后,开始下载本次需要用到的库文件。点击工具>>管理库
然后在搜索栏依次搜索 Arduinojson、AliyunIoSDK、PubSubClient、Crypyo、AWS-SDK-ESP8266。依次选择版本安装就OK啦。
其次在PubSubClient.h修改默认的值
红色的两行的值,修改为笔者的值。。。。。。。。。。。。。。。
2.Arduino代码书写
#include <ESP8266WiFi.h>
static WiFiClient espClient;
/*温湿度*/
#include "DHT.h"
#define DHTTYPE DHT11
#define dht_dpin D4
DHT dht(dht_dpin, DHTTYPE);
/*阿里云SDK*/
#include <AliyunIoTSDK.h>
/*配置阿里云设备信息*/
#define PRODUCT_KEY "xxxxx" //产品KEY
#define DEVICE_NAME "xxxxxx" //设备名字
#define DEVICE_SECRET "xxxxx" //设备密钥
#define REGION_ID "xxxxx" //连接服务器
/* 配置WIFI */
#define WIFI_SSID "xxxxxx"//wifi名称
#define WIFI_PASSWD "xxxx"//wifi密码
void setup()
{
Serial.begin(9600);
dht.begin();
// 初始化WIFI
wifiInit(WIFI_SSID, WIFI_PASSWD);
// 传入WIFI-client 设备产品信息
AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID);
//AliyunIoTSDK::send("temperature", t); 如有需要可发送模拟数据
}
void loop()
{
AliyunIoTSDK::loop();
int humidity = dht.readHumidity();
double temperature = dht.readTemperature();
AliyunIoTSDK::send("temperature", temperature);
AliyunIoTSDK::send("humidity", humidity);
delay(800);
}
// 初始化 wifi 连接
void wifiInit(const char *ssid, const char *passphrase)
{
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, passphrase);
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.println("WiFi not Connect");
}
Serial.println("Connected to AP");
}
二.阿里云相关配置
首先要进入阿里云云平台>>注册账号>>查看资费说明>>登录账号
然后打开控制台>>物联网平台>>公共实例>>创建产品
在名称成处输入自己想的名字,根据需要选取标准品类,笔者在此处选择的是:智能生活>>温湿度采集单元。其他的方式不需要更改,点击确认。
接下来是为产品定义物模型或者添加设备,笔者在这里先定义物模型(在此之前,物模型定义存在bug,但已经向阿里官方提交了工单,已经解决了!所以大家可以放心使用。)
点击编辑草稿,就可以进入物模型定义啦! 笔者选择的是自定义功能,因为标准功能的温湿度数据结构是int-32整形,但是在日常生活中大家最常见的都是带一位小数的float型。所以,在此笔者新建了两个float型的温度检测、湿度检测。最重要的是一定要发布上线,不然所做的更改无法保存。物模型发布成功后点击设备开发,会出现设备信息,输入DeviceName,当前任务就大功告成啦!
烧录上面的代码,记得全部修改为自己的信息,尤其是三元组。再刷新一下页面,就可以看到设备处于已激活状态啦。
然后回到控制台搜索函数计算,点击服务及函数,先创建一个服务,自行命名即可。在此就要配置api接口了,所以先打开钉钉,新建一个工作群,然后添加一个自定义群助手,开启消息推送,然后复制Webhook里的acess token(token = 后面的部分。)自定义关键词,保证数据可以发送成功,同时防止接收其他消息。
然后返回控制台创建函数,>>从零开始创建,输入函数名称,选择通过ZIP包上传代码,此时触发器已经自动配置,所以不需要再做改变,上传ZIP包。
首先创建一个空白TXT文件,然后复制笔者以下代码。
const https = require('https');
const accessToken = '填写accessToken,即钉钉机器人Webhook的access_token值';
module.exports.handler = function(event, context, callback) {
var eventJson = JSON.parse(event.toString());
//钉钉消息格式
const postData = JSON.stringify({
"msgtype": "markdown",
"markdown": {
"title": "温湿度传感器",
"text": "#### 温湿度传感器上报\n" +
"> 设备位置:" + eventJson.tag + "\n\n" +
"> 设备编号:" + eventJson.isn+ "\n\n" +
"> 实时温度:" + eventJson.temperature + "℃\n\n" +
"> 相对湿度:" + eventJson.humidity + "%\n\n" +
"> ###### " + eventJson.time + " 发布 by \n"
},
"at": {
"isAtAll": false
}
});
const options = {
hostname: 'oapi.dingtalk.com',
port: 443,
path: '/robot/send?access_token=' + accessToken,
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(postData)
}
};
const req = https.request(options, (res) => {
res.setEncoding('utf8');
res.on('data', (chunk) => {});
res.on('end', () => {
callback(null, 'success');
});
});
// 异常返回
req.on('error', (e) => {
callback(e);
});
// 写入数据
req.write(postData);
req.end();
};
填入自己的token,然后保存压缩,最后上传代码ZIP包就可以了。上传完毕后,点击函数名字,进入到对应界面,点击部署代码。
点击规则引擎>>云产品流转(在此会又=有新旧版本之分)。
旧版本操作如下:创建规则>>输入规则名称>>编写sql。
SELECT deviceName() as deviceName, attribute('tag') as tag, attribute('deviceISN') as isn, items.temperature.value as temperature, items.humidity.value as humidity, timestamp('yyyy-MM-dd HH:mm:ss') as time
FROM "/a1hcsPta7af/TH_Sensorthing/event/property/post"
WHERE things_property('humidity') > 50
按照笔者以上字段填写即可。 然后再新建一个规则,操作同上,修改WHERE 为things_property('temperature') >30。
分别对以上规则里面的转发数据进行配置,>>发布到函数计算FC中>>选择地域>>选择服务>>选择函数版本模块,默认即可,然后选择函数(在此之前已经配置好,选择时会自动弹出),选择授权的RAM角色。点击确认,这一步就进行完成了。
新版本操作如下:创建解析器>>创建数据源>>创建数据目的。
按照步骤推进,选项还是旧版的选项。
至此开始新的工作,下载node.js,官网免费开源,下载安装完毕后,新建一个JavaScript文件,存放一下以下代码。
const mqtt = require('aliyun-iot-mqtt');
// 1. 设备身份信息
var options = {
productKey: "",
deviceName: "",
deviceSecret: "",
regionId: 'cn-shanghai'
};
// 1. 建立连接
const client = mqtt.getAliyunIotMqttClient(options);
// 2. 监听云端指令
client.subscribe(`/${options.productKey}/${options.deviceName}/user/get`)
client.on('message', function(topic, message) {
console.log("topic " + topic)
console.log("message " + message)
})
setInterval(function() {
// 3.上报数据
client.publish(`/sys/${options.productKey}/${options.deviceName}/thing/event/property/post`, getPostData(), { qos: 0 });
}, 6 * 1000);
function getPostData() {
const payloadJson = {
id: Date.now(),
version: "1.0",
params: {
Temperature: Math.floor((Math.random() * 20) + 10),
Humidity: Math.floor((Math.random() * 20) + 10)
},
method: "thing.event.property.post"
}
console.log("payloadJson " + JSON.stringify(payloadJson))
return JSON.stringify(payloadJson);
}
按照自己的设备三元组修改信息,将此文件保存到自己能找到的地方。
然后Win + R ,输入cmd,打开控制台窗口,cd指令打开刚才JavaScript文件保存的位置,输入以下指令,下载MQTT文件。
npm install aliyun-iot-mqtt -S
在控制台启动刚刚保存的代码,等待上报数据。
启动之前已经配置好的规则,与函数计算FC服务及函数,当设备连入网络时,达到触发条件就可以看到钉钉的消息推送。
由此此项目已经全部开发完成。