Arduino也疯狂①-----Esp8266通过阿里云向钉钉发送消息

本文主要讲述了arduino库文件安装,代码的书写,连接阿里云,与消息推送。

前段时间,有一个即将毕业的小姐姐(大概率) 询问怎样通过ESP8266连入云平台,所以推出这一期教程,可能已经迟了,但希望对后来者有所帮助。


一. 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服务及函数,当设备连入网络时,达到触发条件就可以看到钉钉的消息推送。

由此此项目已经全部开发完成。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

下一站是上岸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值