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);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/276687.html
標籤:其他
