#include <ESP8266WiFi.h> //安装esp8266arduino开发环境
static WiFiClient espClient;
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <CustomWiFiManager.h>
#include <ArduinoJson.h>
//引入 DHT 库
#include <DHT.h>
#include <AliyunIoTSDK.h> //引入阿里云 IoT SDK,需要安装crypto库、PubSubClient库
AliyunIoTSDK iot;
//设置产品和设备的信息,从阿里云设备信息里查看
#define PRODUCT_KEY "xxx" //替换自己的PRODUCT_KEY
#define DEVICE_NAME "xxx" //替换自己的DEVICE_NAME
#define DEVICE_SECRET "xxx" //替换自己的DEVICE_SECRET
#define REGION_ID "cn-shanghai" //默认cn-shanghai
unsigned long lastMsMain = 0;
int powerPin = 2;
#define DHTPIN 3 //GPIO3 RXD
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
bool waterShortage;//缺水状态
float targetHumidity;//目标湿度
enum FOGLEVEL{yidang = 1,erdang,sandang,sidang,wudang};//雾量档位
enum FOGLEVEL fogLevel;
enum MODE{zidong = 2,chushi = 13,shuimian = 14,zhienng = 32,putong = 39,biaozhun = 48};//模式
enum MODE mode;
int fog;//雾量
bool powerstate;//开关
float temperature;//温度
// web配网页面自定义我的图标请随便使用一个图片转base64工具转换https://tool.css-js.com/base64.html, 64*64
const char Icon[] PROGMEM = "data:image/png;base64,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";
void setup() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
//digitalWrite(LED_BUILTIN, LOW);
//开始连接WiFi
WiFiManager wifiManager;//实例化WiFiManager
wifiManager.setHeadImgBase64(FPSTR(Icon)); //设置图标
wifiManager.setPageTitle("ESP8266物联网设备WiFi配置页"); //设置页标题
wifiManager.autoConnect("ESP8266-IoT");// AP模式,可以修改成你的ESP8266WiFi热点名称
Serial.println("connected...恭喜!一切就绪。");
//初始化 iot,需传入 wifi 的 client,和设备产品信息
AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID);
dht.begin();
//绑定一个设备属性回调,当远程修改此属性,会触发函数
AliyunIoTSDK::bindData("powerstate", powerstate1);
AliyunIoTSDK::bindData("targetHumidity", targetHumidity1);
AliyunIoTSDK::bindData("waterShortage", waterShortage1);
AliyunIoTSDK::bindData("fog", fog1);
AliyunIoTSDK::bindData("fogLevel", fogLevel1);
AliyunIoTSDK::bindData("mode", mode1);
}
int test=0;
void loop() {
powerstate = !digitalRead(LED_BUILTIN);
AliyunIoTSDK::loop(); //必要函数
//发送数据的间隔,2秒发送一次,“云智能APP”上电源按钮的UI实时显示会有2秒延时。
if (millis() - lastMsMain >= 2000)
{
lastMsMain = millis();
//humidity = dht.readHumidity();
//temperature = dht.readTemperature();
AliyunIoTSDK::send("powerstate", powerstate);
//AliyunIoTSDK::send("temperature", temperature);
//AliyunIoTSDK::send("humidity", humidity);
//Serial.println(humidity);
//Serial.println(temperature);
test = test + 2;
}
delay(1000);
// 发送事件到阿里云平台
if (test > 180){
AliyunIoTSDK::sendEvent("filterExpired"); //滤芯寿命到期
Serial.println("滤芯寿命到期");
}
if (test == 360){
test = 0;
Serial.println("已更换滤芯");
}
// AliyunIoTSDK::sendEvent("filterExpired"); //滤芯寿命到期
}
//电源的属性修改的回调函数1
void powerstate1(JsonVariant L)//固定格式,修改参数l
{
bool i = (L["powerstate"]);//参数l
powerstate = not i;
Serial.printf("powerstate:"); Serial.println(powerstate);
digitalWrite(LED_BUILTIN, powerstate);
AliyunIoTSDK::send("powerstate", !digitalRead(LED_BUILTIN));
}
void targetHumidity1(JsonVariant L)//固定格式,修改参数l
{
targetHumidity = L["targetHumidity"];//参数l
Serial.printf("targetHumidity:"); Serial.println(targetHumidity);
AliyunIoTSDK::send("targetHumidity", targetHumidity);
}
void waterShortage1(JsonVariant L)//固定格式,修改参数l
{
waterShortage = L["waterShortage"];//参数l
Serial.printf("waterShortage:"); Serial.println(waterShortage);
AliyunIoTSDK::send("waterShortage", waterShortage);
}
void fog1(JsonVariant L)//固定格式,修改参数l
{
fog = L["fog"];//参数l
Serial.printf("fog:"); Serial.println(fog);
AliyunIoTSDK::send("fog", fog);
}
void fogLevel1(JsonVariant L)//固定格式,修改参数l
{
fogLevel = L["fogLevel"];//参数l
Serial.printf("fogLevel:"); Serial.println(fogLevel);
AliyunIoTSDK::send("fogLevel", fogLevel);
}
void mode1(JsonVariant L)//固定格式,修改参数l
{
mode = L["mode"];//参数l
Serial.printf("mode:"); Serial.println(mode);
AliyunIoTSDK::send("mode", mode);
}
esp8266 阿里云 加湿器 天猫精灵
该博客介绍了如何使用ESP8266开发板,通过阿里云IoT SDK实现设备连接与数据的发送与接收。首先,设置了WiFi连接和设备信息,然后利用阿里云IoT SDK进行初始化并绑定属性回调函数。在`loop()`函数中,定时发送数据到云端,并响应云端对设备状态的修改。此外,还展示了如何发送事件到阿里云平台,如滤芯寿命到期提醒。
摘要由CSDN通过智能技术生成