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
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
Montaje
Soldando las conexiones
He soldado los cables del DS18B20 directamente a las clavijas del ESP8266 para facilitar la tarea,
- 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.
- Suelde el cable negro de tierra a la clavija GND.
- 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.
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.
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.