/*
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>
#include <DHT.h>
unsigned long lastMsg = 0;
// Wifi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// MQTT Broker CONFIGURAR AQUI
const char* mqtt_server = "broker.mqttdashboard.com";
const char* clientID = "claseSAP9BN";
const int mqtt_port = 1883;
const char* mqtt_username = "";
const char* mqtt_password = "";
const char* topic = "suazo";
// DHT Sensor
#define DHTPIN 4 // Define the pin where the DHT22 sensor is connected
#define DHTTYPE DHT22 // Define the type of DHT sensor
WiFiClient espClient;
PubSubClient client(espClient);
DHT dht(DHTPIN, DHTTYPE);
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());
}
void cero(){
//mostrar el cero en codigo gray
Serial.println("cero");
digitalWrite(17, LOW);
digitalWrite(2, LOW);
digitalWrite(18, LOW);
digitalWrite(5, LOW);
}
void dos(){
//mostrar el dos en codigo gray
Serial.println("dos");
digitalWrite(17, LOW);
digitalWrite(2, LOW);
digitalWrite(18, HIGH);
digitalWrite(5, HIGH);
}
void cuatro(){
//mostrar el cuatro en codigo gray
Serial.println("cuatro");
digitalWrite(17, LOW);
digitalWrite(2, HIGH);
digitalWrite(18, HIGH);
digitalWrite(5, LOW);
}
void seis(){
//mostrar el cuatro en codigo gray
Serial.println("seis");
digitalWrite(17, LOW);
digitalWrite(2, HIGH);
digitalWrite(18, LOW);
digitalWrite(5, HIGH);
}
// 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];
}
if( (char)payload[0] == '0' ){
cero();
} else if( (char)payload[0] == '2'){
dos();
} else if( (char)payload[0] == '4'){
cuatro();
} else if( (char)payload[0] == '6'){
seis();
}
}
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() {
//CONFIGURACIÓN DE SALIDA
pinMode(17, OUTPUT);
pinMode(2, OUTPUT);
pinMode(18, OUTPUT);
pinMode(5, OUTPUT);
Serial.begin(115200);
connect_wifi();
dht.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
}
// put your main code here, to run repeatedly:
float temperature = dht.readTemperature();
client.loop();
unsigned long now = millis();
if (now - lastMsg > 1000) { //perintah publish data
lastMsg = now;
String temp = String(temperature, 2);
client.publish( topic, temp.c_str() ); // publish temp topic
Serial.print("Temperature: ");
Serial.println(temp);
}
}