#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#include <ArduinoJson.h>
#define DHTPIN D2
#define DHTTYPE DHT11
const char* ssid = "*************"; // 连接 WiFi名 ,修改为自己的WiFi名
const char* password = "***********"; // 连接 WiFi密码,修改为自己的WiFi密码
/******************产品/设备配置(每个人需要根据自己的产品设备信息去动态更换)**********************/
#define PRODUCT_KEY "******" //产品key 从产品详情获取
#define DEVICE_NAME "*****" //设备deviceName 从设备详情获取
// 服务端相关
#define MQTT_SERVER PRODUCT_KEY ".iot-as-mqtt.cn-shanghai.aliyuncs.com" //阿里云MQTT服务地址
#define MQTT_PORT 1883 //MQTT服务端口
// 校验三元组
#define MQTT_CLIENT_ID DEVICE_NAME "|securemode=3,signmethod=hmacsha1|" //mqtt clientid
#define MQTT_USERNAME DEVICE_NAME "&" PRODUCT_KEY //mqtt username
#define MQTT_PASSWORD "****************************" //mqtt password 通过生成工具获得
// 相关主题 自定义一个主题
#define SUB_TOPIC "/" PRODUCT_KEY "/" DEVICE_NAME "/user/get" //订阅主题
#define PUB_TOPIC0 "/" PRODUCT_KEY "/" DEVICE_NAME "/user/update" //发布主题
#define PUB_TOPIC "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post" //发布主题
/*************************************************************************************************/
WiFiClient espClient; //创建wifi客户端
PubSubClient client(espClient); //创建MQTT客户端
DHT dht(DHTPIN,DHTTYPE);
unsigned long lastMsg = 0;
void setup_wifi()
{
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
//收到订阅Topic信息的回调处理
void callback(char *topic, byte *payload, unsigned int length){
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++){
Serial.print((char)payload[i]);
}
Serial.println();
// 平台发来命令“1”时开灯
if ((char)payload[0] == '1'){
digitalWrite(BUILTIN_LED, HIGH);
}
else{
digitalWrite(BUILTIN_LED, LOW);
}
}
void reconnect()
{
// Loop until we're reconnected
while (!client.connected()){
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect(MQTT_CLIENT_ID, MQTT_USERNAME, MQTT_PASSWORD)){
Serial.println("MQTT server connected");
// 订阅主题
client.subscribe(SUB_TOPIC);
}
else{
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void setup()
{
dht.begin();
pinMode(BUILTIN_LED, OUTPUT); // Initialize the BUILTIN_LED pin as an output
Serial.begin(115200);
setup_wifi();
client.setServer(MQTT_SERVER,MQTT_PORT); //设置阿里云MQTT服务器地址和端口
client.setCallback(callback);
}
void loop()
{
if (!client.connected()){
reconnect();
}
client.loop();
long now = millis();
if (now - lastMsg > 5000)
{
lastMsg = now;
Serial.print("Publish message: "); //发布一个hello world用于测试
Serial.println("hello world");
float hum=dht.readHumidity();
float temp=dht.readTemperature();
Serial.print("温度: ");
Serial.println(temp);
Serial.print("湿度: ");
Serial.println(hum);
StaticJsonDocument<96> doc;
doc["id"] = "1";
doc["version"] = "1.0";
JsonObject params = doc.createNestedObject("params");
params["Hum"] = hum;
params["Temp"] = temp;
doc["method"] = "thing.event.property.post";
char output[200];
serializeJson(doc, output);
Serial.println(output);
client.publish(PUB_TOPIC, output);
}
}
ESP8266获取温湿度,上传阿里云
最新推荐文章于 2025-04-10 22:23:23 发布