欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
阿里云MQTT數據云流轉,實現多個終端控制某一個設備
[打印本頁]
作者:
leanco
時間:
2022-11-14 00:03
標題:
阿里云MQTT數據云流轉,實現多個終端控制某一個設備
一、在阿里云注冊登錄,并在控制臺建好項目
二、在arduinoIDE上傳代碼至arduino系列單片機或者ESP8266或ESP32
三、可以在本地按鍵操作硬件,也可以在阿里云端進行設備模擬查看最終效果。
附上代碼,僅供參考
#include <ESP8266WiFi.h>
#include <PubSubClient.h>//這個沒有回調函數
#include <ArduinoJson.h>
#include "DHT.h"
WiFiClient espClient;
PubSubClient client(espClient);
PubSubClient mqttClient(espClient);
#define sensor_Pin 0
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
float h;
float t;
long s;
// 連接WIFI和密碼
#define WIFI_SSID "-------------"
#define WIFI_PASSWD "-----------"
//設備的三元組信息
#define PRODUCT_KEY "-----------"
#define DEVICE_NAME "---------"
#define DEVICE_SECRET "-----------"
#define REGION_ID "cn-shanghai"
//不需要改
#define MQTT_SERVER PRODUCT_KEY ".iot-as-mqtt." REGION_ID ".aliyuncs diancom"
#define MQTT_PORT 1883
/////
#define MQTT_USRNAME DEVICE_NAME "&" PRODUCT_KEY
#define CLIENT_ID "h8v70q9rDqp.center|securemode=2,signmethod=hmacsha256,timestamp=1652631576537|"//這里使用技小新可以生成,注意密碼和密鑰一定要對否則連不上MQTT "FESA234FBDS24|securemode=3,timestamp=789,signmethod=hmacsha1|"
#define MQTT_PASSWD "180866dbe114bb5cedd3a3dc1f27dccdadeaf0dbc51bd3873a26c88bef98cf08"
#define ALINK_TOPIC_PROP_SET "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/service/property/set"
#define ALINK_BODY_FORMAT "{\"id\":\"ESP8266\",\"version\":\"1.0\",\"method\":\"thing.event.property.post\",\"params\":%s}"
#define ALINK_TOPIC_PROP_POST "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post"
////a1JKlnw6EP0/postion1/user/update
unsigned long lastMs = 0;
float soil_data = 0;
//連接wifi
void wifiInit()
{
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWD);
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.println("WiFi not Connect");
}
client.setServer(MQTT_SERVER, MQTT_PORT); //連接MQTT服務器
}
//mqtt連接
void mqttCheckConnect()
{
while (!client.connected())
{
client.connect(CLIENT_ID, MQTT_USRNAME, MQTT_PASSWD);
}
Serial.println("MQTT connect succeed!");
// client.subscribe(ALINK_TOPIC_PROP_POSTRSP);
mqttClient.subscribe(ALINK_TOPIC_PROP_SET);
Serial.println("subscribe done");
}
void mqttIntervalPost()
{
soil_data = analogRead(sensor_Pin); //模擬數據讀取(A0腳輸入的數據)385-1024
soil_data -= 385; //0-639
soil_data /= 6.39; //0.00-100.00,變為百分比
soil_data = 100 - soil_data; //修改為百分比越大濕度越大
char param[32];
char jsonBuf[128];
read_data();
//這里\"**"\要選擇對應的標識符,否則數據上報不了。
sprintf(param, "{\"wendu\":%f}", t);
sprintf(jsonBuf, ALINK_BODY_FORMAT, param);
Serial.println(jsonBuf);
boolean e = client.publish(ALINK_TOPIC_PROP_POST, jsonBuf);
sprintf(param, "{\"CurrentHumidity\":%f}", h);
sprintf(jsonBuf, ALINK_BODY_FORMAT, param);
Serial.println(jsonBuf);
boolean f = client.publish(ALINK_TOPIC_PROP_POST, jsonBuf);
///以下///上報給另一個設備///////////
}
void callback(char *topic, byte *payload, unsigned int length)//mqtt回調函數
{
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
payload[length] = '\0';
Serial.println((char *)payload);
if (strstr(topic, ALINK_TOPIC_PROP_SET))
{
StaticJsonBuffer<100> jsonBuffer;
JsonObject &root = jsonBuffer.parseObject(payload);
if (!root.success())
{
Serial.println("parseObject() failed");
return;
}
}
}
void setup()
{
Serial.begin(115200);
wifiInit();
dht.begin();
}
void read_data()
{
float read_h = dht.readHumidity();//濕度
float read_t = dht.readTemperature();//溫度
h = read_h;
t = read_t;
Serial.print("濕度:");
Serial.print(h);
Serial.println("%");
Serial.print("溫度:");
Serial.println(t);
}
void loop()
{
s = millis();
delay(500);
read_data();
Serial.println(millis() - s);
if (millis() - lastMs >= 5000)
{
lastMs = millis();
mqttCheckConnect();
mqttIntervalPost();
}
client.loop();
delay(2000);
}
復制代碼
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1