Sensor de Temperatura ESP8266


Sensor de temperatura portátil MQTT
Sensor de temperatura portátil usando ESP8266, MQTT y Node red

Sensor de temperatura portátil usando ESP8266, MQTT y Node red

Un sensor de temperatura portátil construido con una placa de microcontrolador ESP8266 y un sensor impermeable DS18B20. Alojado en una caja impresa en 3D de mi propio diseño.

Cuando se enciende, el ESP8266 se conecta primero a Wifi y luego al servidor MQTT en mi Raspberry Pi. Una vez conectado se envía un mensaje a intervalos regulares con la lectura de la temperatura.


Las piezas para hacer que el sensor de temperatura del ESP8266

  • ESP8266 microcontroller
  • DS18B20 sensor de temperatura a prueba de agua
  • 4.7K resistor
  • Caja impresa en 3D
  • Fuente de alimentación de 5v
La placa ESP8266 para el sensor de temperatura

Placa ESP8266

El sensor de temperatura a prueba de agua DS18B20

El sensor de temperatura a prueba de agua DS18B20

Un sensor de temperatura portátil ensamblado

Un sensor de temperatura portátil ensamblado

Diseño e impresión


Usando SketchUp y mi impresora 3D

El diseño de la carcasa de la placa esp8266 fue modelado en SketchUp. He tratado de mantenerlo lo más compacto posible, mientras que aún se deja espacio para el cableado.

Impreso en PLA con un 20% de relleno y soporte para los recortes.

Los archivos de diseño e impresión se pueden encontrar en Thingiverse

Modelo SketchUp de la caja del esp8266

Montaje


Soldando las conexiones
Soldadura ESP8266 MQTT Sensor de temperatura

He soldado los cables del DS18B20 directamente a las clavijas del ESP8266 para facilitar la tarea,

  1. Soldar el cable de alimentación rojo a la clavija de 3,3v al mismo tiempo soldando un extremo de la resistencia a la misma clavija.
  2. Suelde el cable negro de tierra a la clavija GND.
  3. Y finalmente, conectar el cable de datos amarillo a D4 (GPIO2), soldando de nuevo la resistencia al mismo tiempo.

¡Y eso es todo para la asamblea!

Añadí un poco de pegamento caliente a las conexiones terminales para el aislamiento y la protección contra la corrosión. Y un toque alrededor del agujero de entrada del cable.

Etapa final


Sube el código

Añade el código a la unidad terminada

Copia el código de abajo y pégalo en el IDE de Arduino. Cambie los detalles de la conexión wifi a su propia red wifi. También establezca la dirección IP del Raspberry pi ejecutando el servidor mqtt.

También necesitará las bibliotecas correspondientes:

  • ESP8266 board support library
  • Dallas Temperature library
  • OneWire library
  • Mqtt support library

Estos pueden ser fácilmente instalados a través de la opción “administrar bibliotecas” dentro del IDE de Arduino

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire to pin D4 on the ESP8266 - GPIO 2
#define ONE_WIRE_BUS 2

// Setup oneWire
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature DS18B20(&oneWire);
char temperatureCString[7];
char temperatureFString[7];

// Change the credentials below, so your ESP8266 connects to your router
const char* ssid = "YOUR WIFI SSID";
const char* password = "YOUR WIFI PASSWORD";

// Change the variable to your Raspberry Pi IP address, so it connects to your MQTT broker
const char* mqtt_server = "YOUR PI IP ADDRESS";

// Initializes the espClient.
WiFiClient esp_temp_portable;
PubSubClient client(esp_temp_portable);

// This 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());
}

void getTemperature() {
  float tempC;
  float tempF;
  do {
    DS18B20.requestTemperatures(); 
    tempC = DS18B20.getTempCByIndex(0);
    dtostrf(tempC, 2, 0, temperatureCString);
    tempF = DS18B20.getTempFByIndex(0);
    dtostrf(tempF, 3, 2, temperatureFString);
    Serial.println(temperatureCString);
    delay(100);
  } while (tempC == 85.0 || tempC == (-127.0));
}

// This functions reconnects your ESP8266 to your MQTT broker
void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    if (client.connect("esp_temp_portable")) {
      Serial.println("connected");  
      // Subscribe or resubscribe to a topic
      // You can subscribe to more topics (to control more LEDs in this example)
      client.subscribe("portable/temp1");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}

void setup() {
  Serial.begin(115200);
  setup_wifi();
  client.setServer(mqtt_server, 1883);
  //Turn off wifi access point
  WiFi.mode(WIFI_STA);
 }
// ensures that you ESP is connected to wifi and mqtt broker
void loop() {
  //connect wifi if not connected
  if (WiFi.status() != WL_CONNECTED) {
    delay(1);
    setup_wifi();
    return;
}
  if (!client.connected()) {
    reconnect();
  }
  if(!client.loop())
    client.connect("esp_temp_portable");

  getTemperature();
  client.publish("portable/temp1",temperatureCString);
  delay(10000);
 }

Sólo queda configurar el flujo de entrada del MQTT en el Nodo Rojo y conectar la unidad.

Un uso para el sensor de temperatura


Vigilar lo bien que funciona mi pila de abono

Tengo uno de estos pegado a un poste de metal de la cerca eléctrica, lo empujo a la pila de abono y lo enchufo a la batería de carga de un teléfono. Registra la temperatura en el nodo rojo del tablero de mi MQTT habilitado para Raspberry Pi.

Midiendo la temperatura del abono con el sensor ESP8266
Usando el sensor de temperatura ESP8266 para el abono

A continuación se muestra una captura de pantalla del Node Red Dashboard. Muestra la lectura del sensor de temperatura ESP8266 y un historial en forma de gráfico.

El tablero Node red para el sensor de temperatura portátil ESP8266

El tablero Node red para el sensor de temperatura portátil ESP8266

Recientemente he modificado el diseño del sensor de temperatura ESP8266 para añadir un segundo DS18b20. Este se usa para monitorizar la temperatura del agua de entrada/salida de mi sistema de calefacción por suelo radiante.