阿里云飞燕平台ESP8266温湿度检测demo

1.登录阿里云飞燕平台创建项目(此处连网方式选择为4G,实际为配置的wifi联网,在连接设备时免除配网的繁琐)

2.功能定义:进入产品创建物模型,主要是温度和湿度两个参数

3.人机交互:主要配置一下设备面板(选择面板-->编辑--->拖动相关功能即可)

image

4.设备调试:此处随便选择了一个模组,新增一个测试设备,记录三码

image

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后编译烧录后即可
image

查看设备的在线状态,数据是否传输成功
image

6.批量生产:进行产品发布

image

点击配网+App下载二维码
image
此处添加刚刚测试设备成功在线的devicename
下载APP和扫描二维码则会显示所见面板及同步数据。

posted @ 2022-08-23 15:59  zhazpx  阅读(833)  评论(1)    收藏  举报