Wifi-relais
Om vanaf een afstand een relais aan te schakelen kun je een relais koppelen aan een ESP8266. Handig om zo bijvoorbeeld je computer thuis aan/uit te kunnen schakelen vanaf je mobiel.
Wat gaan we doen?
We maken een embedded webserver waarmee we een relais kunnen schakelen.
Benodigdheden
1x Wifi-relais ⇗
De Arduino IDE
Om een ESP8266 te kunnen programmeren moet we eerst de Arduino IDE daartoe inrichten.Zie dit artikel hoe je dat kunt doen.
Programmeren
Als eerste test maakte ik een simpel programma waarmee het relais een tijdje aan en uit wordt geschakeld. Het is altijd slim om eerst een paar kleine testjes (POC’s) te maken zodat je zeker weet dat de hardware werkt.
Dit is de code:
// Wifi-relais demo // (C) 2018 Bikkel & Ellis #define RELAIS 0 void setup() { pinMode(RELAIS,OUTPUT); } void loop() { // Schakel aan digitalWrite(RELAIS, HIGH); delay(1000); // Schakel uit digitalWrite(RELAIS, LOW); delay(2000); }
Webserver
En dan nu de webserver. Een supermooie toepassing van de ESP8266 is dat je er een webserver op kunt zetten. Voor het relais maakte ik een simpele server die ik vanuit thuis via mijn telefoon (en via de PC ook natuurlijk) kan bereiken om zo het relais aan en uit te kunnen schakelen.

Hieronder staat de code van de webserver. Let op: programmeer hem met draadbrug zoals hier staat beschreven, haal dan de programmer van de USB af, haal dan de ESP8266 uit de programmer en plaats de ESP8266 terug in het Wifi relais. En dan pas de spanning (5V) aansluiten op het Wifi relais.
Kijk vervolgens in de router welk IP-adres je relais heeft gekregen en ga er dan met je PC of met je telefoon naar toe.
#include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <ESP8266mDNS.h> // Deze moet je invullen met de gegevens van jouw draadloos netwerk const char* ssid = "Ziggo123"; const char* password = "geheim"; ESP8266WebServer server(80); #define RELAIS 0 // GPIO0 void Homepagina() { String Html =String("Welkom bij mijn relais!")+ String("<div><a href=/Aan>Relais aan</a></div>")+ String("<div><a href=/Uit>Relais uit</a></div>"); server.send(200, "text/html", Html); } void SchakelAan() { digitalWrite(RELAIS, HIGH); server.send(200, "text/plain", "Relais is aan!"); } void SchakelUit() { digitalWrite(RELAIS, LOW); server.send(200, "text/plain", "Relais is uit!"); } void handleNotFound(){ server.send(404, "text/plain", "Ongeldige opdracht"); } void setup(void){ delay(1000); // Deze laten staan (dan gaat het uploaden van nieuwe versies beter) pinMode(RELAIS, OUTPUT); digitalWrite(RELAIS, LOW); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); // Wacht op verbinding met draadloos netwerk while (WiFi.status() != WL_CONNECTED) { delay(500); } // Hier zet je al je webpagina's neer server.on("/", Homepagina); server.on("/Aan", SchakelAan); server.on("/Uit", SchakelUit); server.onNotFound(handleNotFound); server.begin(); } void loop(void){ server.handleClient(); }
Hallo,
De testcode geüpload.
Prik ik de 8266 print op de relais-print gebeurt er niets ondanks er wel 3.3 V spanning op de juiste pen staat. Maar geen knippersingaal op GPIO0.
Prik ik het printje op de programmer-print en zet ik daar spanning op is het knippersingaal wel aanwezig op GPIO0.
Verbind ik dan GPIO0 met een los draadje door met de relais-print (GPIO0) dan knippert het relais wel.
Enig idee hoe dat kan? Het lijkt net of de software van de programmer mee moet in de 8266.
Met vriendelijke groet,
Jan.
Deze toepassing zou ik graag gebruiken en heb al het nodige daarvoor.
Bij het uoloaden loopt het jammer genoeg fout en krijg ik volgend foutmeldingen:
Arduino: 1.8.8 (Windows 8.1), Board:”Generic ESP8266 Module, 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), dtr (aka nodemcu), 26 MHz, 40MHz, DOUT (compatible), 1MB (FS:64KB OTA:~470KB), 2, nonos-sdk 2.2.1+100 (190703), v2 Lower Memory, Disabled, None, Only Sketch, 115200″
Executable segment sizes:
IROM : 255376 – code in flash (default or ICACHE_FLASH_ATTR)
IRAM : 26804 / 32768 – code in IRAM (ICACHE_RAM_ATTR, ISRs…)
DATA : 1264 ) – initialized variables (global, static) in RAM/HEAP
RODATA : 932 ) / 81920 – constants (global, static) in RAM/HEAP
BSS : 25160 ) – zeroed variables (global, static) in RAM/HEAP
De schets gebruikt 284376 bytes (29%) programma-opslagruimte. Maximum is 958448 bytes.
Globale variabelen gebruiken 27356 bytes (33%) van het dynamisch geheugen. Resteren 54564 bytes voor lokale variabelen. Maximum is 81920 bytes.
esptool.py v2.8
Serial port COM3
Connecting…….._____….._____….._____….._____….._____….._____…..____Traceback (most recent call last):
File “C:\Users\Looitje\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3/tools/upload.py”, line 65, in
esptool.main(cmdline)
File “C:/Users/Looitje/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/2.6.3/tools/esptool\esptool.py”, line 2890, in main
esp.connect(args.before)
File “C:/Users/Looitje/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/2.6.3/tools/esptool\esptool.py”, line 483, in connect
raise FatalError(‘Failed to connect to %s: %s’ % (self.CHIP_NAME, last_error))
esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header
esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header
_
Dit rapport zou meer informatie bevatten met
“Uitgebreide uitvoer weergeven tijden compilatie”
optie aan in Bestand -> Voorkeuren.
Wat doe ik mis, misschien ergens een verkeerde instelling?
Alvast bedankt
werkt niet waar vind je die ip adres niet in mijn router
ik wil graag gaan stoeien met deze wifi relaisschakelaar
ik heb er een van mijn zoon gekregen.
het is me gelukt om met de tip van het draadje de sketch te programmeren
echter verder kan ik nog niks ?
ik wil graag het ip adres van deze ESP8266 mnodule binnen de range van mijn eigen IP adressen brengen
maar hoe doe ik dat ? Hoe kan ik deze module van een ander IP adres voorzien
En dan de bediening
ik wil graag vanaf mijn smartphone deze wifi relais module kunnen bedienen, maar dat lukt nu ook nog niet
graag uw adviezen in deze