arduino接入阿里云_天猫精灵_云智能APP_RGB灯
鉴于很多平台的物联网设备数量都受到限制,比如说blinker,免费的只有5个,使用了物联网里的老大哥阿里云,性能稳定,生态完善,响应速度快。
首先感谢Esp8266接入阿里云_天猫精灵_云智能APP_控制LED_插座的详细教程以及各位大佬的点评,个人做了整理便于小白多多明白
水平有限,仅供参考
关于平台注意:
阿里云物联网平台
阿里云生活物联网平台
注意:这两个是不同的平台,阿里云物联网平台里面的设备包含了阿里云旗下所有的物联网平台设备,也就是说生活物联网平台是阿里云物联网平台的一个分支。
**注意:**两个平台一定要使用同一个账号(支付宝)
关于产品注册流程:
两个平台同时登陆,且同一账号;
创建项目
注意名字和类型
注意莫名字和连网方式
添加RGB对应的功能
注意选中公版APP,从现在开始,每完成一步必须保存一下
自定义面板
注意:RGB颜色
注意保存
重新选择刚刚的面板,确认
语言栏切勿存在空白
此时会自动开启天猫精灵
注意选择的模块型号
重新建设备
去程序里面修改你的密钥
先发布产品再下载APP进行扫码,
进入APP的更多服务里面绑定天猫精灵
注意:建议都用同一个手机号
配网,扫码
此时烧录完程序就可以去阿里云物联网平台 查看设备,不是同一账号不会自动同步的
完成以上步骤就可以呼叫天猫精灵了,也可以APP上操作
先到我的博客下载并添加库文件
下面代码,大佬请绕路。
// An highlighted block
#include <ESP8266WiFi.h> //安装esp8266arduino开发环境
#include <RGBConverterLib.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <CustomWiFiManager.h>
#include <ArduinoJson.h>
#include <AliyunIoTSDK.h> //引入阿里云 IoT SDK,需要安装crypto库、PubSubClient库
AliyunIoTSDK iot;
static WiFiClient espClient;
static RGBConverter espRGB;
//设置产品和设备的信息,从阿里云设备信息里查看
#define PRODUCT_KEY "xxxxx" //替换自己的PRODUCT_KEY
#define DEVICE_NAME "xxxxx" //替换自己的DEVICE_NAME
#define DEVICE_SECRET "xxxxx" //替换自己的DEVICE_SECRET
#define REGION_ID "cn-shanghai" //默认cn-shanghai
unsigned long lastMsMain = 0; //定时的时基
#define RGB_red 15 //对应引脚
#define RGB_green 12
#define RGB_blue 13
int RGB_bool = 0; //LED的开关状态
int RGBlan = 80; //LED的亮度 80%
int led_red = 127; //LED的默认颜色和亮度
int led_green = 255;
int led_blue = 212;
// web配网页面自定义我的图标请随便使用一个图片转base64工具转换https://tool.css-js.com/base64.html, 64*64
const char Icon[] PROGMEM = "data:image/png;base64,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";
// 开关
void powerstate(JsonVariant L) //固定格式,修改参数l
{
int powerstate = L["powerstate"]; //参数l
if (powerstate == 1) //板载led默认高电平,此时灯灭
{
//根据输入值调节各LED亮度
analogWrite(RGB_red, led_red);
analogWrite(RGB_green, led_green);
analogWrite(RGB_blue, led_blue);
RGB_bool = 1;
}
else
{
digitalWrite(RGB_red, LOW);
digitalWrite(RGB_green, LOW);
digitalWrite(RGB_blue, LOW);
RGB_bool = 0;
}
Serial.printf("收到的powerstate是:");
Serial.println(powerstate);
AliyunIoTSDK::send("powerstate", RGB_bool);
}
// 亮度
void brightness(JsonVariant L) //固定格式,修改参数2
{
RGBlan = L["brightness"]; //参数2
Serial.printf("收到的brightness是:");
Serial.println(RGBlan);
analogWrite(RGB_red, map(RGBlan, 0, 100, 0, led_red));
analogWrite(RGB_green, map(RGBlan, 0, 100, 0, led_green));
analogWrite(RGB_blue, map(RGBlan, 0, 100, 0, led_blue));
AliyunIoTSDK::send("brightness", RGBlan);
}
// 修改颜色
void RGBColor(JsonVariant L) //固定格式,修改参数2
{
led_red = L["RGBColor"]["Red"]; //参数1
led_blue = L["RGBColor"]["Blue"]; //参数2
led_green = L["RGBColor"]["Green"]; //参数3
String led_hex = "";
int RGB_color = 0;
char ch[20];
/*
Serial.print("Red:");
Serial.println(led_red);
Serial.print("Blue:");
Serial.println(led_blue);
Serial.print("Green:");
Serial.println(led_green);
*/
//根据输入值调节各LED亮度
analogWrite(RGB_red, led_red);
analogWrite(RGB_green, led_green);
analogWrite(RGB_blue, led_blue);
RGB_bool = 1;
//RGB的三值得十六进制的值,再转十进制进行上报颜色
espRGB.RgbToHex(led_red, led_green, led_blue, led_hex);
strcpy(ch, led_hex.c_str());
sscanf(ch, "%x", &RGB_color);
Serial.println(RGB_color);
AliyunIoTSDK::send("color", RGB_color); //上报数据
}
void setup()
{
Serial.begin(115200);
pinMode(RGB_red, OUTPUT);
digitalWrite(RGB_red, LOW);
pinMode(RGB_green, OUTPUT);
digitalWrite(RGB_green, LOW);
pinMode(RGB_blue, OUTPUT);
digitalWrite(RGB_blue, LOW);
//开始连接WiFi
WiFiManager wifiManager; //实例化WiFiManager
wifiManager.setHeadImgBase64(FPSTR(Icon)); //设置图标
wifiManager.setPageTitle("欢迎来到冷月满天的WiFi配置页"); //设置页标题
wifiManager.autoConnect("TP561-IoT-ESP"); // AP模式,可以修改成你的ESP8266WiFi热点名称
Serial.println("connected...恭喜!一切就绪。");
//初始化 iot,需传入 wifi 的 client,和设备产品信息
AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID);
//绑定一个设备属性回调,当远程修改此属性,会触发powerstate函数;天猫精灵控制的就是powerstate的高低电平(高 = 1,低 = 0)
AliyunIoTSDK::bindData("powerstate", powerstate);
AliyunIoTSDK::bindData("brightness", brightness);
AliyunIoTSDK::bindData("RGBColor", RGBColor);
delay(100);
//初始化开关和亮度
AliyunIoTSDK::send("powerstate", 0);
AliyunIoTSDK::send("brightness", RGBlan);
}
void loop()
{
//发送数据的间隔,2秒发送一次,“云智能APP”上电源按钮的UI实时显示会有2秒延时。
if (millis() - lastMsMain >= 2000)
{
AliyunIoTSDK::loop(); //心跳机制
lastMsMain = millis();
//发送电源状态到云平台(高电平:1;低电平:0)
AliyunIoTSDK::send("powerstate", RGB_bool);
}
}