Sensor de Temperatura y led con Node-red. ESP8266

Conexion de ESP8266 con sensor de humedad.

En este proyecto he trabajado con el ESP8266 y lo he conectado con un sensor de humedad y un led. En cuanto al software utilizado, paso a enumerar.

  • Node-red. Se instala en local y utiliza el puerto 1880.
  • MQTT. Utilizo Mosquitto.
  • Programa que incluyo en en ESP8266.
  • Wirepusher

NODE-RED

Se descarga de su página web ( Node.js ) y luego se trabaja con el navegador. Hay que entrar en localhost:1880.

Nos saldrá un entorno de trabajo donde vamos a poder crear nuestro dashboard que luego lo vamos a poder visualizar en la web.

Aquí se muestra ejemplo del entorno.

El entorno es muy intuitivo y permite ir añadiendo los elementos que necesitemos.

Mosquitto

Se trata de un servidor MQTT. En este caso trabaja con tópicos donde el ESP8266 va publicando tópicos y sus valores ( humedad y temperatura ) y al mismo tiempo está el ESP8266 suscrito al tópico del led para controlar que cuando desde el dashboard indique que quiero encender o apagar el led, pues se encienda.

Todo esto se va a controlar con el código que tengo que incluir en el arduino.

El servidor MQTT se instala como un servicio en el puerto 1880. Es importante en el firewall del equipo donde esté el NODE-Red abir el puerto 1883, para que se pueda acceder sin problemas.

ESP8266.

El diseño que hay que realizar está indicado en la fotografía. Los pines del ESP8266 se pueden ver en la siguiente imagen.

https://electronilab.co/wp-content/uploads/2016/02/NodeMCU-%E2%80%93-Board-de-desarrollo-con-m%C3%B3dulo-ESP8266-WiFi-y-Lua-4.jpg

y el código que tengo que poner el ESP8266 sería el siguiente.

<pre class="wp-block-syntaxhighlighter-code"><!-- wp:paragraph -->
<p>y el código que tengo que poner el ESP8266 sería el siguiente.</p>
<!-- /wp:paragraph -->

<!-- wp:code -->
<pre class="wp-block-code"><code>/*

All the resources for this project:
<blockquote class="wp-embedded-content" data-secret="AAIxiZX518"><a href="https://randomnerdtutorials.com/">Home</a></blockquote><iframe title="&#8220;Home&#8221; &#8212; Random Nerd Tutorials" class="wp-embedded-content" sandbox="allow-scripts" security="restricted" style="position: absolute; clip: rect(1px, 1px, 1px, 1px);" src="https://randomnerdtutorials.com/embed/#?secret=AAIxiZX518" data-secret="AAIxiZX518" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>

*/
include
include
include «DHT.h»

// Uncomment one of the lines bellow for whatever DHT sensor type you’re using!
define DHTTYPE DHT11 // DHT 11

// Change the credentials below, so your ESP8266 connects to your router
const char* ssid = «MOVISTAR_E5E5»;
const char* password = «MA6660cw»;

// Change the variable to your Raspberry Pi IP address, so it connects to your MQTT broker
const char* mqtt_server = «192.168.1.33»;

// Initializes the espClient. You should change the espClient name if you have multiple ESPs running in your home automation system
WiFiClient espClient;
PubSubClient client(espClient);

// DHT Sensor – GPIO 5 = D1 on ESP-12E NodeMCU board
const int DHTPin = D4;

// Lamp – LED – GPIO 4 = D2 on ESP-12E NodeMCU board
const int lamp = D1;

// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);

// Timers auxiliar variables
long now = millis();
long lastMeasure = 0;

// Don’t change the function below. This functions connects your ESP8266 to your router
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.print(«WiFi connected – ESP IP address: «);
Serial.println(WiFi.localIP());
}

