Homey Pro og ESP32

Innhold


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:

  1. Installere Homeyduino biblioteket i vårt Arduino IDE
  2. Koble opp 2 stk ESP32 på kjeksbrett
  3. Lage sender sketch
  4. Lage mottaker sketch
  5. Laste ned og installere Homeyduino på vår Homey
  6. Åpne Homey WebApp
  7. Finne og koble sammen Arduino IDE og Homey i WebApp.
  8. 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 kalt LedPin med verdien 32. 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 konstanten LedPin) 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 kalt SettPaGultLys 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 kalt knappePort med verdien 33. 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:

Relaterte poster

Legg igjen en kommentar

0