/*
To view the data:
1. Go to http://www.hivemq.com/demos/websocket-client/
2. Click "Connect"
3. Under Subscriptions, click "Add New Topic Subscription"
4. In the Topic field, type "weather" then click "Subscribe"
https://wokwi.com/arduino/projects/322577683855704658
*/
#include <WiFi.h>
#include <PubSubClient.h>
// libreria para controlar el sensor
#include <DHT.h>
unsigned long lastMsg = 0;
// Wifi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// MQTT Broker
const char* mqtt_server = "broker.mqttdashboard.com";
const char* clientID = "AU";
const int mqtt_port = 1883;
const char* mqtt_username = "";
const char* mqtt_password = "";
const char* topic = "hum";
WiFiClient espClient;
PubSubClient client(espClient);
//configuracion del sensor
DHT dht_sensor( 4, DHT22 );
void connect_wifi(){
delay(10);
WiFi.begin( ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi...");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
// Subscribe callback
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived in topic: ");
Serial.println(topic);
Serial.print("Message: ");
String data = "";
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
data += (char)payload[i];
}
Serial.println();
Serial.print("Message size: ");
Serial.println(length);
Serial.println();
Serial.println("-----------------------");
Serial.println(data);
}
void reconnect() {
while(!client.connected()) {
if (client.connect(clientID)) {
Serial.println("MQTT connected");
client.subscribe(topic);
Serial.println("Topic Subscribed");
}
else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000); // wait 5sec and retry
}
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
connect_wifi();
// iniciar el sensor
dht_sensor.begin();
client.setServer( mqtt_server, 1883 ); // Setting MQTT server
client.setCallback( callback );
}
void loop() {
if (!client.connected()) { // If client is not connected
reconnect(); // Try to reconnect
}
// leer la humedad del entorno
float t = dht_sensor.readHumidity();
//Serial.println( t );
client.loop();
unsigned long now = millis();
if (now - lastMsg > 1000) { //perintah publish data
lastMsg = now;
String s = String( t );
client.publish( topic, s.c_str() );
}
}