esp32-阿里云

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

#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>

#include <U8g2lib.h>
#include <Wire.h>

#define DHTPIN 4
#define DHTTYPE DHT11
#define ADCPIN 35

#define d4 27
#define d3 14
#define d5 26
#define d6 33
#define sw2 39

float temp=0.0;
float humi=0.0;
unsigned int light=0;
unsigned char stat_led=0;

DHT_Unified dht(DHTPIN,DHTTYPE);

void get_sensor_data(){
    sensors_event_t event;
    dht.temperature().getEvent(&event);
    temp=event.temperature;
    dht.humidity().getEvent(&event);
    humi=event.relative_humidity;
    light=analogRead(ADCPIN);
}

const char *mqttServerAddress="iot-06z00aldx0fj8fj.mqtt.iothub.aliyuncs.com";
const int mqttServerPort=1883;

const char *mqttClientID="k23g5qiRETs.LQT_001|securemode=2,signmethod=hmacsha256,timestamp=1735183931612|";
const char *mqttUserName="LQT_001&k23g5qiRETs";
const char *mqttPassword="416aa6b87610419b8e9bca52a4c5a7241badb39529a8ce39ceeed8a4a76c8eff";

const char *mqttPubTopic="/sys/k23g5qiRETs/LQT_001/thing/event/property/post";

const char *mqttSubTopic="/sys/k23g5qiRETs/LQT_001/thing/service/property/set";

WiFiClient esp32TcpClient;
PubSubClient mqtt(esp32TcpClient);
JsonDocument doc;

void mqtt_publish_payload(){
    String publish_Payload="{\"params\":{\"light\":0,\"temp\":0,\"humi\":0,\"switch\":0}}";

    digitalWrite(d4,HIGH);
    deserializeJson(doc,publish_Payload);

    doc["params"]["light"]=light;
    doc["params"]["temp"]=temp;
    doc["params"]["humi"]=humi;
    doc["params"]["switch"]=stat_led;

    publish_Payload.clear();
    serializeJson(doc,publish_Payload);
    Serial.println(publish_Payload);
    mqtt.publish(mqttPubTopic,publish_Payload.c_str());
    digitalWrite(d4,LOW);
}

void mqtt_recv_callback(char *topic,uint8_t *payload,unsigned int length){
    deserializeJson(doc,payload);

    if(doc["params"]["switch"]==1){
        digitalWrite(d3,HIGH);
        stat_led=1;
        Serial.println("云平台远程控制:开灯");
    }
    else if(doc["params"]["switch"]==0){
        digitalWrite(d3,LOW);
        stat_led=0;
        Serial.println("云平台远程控制:关灯!");
}
}

void mqtt_subscribe_topic(){
    mqtt.setCallback(mqtt_recv_callback);
    if(true==mqtt.subscribe(mqttSubTopic))
        Serial.println("订阅MQTT主题成功!");
    else
        Serial.println("订阅MQTT主题失败!");
}

void mqtt_disconnect_IOT_cloud(){
     mqtt.disconnect();
    digitalWrite(d5,LOW);
    Serial.println("设备断开连接mqtt!");
}

void mqtt_connect_IOT_cloud(){
     mqtt.setServer(mqttServerAddress,mqttServerPort);
    if(!mqtt.connected()){
        Serial.println("正在连接服务器:");
        if(mqtt.connect(mqttClientID,mqttUserName,mqttPassword)==false){
            digitalWrite(d5,LOW);
            Serial.println("MQTT Get ERROR!");
            return;
        }
    }
    digitalWrite(d5,HIGH);
    Serial.println("esp32已连接mqtt!");
}

void init_port(){
    pinMode(d3,OUTPUT);
    pinMode(d4,OUTPUT);
    pinMode(d5,OUTPUT);
    pinMode(d6,OUTPUT);
    pinMode(sw2,INPUT_PULLUP);
}

const char *wifiName="biggest";
const char *wifiPwd="99999llll";
void connect_wifi(){
     WiFi.mode(WIFI_STA);
    WiFi.setAutoReconnect(true);
    WiFi.begin(wifiName,wifiPwd);
    while(!WiFi.isConnected()){
        digitalWrite(d6,!digitalRead(d6));
        delay(200);
        Serial.print(".");
    }
    digitalWrite(d6,HIGH);
    Serial.println();
    Serial.println("wifi success");
}

void scan_keys(){
    if(digitalRead(sw2)==LOW){
        delay(2);
        if(digitalRead(sw2)==LOW){
            if(mqtt.connected()){
                mqtt_disconnect_IOT_cloud();
            }
            else{
                mqtt_connect_IOT_cloud();
            }
            while(digitalRead(sw2)==LOW);
        }
    }
}



void setup() {
   Serial.begin(115200);
   dht.begin();
   init_port();
   connect_wifi();
   mqtt_connect_IOT_cloud();
   mqtt_subscribe_topic();
}

int count=0;
void loop() {
   scan_keys();
   if(mqtt.connected()){
    mqtt.loop();
    delay(5);
    count++;
    if(count==1000){
        count=0;
        get_sensor_data();
        mqtt_publish_payload();
    }
   }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值