// This functions is executed when some device publishes a message to a topic that your ESP8266 is subscribed to
// Change the function below to add logic to your program, so when a device publishes a message to a topic that
// your ESP8266 is subscribed you can actually do something
void callback(String topic, byte* message, unsigned int length) {
Serial.print(«Message arrived on topic: «);
Serial.print(topic);
Serial.print(«. Message: «);
String messageTemp;

for (int i = 0; i < length; i++) {
Serial.print((char)message[i]);
messageTemp += (char)message[i];
}
Serial.println();

// Feel free to add more if statements to control more GPIOs with MQTT

// If a message is received on the topic room/lamp, you check if the message is either on or off. Turns the lamp GPIO according to the message
if(topic==»room/lamp»){
Serial.print(«Changing Room lamp to «);
if(messageTemp == «on»){
digitalWrite(lamp, HIGH);
Serial.print(«On»);
}
else if(messageTemp == «off»){
digitalWrite(lamp, LOW);
Serial.print(«Off»);
}
}
Serial.println();
}

// This functions reconnects your ESP8266 to your MQTT broker
// Change the function below if you want to subscribe to more topics with your ESP8266
void reconnect() {
// Loop until we’re reconnected
while (!client.connected()) {
Serial.print(«Attempting MQTT connection…»);
// Attempt to connect
/*
YOU MIGHT NEED TO CHANGE THIS LINE, IF YOU’RE HAVING PROBLEMS WITH MQTT MULTIPLE CONNECTIONS
To change the ESP device ID, you will have to give a new name to the ESP8266.
Here’s how it looks:
if (client.connect(«ESP8266Client»)) {
You can do it like this:
if (client.connect(«ESP1_Office»)) {
Then, for the other ESP:
if (client.connect(«ESP2_Garage»)) {
That should solve your MQTT multiple connections problem
*/
if (client.connect(«ESP8266Client»)) {
Serial.println(«connected»);
// Subscribe or resubscribe to a topic
// You can subscribe to more topics (to control more LEDs in this example)
client.subscribe(«room/lamp»);
} else {
Serial.print(«failed, rc=»);
Serial.print(client.state());
Serial.println(» try again in 5 seconds»);
// Wait 5 seconds before retrying
delay(5000);
}
}
}

// The setup function sets your ESP GPIOs to Outputs, starts the serial communication at a baud rate of 115200
// Sets your mqtt broker and sets the callback function
// The callback function is what receives messages and actually controls the LEDs
void setup() {
pinMode(lamp, OUTPUT);

dht.begin();

Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);

}

// For this project, you don’t need to change anything in the loop function. Basically it ensures that you ESP is connected to your broker
void loop() {

if (!client.connected()) {
reconnect();
}
if(!client.loop())
client.connect(«ESP8266Client»);

now = millis();
// Publishes new temperature and humidity every 30 seconds
if (now – lastMeasure > 1000) {
lastMeasure = now;
// Sensor readings may also be up to 2 seconds ‘old’ (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);

// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
  Serial.println("Failed to read from DHT sensor!");
  return;
}

// Computes temperature values in Celsius
float hic = dht.computeHeatIndex(t, h, false);
static char temperatureTemp[7];
dtostrf(hic, 6, 2, temperatureTemp);

// Uncomment to compute temperature values in Fahrenheit 
// float hif = dht.computeHeatIndex(f, h);
// static char temperatureTemp[7];
// dtostrf(hic, 6, 2, temperatureTemp);

static char humidityTemp[7];
dtostrf(h, 6, 2, humidityTemp);

// Publishes Temperature and Humidity values
client.publish("room/temperature", temperatureTemp);
client.publish("room/humidity", humidityTemp);

Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t Temperature: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t Heat index: ");
Serial.print(hic);
Serial.println(" *C ");
// Serial.print(hif);
// Serial.println(" *F");

}
} </code></pre>
<!-- /wp:code --></pre>

WIREPUSHER

Por último se utiliza esta app en android para recibir las notificaciones. Es muy fácil. Simplemente hay que llamar a una página php con el token de la app y con el mensaje a enviar.

Entradas relacionadas

Deja tu comentario