产品推荐:阿里云物联网开发者工具(IoT Studio),立刻免费体验吧!
06 通过IOT控制变频器
之前,我们已经能够顺利的驱动变频器,并且能够与阿里云平台进行连接交互了
现在我们需要将两部分功能进行融合,使之能够通过阿里云的操作指令来执行变频器的对应动作
看代码:
#include <aliIotLink.h>
#include <ESP8266WiFi.h>
#include <ArduinoJson.h>
//变频器库部分
#include "deltaVDF.h"
deltaVDF VDF(1); //实例化一个变频器 MODBUS总线地址为1
const char* ssid = "OCROBOT";
const char* password = "jikegongfang";
static const char ProductKey[] PROGMEM = "a15mLG9bUxt";
static const char DeviceName[] PROGMEM = "uJCypeOEunEP4R5MJEar";
static const char DeviceSecret[] PROGMEM = "YXlW9wW2EYtXweZfwCZcUFbYhnDgnVr7";
static const char postTopic[] PROGMEM = "/sys/a15mLG9bUxt/uJCypeOEunEP4R5MJEar/thing/event/property/post"; //上报消息topic
static const char setTopic[] PROGMEM = "/sys/a15mLG9bUxt/uJCypeOEunEP4R5MJEar/thing/service/property/set"; //服务器消息topic
WiFiClient espClient; //实例化 wifi网络
PubSubClient client(espClient); //将网络传入MQTT
AliIotLink aliLink(client); //将mqtt传入服务
void working(uint16_t delayTime, float temps);
//回调函数
void Callbacks(char* topic, byte* payload, unsigned int length)
{
//消息解析
StaticJsonBuffer<256> jsonBuffer;
JsonObject& JsonData = jsonBuffer.parseObject(payload);
if (!JsonData.success()) //判断对象是否符合标准
{
return;
}
//JsonData["params"]["Frequency"]
JsonVariant frequency = JsonData["params"]["Frequency"]; //取出key中的消息;
JsonVariant direction = JsonData["params"]["direction"]; //取出key中的消息;
JsonVariant onoff = JsonData["params"]["onoff"]; //取出key中的消息;
bool directionData ;
if (frequency.success()) //如果频率消息存在
{
VDF.SetF(frequency.as<uint16_t>()); //将频率数据发送到变频器
}
if (direction.success()) //如果方向数据存在
{
directionData = direction.as<bool>(); //将方向数据缓存
}
if (onoff.success()) //启停数据存在
{
if (onoff.as<bool>() == 0)
{
VDF.stop(); //停止电机
}
else
{
VDF.run(directionData); //启动电机
}
}
}
void setup()
{
Serial.begin(9600, SERIAL_8E1); //初始化串口,参数为变频器配置参数
VDF.begin(Serial); //将串口对象传入变频器库
//初始化WIFI
WiFi.mode(WIFI_STA); // 接入端模式
WiFi.begin(ssid, password); //初始化并且链接wifi
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
}
//初始化阿里云
aliLink.subTopic(FPSTR(setTopic)); //订阅服务器下行消息
aliLink.setCallback(Callbacks); //注册下发消息回调函数
aliLink.begin(FPSTR(DeviceName), FPSTR(ProductKey), FPSTR(DeviceSecret)); //完成初始化配置 三元素(DeviceName,ProductKey,DeviceSecret)
}
void loop()
{
//阿里云链接维持
aliLink.loop();
if (aliLink.state() != 0) //错误消息打印
{
Serial.println(aliLink.state()); //返回平台链接消息代码
}
}
代码有一定的变动,因为我们不需要上报消息了。所以去掉了上报消息的部分,然后因为我们需要接受平台的反馈消息,所以我们启用了回调函数,并且将控制逻辑写在了回调函数中
下载完代码后,记得插回485模块
设备上线后,我们首先查看下设备的频率情况
设备上当前默认值是30HZ
我们使用阿里云IOT的设备在线调试功能
首先进入在线调试页面
选择频率,方法是设置,然后设置一个值,我们设定为5000(就是修改图上2500这个数,截图截错了。。囧)点击发送指令
发送指令后右侧会有日志记录
我们再来看设备端
当前设备频率已经被正确设定了
其他指令,包括启动停止均可进行在线调试,可以自己动手测试
演示视频
如此,我们就完整的实现了通过阿里云IOT的在线调试功能,通过协议指令来控制我们的工业设备,下一篇,我们来构建一个web可视化页面,通过鼠标交互的方式实现控制