Homey Pro og ESP32: Opplev smartere hjemmekontroll
Homey Pro er en avansert smarthussentral som tilbyr et bredt spekter av funksjoner for å automatisere ditt hjem. Den støtter et stort utvalg av enheter fra forskjellige merker, og gir deg full kontroll over belysning, termostater, låser, sensorer og mye mer.
For å utvide funksjonaliteten til Homey Pro enda mer, kan du koble til en ESP32-enhet. ESP32 er en kraftig og rimelig mikrokontroller som kan brukes til å bygge dine egne smarthusenheter eller for å koble til enheter som ikke har innebygd Homey-støtte.
Denne artikkelen vil gi deg en kort introduksjon til hvordan du kobler en ESP32 til Homey Pro. Vi vil dekke følgende emner:
- Fordeler ved å koble til en ESP32: Få mer kontroll over hjemmet ditt, bygg dine egne smarthusenheter, koble til enheter uten Homey-støtte.
- Nødvendige materialer: Homey Pro, ESP32-enhet, USB-kabel, jumperkabler.
- Konfigurasjon av ESP32: Programmering av ESP32 med Arduino IDE, installasjon av nødvendig firmware.
- Tilkobling til Homey Pro: Oppretting av en virtuell enhet i Homey, paring av ESP32 med Homey.
- Eksempler på bruk: Styre LED-lys, lese sensorverdier, aktivere releer.
Denne artikkelen er perfekt for deg som ønsker å ta smarthjemmet ditt til neste nivå med Homey Pro og ESP32. Vi vil gi deg all informasjonen du trenger for å komme i gang og nyte fordelene av et mer intelligent og automatisert hjem.
Planen er som følger:
- Installere Homeyduino biblioteket i vårt Arduino IDE
- Koble opp 2 stk ESP32 på kjeksbrett
- Lage sender sketch
- Lage mottaker sketch
- Laste ned og installere Homeyduino på vår Homey
- Åpne Homey WebApp
- Finne og koble sammen Arduino IDE og Homey i WebApp.
- Opprette en flow som utfører det vi ønsker.
Homeyduino bibliotek innstallasjon
Homeyduino er et bibliotek som gjør det enkelt å koble en ESP32-enhet til din Homey smarthussentral.
Biblioteket ligger i Arduino IDE, så det er bare å søke det opp og installere.
Mottaker krets
Denne kretsen skal tenne et lys når Homey sender beskjed.
Sketch for mottaker
#include <WiFi.h>
#include <WiFiClient.h>
#include <Homey.h> // Homey biblotek
#define LedPin 32
void setup() {
Serial.begin(115200); // Sette igang serieporten slik at vi kan gi mld eller feilsøke
pinMode(LedPin,OUTPUT); // Setter pinne 32 som utport
WiFi.begin("Nettverket", "passordet"); // Koble til nettverket ditt med ditt eget nettverksnavn og passord på nettet
while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
// Sjekke status på WiFi, hvis ikke tilkoblet ennå skriv ut prikker........
Serial.print("IP address: "); // Nå er du tilkoblet, print IP adressen du er tilkoblet på
Serial.println(WiFi.localIP());
Homey.begin("esp32Lys"); // Start opp Homey på ESP32
Homey.addAction("SettPaGultLys", SettPaGultLys); // Registrerer at det finnes en Aksjon (ActionName i Homey, Funksjonsnavn). Disse navnene kan være like :)
Serial.println("Started."); // Litt feedback på hvor vi befinner oss i koden.
}
void loop() {
Homey.loop(); // Kaller på Homey for å sjekke om det er data på vei
}
void SettPaGultLys() { // Her er funksjonen som kjøres når Homey sender ut en signal om å sette av/på lyset
String value = Homey.value; // Boolsk verdi(0 eller 1) Returnerer 1 når lyset skal på. (Trengs ikke her)
Serial.print("Aksjons verdi: "); //Litt feedback på signal
Serial.println(value);
digitalWrite(32,!digitalRead(32)); // Bytt verdien på lyset, dvs av når den er på og "visa verca"
}
Kodeforklaring
#include <WiFi.h>
#include <WiFiClient.h>
#include <Homey.h>
#define LedPin 32
1. Inkludering av biblioteker:
#include <WiFi.h>
: Inkluderer WiFi-biblioteket, som er nødvendig for å koble til et trådløst nettverk.#include <WiFiClient.h>
: Inkluderer WiFiClient-biblioteket, som brukes til å etablere kommunikasjon med andre enheter over WiFi.#include <Homey.h>
: Inkluderer Homey-biblioteket, som er nødvendig for å kommunisere med Homey smarthussentral.
2. Definisjon av konstant:
#define LedPin 32
: Definerer en konstant kaltLedPin
med verdien32
. Denne konstanten brukes til å angi pinnenummeret til LED-lampen som brukes i koden.
void setup() {
Serial.begin(115200);
pinMode(LedPin,OUTPUT);
WiFi.begin(“Nettverket”, “passordet”);
while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print(“.”); }
Serial.print(“IP address: “);
Serial.println(WiFi.localIP());
Homey.begin(“esp32Lys”);
Homey.addAction(“SettPaGultLys”, SettPaGultLys);
Serial.println(“Started.”);
}
1. Initialisering av seriell kommunikasjon:
Serial.begin(115200)
: Starter seriell kommunikasjon med en baudrate på 115200. Dette gjør det mulig å sende og motta data fra enheten via en seriell monitor.
2. Konfigurasjon av LED-pin:
pinMode(LedPin, OUTPUT)
: Konfigurerer pinnen koblet til LED-lampen (definert av konstantenLedPin
) som en utgangspinne. Dette betyr at den vil bli brukt til å styre LED-lampen.
3. WiFi-tilkobling:
WiFi.begin("Nettverket", "passordet")
: Starter en tilkobling til det angitte WiFi-nettverket med de angitte legitimasjonene.while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
: Venter til WiFi-tilkoblingen er etablert. Skriver ut et punkt til den serielle monitoren hvert 0,5 sekund for å indikere fremdrift.
4. Visning av IP-adresse:
Serial.print("IP address: ")
: Skriver ut teksten “IP address: ” til den serielle monitoren.Serial.println(WiFi.localIP())
: Skriver ut enhetens lokale IP-adresse på nettverket til den serielle monitoren. Dette gir en måte å identifisere og koble til enheten.
5. Initialisering av Homey:
Homey.begin("esp32Lys")
: Initialiserer Homey med enhetens navn “esp32Lys”. Dette gjør at den kan kommunisere med Homey smarthussentral.
6. Registrering av handling:
Homey.addAction("SettPaGultLys", SettPaGultLys)
: Registrerer en handling med navnet “SettPaGultLys” hos Homey, for å styre et gult lys. Den spesifikke implementeringen av denne handlingen er definert i en funksjon kaltSettPaGultLys
lenger ned i koden.
7. Oppstartsmelding:
Serial.println("Started.")
: Skriver ut “Started.” til den serielle monitoren for å indikere at oppstartsprosessen er fullført.
Oppsummering:
Denne “setup”-funksjonen utfører essensielle initialiseringsoppgaver for enheten, inkludert:
- Oppsett av seriell kommunikasjon
- Konfigurasjon av LED-pinnen
- Etablering av WiFi-tilkobling
- Initialisering av Homey
- Registrering av en handling med Homey
- Skrive ut oppstartsmeldinger for tilbakemelding
void loop() {
Homey.loop();
}
void SettPaGultLys() {
String value = Homey.value;
Serial.print(“Aksjons verdi: “);
Serial.println(value);
digitalWrite(32,!digitalRead(32));
}
1. Oppdatering av Homey:
Homey.loop()
: Oppdaterer Homey-tilkoblingen og håndterer eventuelle mottatte meldinger. Dette sikrer at enheten kontinuerlig kommuniserer med Homey og reagerer på eventuelle kommandoer eller dataendringer.
2. Definisjon av “SettPaGultLys”-funksjon:
void SettPaGultLys()
: Denne funksjonen definerer handlingen “SettPaGultLys” som brukes til å styre et gult lys.
3. Håndtering av “SettPaGultLys”-aksjon:
String value = Homey.value;
: Henter verdien som ble sendt med “SettPaGultLys”-aksjonen. Denne verdien kan brukes til å angi lysstyrken eller andre parametre for det gule lyset.Serial.print("Aksjons verdi: ");
: Skriver ut teksten “Aksjons verdi: ” til den serielle monitoren.Serial.println(value);
: Skriver ut verdien som ble mottatt fra Homey til den serielle monitoren, for feilsøking og verifisering.digitalWrite(32,!digitalRead(32));
: Veksler tilstanden til pinne 32, som sannsynligvis er koblet til det gule lyset. Dette bruker en logisk “ikke”-operasjon for å invertere den gjeldende tilstanden til pinnen.
Oppsummering:
Denne “loop”-funksjonen:
- Oppdaterer Homey-tilkoblingen kontinuerlig.
- Definerer en funksjon for å håndtere “SettPaGultLys”-aksjonen.
- Henter verdien som ble sendt med “SettPaGultLys”-aksjonen.
- Skriver ut verdien til den serielle monitoren for feilsøking.
- Veksler tilstanden til pinne 32 for å styre det gule lyset.
Sender krets
Når knappen trykkes ned skal det gå et signal til Homey om å skru på det gule lyset på mottakerkretsen.
Sender sketch
#include <WiFi.h>
#include <WiFiClient.h>
#include <Homey.h> // Homey biblotek
#define knappePort 33 // Gir porten som overvåker knappen et navn
void setup() {
Serial.begin(115200); // Sette igang serieporten slik at vi kan gi mld eller feilsøke
pinMode(knappePort,INPUT_PULLUP); // Setter pinne 33 som innport og trrekker den høy(3,3V) Knapp ned = 0V
WiFi.begin("Nettverket", "passordet"); // Koble til nettverket ditt med ditt eget nettverksnavn og passord på nettet
while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
// Sjekke status på WiFi, hvis ikke tilkoblet ennå skriv ut prikker........
Serial.print("IP address: ");
Serial.println(WiFi.localIP()); // Nå er du tilkoblet, print IP adressen du er tilkoblet på
Homey.begin("esp32TriggerLys"); // Start opp Homey på ESP32, den blir da synlig for Homey med dette navnet.
}
void loop() {
Homey.loop(); // Kaller på Homey for å sjekke om det er data på vei
if(digitalRead(knappePort) == 0){ // Sjekker om knappen er trykket ned, hvis ja utfør det som står i if setningen.
bool success = Homey.trigger("TriggerLys"); // Sender en trigger til Homey, hvis Homey mottar returneres 1 eller vil suksess = 0
Serial.println("Knapp er trykket ned");
Serial.print("Resultatet fra trigger sendt til Homey: ");
if (success) { // Hvis suksess fra Homey på trigger print suksess
Serial.println("Suksess");
}else{
Serial.println("Mislykket"); // Hvis feil på trigger sdending til Homey print feil
}
}
}
Kodeforklaring
#include <WiFi.h>
#include <WiFiClient.h>
#include <Homey.h>
#define knappePort 33
1. Inkludering av biblioteker:
#include <WiFi.h>
: Inkluderer WiFi-biblioteket, som er nødvendig for å koble til et trådløst nettverk.#include <WiFiClient.h>
: Inkluderer WiFiClient-biblioteket, som brukes til å etablere kommunikasjon med andre enheter over WiFi.#include <Homey.h>
: Inkluderer Homey-biblioteket, som er nødvendig for å kommunisere med Homey smarthussentral.
2. Definisjon av konstant:
#define knappePort 33
: Definerer en konstant kaltknappePort
med verdien33
. Denne konstanten brukes til å angi pinnenummeret til knappen som brukes i koden.
void setup() {
Serial.begin(115200);
pinMode(knappePort,INPUT_PULLUP);
WiFi.begin(“Nettverket”, “passordet”);
while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print(“.”); }
Serial.print(“IP address: “);
Serial.println(WiFi.localIP());
Homey.begin(“esp32TriggerLys”);
}
Forklaring av “setup”-funksjonen:
1. Initialisering:
Serial.begin(115200)
: Initialiserer seriell kommunikasjon med en baudrate på 115200.pinMode(knappePort, INPUT_PULLUP)
: Definerer pinnenummeret til knappen (knappePort
) som inngang med pull-up motstand.
2. Tilkobling til WiFi:
WiFi.begin("Nettverket", "passordet")
: Forsøker å koble til WiFi-nettverket med navnet “Nettverket” og passordet “passordet”.while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
: Venter til WiFi-tilkoblingen er etablert.
3. Skrive ut IP-adresse:
Serial.print("IP address: ")
: Skriver ut teksten “IP address: ” til seriell monitor.Serial.println(WiFi.localIP())
: Skriver ut enhetens IP-adresse til seriell monitor.
4. Initialisering av Homey:
Homey.begin("esp32TriggerLys")
: Initialiserer Homey med enhetens navn “esp32TriggerLys”.
Forklaring av variabler:
knappePort
: Definerer pinnenummeret til knappen.Nettverket
: Navnet på WiFi-nettverket.passordet
: Passordet til WiFi-nettverket.
Denne “setup”-funksjonen:
- Initialiserer seriell kommunikasjon, knappen og WiFi.
- Kobler til et WiFi-nettverk.
- Skriver ut enhetens IP-adresse til seriell monitor.
- Initialiserer Homey med et bestemt enhetsnavn.
void loop() {
Homey.loop();
if(digitalRead(knappePort) == 0){
bool success = Homey.trigger(“TriggerLys”);
Serial.println(“Knapp er trykket ned”);
Serial.print(“Resultatet fra trigger sendt til Homey: “);
if (success) {
Serial.println(“Suksess”);
}else{
Serial.println(“Mislykket”);
}
}
}
1. Oppdatering av Homey:
Homey.loop()
: Oppdaterer Homey-tilkoblingen og håndterer eventuelle mottatte meldinger.
2. Behandling av knappetrykk:
if(digitalRead(knappePort) == 0)
: Sjekker om knappen er trykket ned.bool success = Homey.trigger("TriggerLys")
: Sender en “trigger”-melding til Homey med navnet “TriggerLys”.Serial.println("Knapp er trykket ned")
: Skriver ut en melding til seriell monitor når knappen trykkes.
3. Skrive ut resultat:
Serial.print("Resultatet fra trigger sendt til Homey: ")
: Skriver ut en melding til seriell monitor.if (success) { Serial.println("Suksess"); } else { Serial.println("Mislykket"); }
: Skriver ut “Suksess” eller “Mislykket” til seriell monitor basert på resultatet av “trigger”-meldingen.
Denne “loop”-funksjonen:
- Oppdaterer Homey-tilkoblingen kontinuerlig.
- Venter på knappetrykk.
- Sender en “trigger”-melding til Homey når knappen trykkes.
- Skriver ut resultatet av “trigger”-meldingen til seriell monitor.
Produkter som er brukt i denne artikkelen:
-
ESP32S-Development Module249 kr inkl Mva