Fjernstyr hjemmet ditt med ESP8266

Med den meget lille, og strømgjerrige ESP8266 modulen, eller med NodeMCU kortet, kan du utvikle en rekke forskjellige type løsninger. Begge kortene har innebygget WiFi. Ønsker du en varsling når postmannen har levert posten, når noen har åpnet døren, styre garasjeporten, eller har du andre ting du ønsker å styre eller måle? Mulighetene er uttallige.

ESP8266
– superliten WiFi modul

Kjenner du til Arduino, og har du kanskje porgrammert en Arduino mikrokontroller, så fikser du lett ESP8266 også. NodeMCU er en komplett enhet som inneholder “hovedhjernen” ESP8266, men du kan også gjøre det samme med ESP8266 modulen alene. Enkelt forklart er fordelen med NodeMCU er at den kan kobles rett til PC via USB porten, og at den har innebygget spenningsregulator.

Denne YouTube videoen viser noen av mulighetene med NodeMCU:

Dør eller postkassevarsling

NodeMCU/ESP8266 modulen kan konfigureres til å snakke med tjenester som feks IFTTT og IFTTT Maker. For eksempel gi deg et varsel dersom noen har åpnet døren, garasjeporten, eller rett og slett når postmannen har levert posten eller pakken du venter på.

styr enheten via Blynk biblioteket…

Ønsker du å forenkle programmeringsprosessen, og styre enhetene via en app, kan man installere Blynk biblioteket: https://blynk.io/en/getting-started

Det finnes som nevnt utallige muligheter med utviklingskortene NodeMCU, ESP8266, Arduino og så videre. Så her er det bare fantasien som setter begresningene.
Dette er også enheter som kan bruke meget lite strøm, og dersom du benytter deg av deepsleep benytter enheten helt ned mot ~20 uA!

Her er eksempel på en kode som har blitt benyttet til dør/postkassevarsling (inkl måling av batterispenning, og tilleggssensor). Det er resett pin som starter prosessen.

Dør eller postkassevarsling

/*
 * ESP8266 dør, garasjeport eller postkassevarsler
 * www.elkim.no
 */
 
#include <ESP8266WiFi.h>

// Erstatt ssid og password med dine wifi instillinger
const char* ssid     = "MittWIFI";
const char* password = "minkode";

/* 
 * Denne koden benytter maker.ifttt.com funksjonen for pushvarlsing til
 * telefonen, når innporten blir aktivert:
 */
const char* resource = "/trigger/POSTEN/with/key/asdfsdfsdfsdf6mMD_B?value1=";

// Adressen til Maker Webhooks IFTTT
const char* server = "maker.ifttt.com";

/* 
 * analog pin er i dette tilfellet blitt benyttet til å lese av strømmen på
 * batteriet, rett og slett ved hjelp av en spenningsdeler (google voltage
 * divider). Husk å benytte motstad med høyest mulig ohm, for at den skal
 * trekke minst mulig strøm fra batteriet. Du bør også holde deg under max 
 * 1v på innporten. Noen utviklingskort takler opptil 3.3v
 */
int analogPin = A0; 
int val = 0; 

// Her kan du definere ohm på spenningsdeler, slik at utgangsspenning blir
// korekt
float voltage;
float R1 = 2000000.0;
float R2 = 100000.0;

void setup() {
  Serial.begin(115200); 

// vi hopper over loop og kjører aktuelle koder en gang (og så hopper
// tilbake til deep sleep for å spare strøm.
  readvoltage ();
  initWifi();
  makeIFTTTRequest();

// Deep sleep mode inntil RESET pin blir koblet til et LOW signal
  ESP.deepSleep(0);
}

void loop() {
// vi kjører koden direkte under, så vi kjører ikke noe kode som skal 
// "loopes".
}

void readvoltage() {

val = analogRead(analogPin);  // leser spenningen på batteriet
  Serial.println(val);          // for debug

/* 
her kommer beregningen av det som leses av. Svaret på spenningsnivået fra analogport er delt opp i 1024 biter (0-1023) så beregningen under gjør dette om til volt.
*/
voltage = val * (3.3 / 1024)*((R1 + R2)/R2);
Serial.println(voltage); // viser spenningen dersom du er tilkoblet via seriellport (eller USB som også er seriell)
  
}

void initWifi() {
  Serial.print("Connecting to: "); 
  Serial.print(ssid);
  WiFi.begin(ssid, password);  

  int timeout = 10 * 4; // 10 seconds
  while(WiFi.status() != WL_CONNECTED  && (timeout-- > 0)) {
    delay(250);
    Serial.print(".");
  }
  Serial.println("");

  if(WiFi.status() != WL_CONNECTED) {
     Serial.println("Failed to connect, going back to sleep");
  }

  Serial.print("WiFi connected in: "); 
  Serial.print(millis());
  Serial.print(", IP address: "); 
  Serial.println(WiFi.localIP());
}

// Gjør en HTTP forespørsel til IFTTT websiden
void makeIFTTTRequest() {
  Serial.print("Connecting to "); 
  Serial.print(server);
  
  WiFiClient client;
  int retries = 5;
  while(!!!client.connect(server, 80) && (retries-- > 0)) {
    Serial.print(".");
  }
  Serial.println();
  if(!!!client.connected()) {
     Serial.println("Failed to connect, going back to sleep");
  }
  
  Serial.print("Request resource: "); 
  Serial.println(resource);
  client.print(String("GET ") + resource + voltage +
                  " HTTP/1.1\r\n" +
                  "Host: " + server + "\r\n" + 
                 "Connection: close\r\n\r\n");
                   
  int timeout = 5 * 10; // 5 seconds             
  while(!!!client.available() && (timeout-- > 0)){
    delay(100);
  }
  if(!!!client.available()) {
     Serial.println("No response, going back to sleep");
  }
  while(client.available()){
    Serial.write(client.read());
  }
  
  Serial.println("\nclosing connection");
  client.stop();
}

2 kommentarer til «Fjernstyr hjemmet ditt med ESP8266»

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

X