找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5719|回复: 1
收起左侧

ESP32链接阿里云物联网平台 源程序分享

[复制链接]
ID:562529 发表于 2019-6-16 15:53 | 显示全部楼层 |阅读模式
# ESP32DevkitC + LED + 阿里云物联网平台
这个Demo通过一个云端可控制的LED灯程序和采集单片机的温度湿度等信息,向您展示了如何快速开发LED和采集单片机的温度湿度上云程序。
开发运行本Demo请使用ESP32DevkitC开发板和阿里云IoT推出的在线设备开发Web IDE [Hacklab](https://hacklab.aliyun.com).



#include <Arduino.h>
#include <ArduinoJson.h>
#include <aliyun_mqtt.h>
#include <WiFi.h>

#include "user_dht.h"

#include <lcd.h>

started-with-wifi/
//#define WIFI_SSID "WIFI_SSID"
//#define WIFI_PASSWD "WIFI_PASSWD"

#define WIFI_SSID "WIFI_SSID"
#define WIFI_PASSWD "WIFI_PASSWD"

DHT11 dht11(21);
LCD lcd;
uint16_t

temperature=0,humidity=10,speed0=20,other=30;
#define  dustPin  35  //定义风速传感器----adc采集引脚


#define PRODUCT_KEY "XXXXXXX"
#define DEVICE_NAME "XXXXXXX"
#define DEVICE_SECRET   "XXXXXXXXXXXXXX"




#define ALINK_BODY_FORMAT "{\"id\":\"%u\",\"version\":\"1.0\",\"method\":\"%s\",\"params\":%s}"
#define ALINK_TOPIC_PROP_POST "/sys/" PRODUCT_KEY "/" DEVICE_NAME

"/thing/event/property/post"
#define ALINK_TOPIC_PROP_SET "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/service/property/set"
#define ALINK_METHOD_PROP_POST "thing.event.property.post"

#define

LED 2

#define LED_OFF 0
#define LED_ON 1
int ledState = LED_OFF;
bool needReportStatus = true;
int ledStateMapOutput[2] = {HIGH, LOW}; // ESP32Devkitc built-in LED output flip
// int

ledStateMapOutput[2] = {LOW, HIGH}; // FireBeetle built-in LED output flip

unsigned long lastMqttConnectMs = 0;

unsigned int postMsgId = 0;

unsigned int airTemp=10,Humidity=20,WindSpeed=30;

WiFiClient espClient;
PubSubClient mqttClient(espClient);

String translateEncryptionType(wifi_auth_mode_t encryptionType) {

  switch (encryptionType) {
    case (WIFI_AUTH_OPEN):
      return

"Open";
    case (WIFI_AUTH_WEP):
      return "WEP";
    case (WIFI_AUTH_WPA_PSK):
      return "WPA_PSK";
    case (WIFI_AUTH_WPA2_PSK):
      return "WPA2_PSK";
    case

(WIFI_AUTH_WPA_WPA2_PSK):
      return "WPA_WPA2_PSK";
    case (WIFI_AUTH_WPA2_ENTERPRISE):
      return "WPA2_ENTERPRISE";
  }
}

void scanNetworks() {

  int numberOfNetworks = WiFi.scanNetworks

();

  Serial.print("Number of networks found: ");
  Serial.println(numberOfNetworks);

  for (int i = 0; i < numberOfNetworks; i++) {

    Serial.print("Network name: ");
    Serial.println

(WiFi.SSID(i));

    Serial.print("Signal strength: ");
    Serial.println(WiFi.RSSI(i));

    Serial.print("MAC address: ");
    Serial.println(WiFi.BSSIDstr(i));

    Serial.print("Encryption

type: ");
    String encryptionTypeDescription = translateEncryptionType(WiFi.encryptionType(i));
    Serial.println(encryptionTypeDescription);
    Serial.println("-----------------------");



}
}

void connectToNetwork() {
  WiFi.begin(WIFI_SSID, WIFI_PASSWD);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Establishing connection to WiFi..");
  }



Serial.println("Connected to network.");

}

void mqttCheckConnect()
{
  bool connected = connectAliyunMQTT(mqttClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET);
  if (connected) {


Serial.println("MQTT connect succeed!");
    if (mqttClient.subscribe(ALINK_TOPIC_PROP_SET)) {
      Serial.println("subscribe done.");
    } else {
      Serial.println("subscribe failed!");


}
  }
}

void mqttPublish()
{
  char param[70];
  char jsonBuf[180];

  airTemp++;
  Humidity++;
  WindSpeed++;

  sprintf(param, "{\"LightSwitch\":%d,\"airTemp\":%d,\"Humidity\":%d,\"WindSpeed\":%d}",

ledState,airTemp,Humidity,WindSpeed);

  //sprintf(param, "{\"LightSwitch\":%d}", ledState);
  //sprintf(param, "{\"airTemp\":%d}", ledState);
  //sprintf(param, "{\"LightSwitch\":%d}",

ledState);
  postMsgId += 1;
  sprintf(jsonBuf, ALINK_BODY_FORMAT, postMsgId, ALINK_METHOD_PROP_POST, param);

  if (mqttClient.publish(ALINK_TOPIC_PROP_POST, jsonBuf)) {
     Serial.print("Post

message to cloud: ");
     Serial.println(jsonBuf);
  } else {
    Serial.println("Publish message to cloud failed!");
  }
}

void mqttPublish_data1()
{
  char param[70];
  char jsonBuf[180];



sprintf(param, "{\"LightSwitch\":%d,\"airTemp\":%d,\"Humidity\":%d,\"WindSpeed\":%d}", ledState,temperature,humidity,speed0);

  postMsgId += 1;
  sprintf(jsonBuf, ALINK_BODY_FORMAT,

postMsgId, ALINK_METHOD_PROP_POST, param);

  if (mqttClient.publish(ALINK_TOPIC_PROP_POST, jsonBuf)) {
     Serial.print("Post message to cloud: ");
     Serial.println(jsonBuf);
  } else {


Serial.println("Publish message to cloud failed!");
  }
}

void callback(char* topic, byte* payload, unsigned int length)
{
  if (strstr

(topic, ALINK_TOPIC_PROP_SET))
  {
    Serial.print("Set message arrived [");
    Serial.print(topic);
    Serial.print("] ");
    payload[length] = '\0';
    Serial.println((char *)payload);



// Deserialization break change from 5.x to 6.x of ArduinoJson
    DynamicJsonDocument doc(100);
    DeserializationError error = deserializeJson(doc, payload);
    if (error)
    {


Serial.println("parse json failed");
      return;
    }

    // {"method":"thing.service.property.set","id":"282860794","params":{"LightSwitch":1},"version":"1.0.0"}
    JsonObject

setAlinkMsgObj = doc.as<JsonObject>();
    // LightSwitch
    int desiredLedState = setAlinkMsgObj["params"]["LightSwitch"];

    if (desiredLedState == LED_ON || desiredLedState == LED_OFF) {


    needReportStatus = true;
      ledState = desiredLedState;

      const char* cmdStr = desiredLedState == LED_ON ? "on" : "off";
      Serial.print("Cloud command: Turn ");


Serial.print(cmdStr);
      Serial.println(" the light.");
    }
  }
}

void setup()
{


    lcd.LCD_GPIOInit();
    lcd.LCD_Init();
    lcd.LCD_Clear(WHITE);

    lcd.Show_Str(3,

0,BLACK,WHITE,"wendu:",12,1);///显示英文字符串
    lcd.Show_Str(3,20,BLACK,WHITE,"shidu:",12,1);///显示英文字符串
    lcd.Show_Str(3,40,BLACK,WHITE,"fengsu:",12,1);///显示英文字符串


lcd.Show_Str(3,60,BLACK,WHITE,"other:",12,1);///显示英文字符串

   adcAttachPin(dustPin);////风速传感器----adc采集管脚初始化
   adcStart(dustPin);////风速传感器----adc采集开始




Serial.begin(115200);

    pinMode(LED, OUTPUT);

    scanNetworks();
    connectToNetwork();

    Serial.println(WiFi.macAddress());
    Serial.println(WiFi.localIP());

    // WiFi.disconnect

(true);
    // Serial.println(WiFi.localIP());
    mqttClient.setCallback(callback);

    lastMqttConnectMs = millis();
    mqttCheckConnect();
}

void loop()
{



        unsigned int

temp=1111,dustVal;
        temp=dht11.Get_DHT11_Value_ok();      ///温湿度采集
        temperature=temp/256;//温度
        //humidity=temp%256;//湿度
        dustVal=analogRead(dustPin);  ///风

速采集
        speed0=dustVal;


        other++;  
        humidity++;
        if (humidity>99) humidity=0;
        lcd.LCD_ShowNum(45,0,temperature,3,12);///显示数字


lcd.LCD_ShowNum(45,20,humidity,3,12);///显示数字
        lcd.LCD_ShowNum(45,40,speed0,3,12);///显示数字
        lcd.LCD_ShowNum(45,60,other,3,12);///显示数字

        mqttPublish_data1();////发

送数据




    if (millis() - lastMqttConnectMs >= 5000) {
      lastMqttConnectMs = millis();
      mqttCheckConnect();
    }

    if (!

mqttClient.loop()) {
      Serial.println("The MQTT client is disconnected!");
    }

    digitalWrite(LED, ledStateMapOutput[ledState]);
    if (needReportStatus) {
      mqttPublish();


needReportStatus = false;
    }
}

全部资料51hei下载地址:
esp32_0001.7z (2.18 MB, 下载次数: 86)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:440075 发表于 2019-10-7 21:19 | 显示全部楼层
请问,怎么使用呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表