Ok, lite mer ingående beskrivning av temp-givare och hur dessa är konfade.
Länkar till de olika delarna samt bra tutorials längst ner i inlägget.Själva givarna kör ett One-Wire protokoll vilket gör att man kan koppla in många på en och samma
kabel. Vet inte vad begränsningen är i form av kabellängd och antal enher men ett par meter var inga problem iallafall. Dessutom kan man låta ESP:n skicka ut 5v på samma
ledning och därigenom slippa extern strömförsörjning av givarna, grymt smidigt
Varje givare kommer förprogrammerad med en "adress" och första stegen är att man behöver identifiera alla givare på "bussen" och skriva ner dess adresser.
Vill man inte skicka temperaruter över nätet så går det ju naturligtvis bra att tex koppla på en display och visa det där.
I mitt fall ville jag skicka det till HomeAssistant vilket då kräver två saker:
• Uppkoppling till mitt Wifi
• Någon tjänst dit jag kunde skicka mina "readings"
Wifi uppkopplingen löstes lätt med ESP32, finns färdiga bibliotek fixar det.
Sen valde jag MQTT som "mottagare" av temperaturerna då den tillåter mig att skicka meddelande till olika "topics" som sen hur många andra tjänster som helst kan "prenumera på". I mitt fall så är det Home Assistant som läser meddelanden ur kön för att uppdatera temperaturerna.
Här är lite dummy kod för de olika delarna, har bara tagit med delar av det för att förklara hur det hänger ihop (
se länkarna i slutet för lite tutorials)
Först hämtar vi in de bibliotek vi behöver
- Kod: Markera allt
#include <WiFi.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>
Sen initierar vi One-Wire bussen och våra givare
- Kod: Markera allt
# Porten som vi kopplat in temp-givarna på
#define ONE_WIRE_BUS 17
OneWire oneWire(ONE_WIRE_BUS);
## Temperatur sensorerna (varje sensor har en unik förprogrammerad address)
DeviceAddress ack_tank = { 0x28,0xDA,0xDC,0x03,0x0A,0x00,0x00,0x88 };
DeviceAddress vv_beredare = { 0x28,0x65,0x17,0x03,0x0A,0x00,0x00,0xF9 };
Sen Wifi
- Kod: Markera allt
const char* ssid = "Hemma Wifi";
const char* password = "losenord";
setup_wifi();
Slutligen MQTT klienten
- Kod: Markera allt
const char* mqtt_server = "192.168.1.113";
const char* mqtt_user = "mqtt-user";
const char* mqtt_pass = "losenord";
# Skapa en "klient" mot MQTT över Wifi
WiFiClient espClient;
PubSubClient client(espClient);
client.setServer(mqtt_server, 1883);
Sen kommer delen som ESP32 kör i en loop, hämta och skicka temperatur uppdateringar till MQTT
- Kod: Markera allt
void loop() {
Serial.println("Hämtar temperaturer...");
sensors.requestTemperatures();
// Skriv ut på console
printData(vv_beredare);
printData(ack_tank);
float temp_vv = getTempature(vv_beredare);
float temp_ack = getTempature(ack_tank);
# För varje "läsning", blinka led:en på boxen så man ser att det funkar
flashLED(WIFI_LED);
# Skicka temperaturen till Home Assistant
client.publish("hyttinge/pannrum/temp_tank_toppen", tempString);
client.publish("hyttinge/pannrum/temp_tank_botten", tempString);
}
ESP32:
https://www.espressif.com/en/products/socs/esp32Temp-givare:
https://www.elfa.se/sv/one-wire-ic-to-92-maxim-ds18b20/p/17377559Bra tutorial för One-Wire:
https://lastminuteengineers.com/ds18b20-arduino-tutorial/Tutorial för MQTT:
https://randomnerdtutorials.com/esp32-mqtt-publish-subscribe-arduino-ide/