阿里云飞燕平台ESP8266温湿度检测demo
1.登录阿里云飞燕平台创建项目(此处连网方式选择为4G,实际为配置的wifi联网,在连接设备时免除配网的繁琐)
2.功能定义:进入产品创建物模型,主要是温度和湿度两个参数
3.人机交互:主要配置一下设备面板(选择面板-->编辑--->拖动相关功能即可)
4.设备调试:此处随便选择了一个模组,新增一个测试设备,记录三码
5.设备的烧录,使用软件Arduino
烧录代码如下,期间会少很多的库,点击工具-->管理库,一一补充即可
点击查看代码
#include <ESP8266WiFi.h> //安装esp8266arduino开发环境
#include <AliyunIoTSDK.h> //引入阿里云 IoT SDK
#include <Ticker.h> //定时操作
#include <DHT.h>
#include <math.h>
//设置产品和设备的信息,从阿里云设备信息里查看
#define PRODUCT_KEY ""//替换自己的PRODUCT_KEY a1hwb9O09Ou
#define DEVICE_NAME ""//替换自己的DEVICE_NAME
#define DEVICE_SECRET ""//替换自己的DEVICE_SECRET
#define REGION_ID "cn-shanghai"//默认cn-shanghai d12bdd17804cc87177d5c575993495a4
#define WIFI_SSID ""//替换自己的WIFI
#define WIFI_PASSWD ""//替换自己的WIFI
int LEDB=2;
//设置温湿度传感器
#include "DHT.h"
#define DHTPIN 5
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
static WiFiClient espClient;
int Data = 0; //定义要上传的数据
int count = 0; //定义一个计数值
boolean powerstate = true; //定义要上传的数据
double CO2 = 0; //定义要上传的数据
double HCHO = 0; //定义要上传的数据
double humidity = 0; //定义要上传的数据
double temperature = 0; //定义要上传的数据
Ticker ticker; //建立Ticker用于实现定时功能
void setup()
{
Serial.begin(115200);
dht.begin();
pinMode(LEDB, OUTPUT);
digitalWrite(LEDB, HIGH);
wifiInit(WIFI_SSID, WIFI_PASSWD); //连接到wifi
delay(3);
//ticker.attach(1,myfunction); //相当于定时器中断函数,一秒执行一次myfunction这个函数
//初始化 iot,需传入 wifi 的 client,和设备产品信息
AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID);
//绑定一个设备属性回调,当远程修改此属性,会触发LED函数
AliyunIoTSDK::bindData("powerstate", LED);
//AliyunIoTSDK::bindData("activeWakeupTime", activetime);
//AliyunIoTSDK::bindData("enterSleepAfterTime", sleeptime);
AliyunIoTSDK::send("CO2", 0.11); //发送数据
AliyunIoTSDK::send("HCHO", 0.05); //发送数据
AliyunIoTSDK::send("humidity", 60); //发送数据
AliyunIoTSDK::send("temperature", 25); //发送数据
}
void loop()
{
AliyunIoTSDK::loop();//必要函数
delay(2000);
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t))
{
Serial.println("Failed to read from DHT sensor!");
}
else
{
Serial.print(F("Humidity: "));
Serial.print(h);
Serial.print(F("% Temperature: "));
Serial.print(t);
Serial.println(F("°C "));
}
/**每隔5秒上传一次数据**/
//AliyunIoTSDK::send("powerstate", powerstate); //发送数据
AliyunIoTSDK::send("humidity", h); //发送数据
AliyunIoTSDK::send("temperature", t); //发送数据
}
//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");
}
//灯的属性修改的回调函数
void LED(JsonVariant p)//固定格式,修改参数l
{
int LED = p["powerstate"];//参数l
if (LED == 0)
{
digitalWrite(LEDB, HIGH);
}
else
{
digitalWrite(LEDB, LOW);
}
Serial.printf("收到的LED是:"); Serial.println(LED);
}
void myfunction(){
//Data ++;
//count ++;
//if(Data >= 50)Data = 0;
if(powerstate)
digitalWrite(LEDB, HIGH);
else
digitalWrite(LEDB, LOW);
delay(2);
}
烧录成功,设备则会显示在线状态,如果没有烧录成功没有显示在线状态,在串口处查看 提示mqtt connect err:2请参考此链接
https://blog.csdn.net/YY646929594/article/details/125708124
找到PubSubClient.h头文件,打开找到MQTT_MAX_PACKET_SIZE,将256修改为1024,再找到MQTT_KEEPALIVE,将15修改为40后编译烧录后即可
查看设备的在线状态,数据是否传输成功
6.批量生产:进行产品发布
点击配网+App下载二维码
此处添加刚刚测试设备成功在线的devicename
下载APP和扫描二维码则会显示所见面板及同步数据。