前言
上一篇文章和这一篇文章,分别简单给出了一个设备如何接收并处理更新,以及如何发送更新信息,这样,我们就可以在后续自行实现各种有意思的东西了.
程序部分
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <dht11.h>
// Enable SSL?
#define SSLEnable
// Hareware configuration
#define dht11Pin 2
dht11 DHT11;
// WiFi and MQTT Server configuraton
const char *ssid = "ssid";
const char *password = "password";
const char *mqttDomain = "mqtt.example.com";
const unsigned short mqttPort = 8883;
const char *mqttID[] = {"prc/shanghai/wanpingnan rd./no.600/sensor/dht11/humidity",
"prc/shanghai/wanpingnan rd./no.600/sensor/dht11/temperature"};
const char *mqttUsername = "admin";
const char *mqttPassword = "public";
const char *fingerprint = "45 45 07 21 11 45 14 19 19 08 10";// Sha-1 of the Certificate (Not CA Cert)
#ifdef SSLEnable
WiFiClientSecure wifiClient;
#else
WiFiClient wifiClient;
#endif
PubSubClient mqttClient(wifiClient);
void update();
void setup()
{
// Hareware setup
pinMode(dht11Pin, INPUT);
Serial.begin(115200);
Serial.println("");
// WiFi setup
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
#ifdef SSLEnable
while (!wifiClient.setFingerprint(fingerprint))
{
Serial.println("[WiFi] SSL Fatal Error...");
delay(5000);
}
#endif
Serial.print("[WiFi] Connecting WiFi...");
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("[WiFi] WiFi connected");
Serial.println("[WiFi] IP address: " + WiFi.localIP().toString());
WiFi.setAutoConnect(true);
WiFi.setAutoReconnect(true);
// MQTT setup
mqttClient.setServer(mqttDomain, mqttPort);
}
void loop()
{
// MQTT loop
while (!mqttClient.connected())
{
Serial.println("[MQTT] Not connected to MQTT server! Establishing connection... | State: " + String(mqttClient.state()));
if (mqttClient.connect(mqttID[0], mqttUsername, mqttPassword))
{
Serial.println("[MQTT] Connected");
for (int i = 0; i < sizeof(mqttID) / sizeof(mqttID[0]); i++)
mqttClient.subscribe(mqttID[i]);
}
else
delay(5000);
}
update();
delay(2000);
mqttClient.loop();
}
void update()
{
DHT11.read(dht11Pin);
char humidity[10], temperature[10];
sprintf(humidity, "%f", DHT11.humidity), sprintf(temperature, "%f", DHT11.temperature);
mqttClient.publish(mqttID[0], humidity);
mqttClient.publish(mqttID[1], temperature);
}
Comments NOTHING