#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();
}
}
}
esp32-阿里云
最新推荐文章于 2025-05-21 13:41:18 发布