Relék kapcsolása Amazon Echo Dot + ESP8266 segítségével
2017-12-20T15:53:00+01:00
2017-12-21T23:03:24+01:00
2022-08-10T22:20:32+02:00
Respat
Üdv! Remélem jó helyre nyitottam a témát. Nemrégiben kaptam egy Amazon Alexát, amivel világítást szeretnék kapcsolni. A Philips Hue megoldás nekem drága, és felesleges. Reléket szeretnék kapcsolni vele, amivel a világítás áramellátását tudnám ki-be kapcsolgatni. Az Arduino IDE-t választottam a feladathoz, és egy letöltött kódot. Tökéletesen működik a kód a Wemos ESP8266-os Wifi modulon. Bekapcsolja, kikapcsolja az alkalmazás szerint, de nem vezérli a relét. Nem vagyok túl tapasztalt a kódolásban, ezért hiába próbáltam kapcsolni a relé feszültség szintjét nem sikerült. Ez látható is a kódban, mennyit bénáztam. Hogyan tudnám ezt megoldani? Nem tűnik lehetetlennek, csak nekem nem megy. Előre is köszönöm a segítséget. 

#include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #include <WiFiUdp.h> #include <functional> #include "switch.h" #include "UpnpBroadcastResponder.h" #include "CallbackFunction.h" // prototypes boolean connectWifi(); // Change this before you flash const char* ssid = "wifi"; const char* password = "jelszo"; boolean wifiConnected = false; UpnpBroadcastResponder upnpBroadcastResponder; Switch *office = NULL; Switch *kitchen = NULL; int relayOne = D1; void officeLightsOn(); void officeLightsOff(); void setup() { //led pinMode(D1,OUTPUT); digitalWrite(relayOne, HIGH); //led --- Serial.begin(9600); // Initialise wifi connection wifiConnected = connectWifi(); if(wifiConnected){ upnpBroadcastResponder.beginUdpMulticast(); // Define your switches here. Max 10 // Format: Alexa invocation name, local port no, on callback, off callback office = new Switch("office lights", 80, officeLightsOn, officeLightsOff); Serial.println("Adding switches upnp broadcast responder"); upnpBroadcastResponder.addDevice(*office); upnpBroadcastResponder.addDevice(*kitchen); } } void loop() { if(wifiConnected){ upnpBroadcastResponder.serverLoop(); kitchen->serverLoop(); office->serverLoop(); } } void officeLightsOn() { digitalWrite(relayOne, HIGH); // sets relayOne on } void officeLightsOff() { digitalWrite(relayOne, HIGH); // sets relayOne off } // connect to wifi – returns true if successful or false if not boolean connectWifi(){ boolean state = true; int i = 0; WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); Serial.println(""); Serial.println("Connecting to WiFi"); // Wait for connection Serial.print("Connecting ..."); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); if (i > 10){ state = false; break; } i++; } if (state){ Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); } else { Serial.println(""); Serial.println("Connection failed."); } return state; }
Mutasd a teljes hozzászólást!
Mint előttem már @zizikus leírta, valószínűleg elektronikai a probléma. Egy relét meghúzni sokkal több craft kell, mint egy ledet kapcsolgatni. Ha a ledet már tudod kapcsolgatni, az azt jelenti, hogy szoftveres problémád nincsen. Relét huzigálni viszont külön meghajtó fokozat fog kelleni a relé függvényében. Csinálj közeli fényképeket a relékről jó világításnál (olvasni szeretnénk a feliratot rajtuk), amiket használnál, és linkeld fel a fotókat.
Mutasd a teljes hozzászólást!

  • A 'kitchen'-t nem példányosítod 'new'-al. Így NULL pointer-t dereferálsz, ami undefined behaviour.
    Mutasd a teljes hozzászólást!
  • Köszönöm a válaszod. A kitchent nem is szeretném egyelőre használni, direkt vettem ki ezt-azt.
    Íme az eredeti. Csak azt szeretném tudni hogy a relét hogyan tudnám bekapcsolni. :)

    #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #include <WiFiUdp.h> #include <functional> #include "switch.h" #include "UpnpBroadcastResponder.h" #include "CallbackFunction.h" // prototypes boolean connectWifi(); //on/off callbacks bool officeLightsOn(); bool officeLightsOff(); bool kitchenLightsOn(); bool kitchenLightsOff(); // Change this before you flash const char* ssid = "1111"; const char* password = "11111"; boolean wifiConnected = false; UpnpBroadcastResponder upnpBroadcastResponder; Switch *office = NULL; Switch *kitchen = NULL; bool isOfficeLightsOn = false; bool isKitchenLightstsOn = false; void setup() { Serial.begin(9600); // Initialise wifi connection wifiConnected = connectWifi(); if(wifiConnected){ upnpBroadcastResponder.beginUdpMulticast(); // Define your switches here. Max 10 // Format: Alexa invocation name, local port no, on callback, off callback office = new Switch("office lights", 80, officeLightsOn, officeLightsOff); kitchen = new Switch("kitchen lights", 81, kitchenLightsOn, kitchenLightsOff); Serial.println("Adding switches upnp broadcast responder"); upnpBroadcastResponder.addDevice(*office); upnpBroadcastResponder.addDevice(*kitchen); } } void loop() { if(wifiConnected){ upnpBroadcastResponder.serverLoop(); kitchen->serverLoop(); office->serverLoop(); } } bool officeLightsOn() { Serial.println("Switch 1 turn on ..."); digitalWrite(D1, HIGH); // turn on relay with voltage HIGH isOfficeLightsOn = true; return isOfficeLightsOn; } bool officeLightsOff() { Serial.println("Switch 1 turn off ..."); digitalWrite(D1, LOW); // turn off relay with voltage LOW isOfficeLightsOn = false; return isOfficeLightsOn; } bool kitchenLightsOn() { Serial.println("Switch 2 turn on ..."); isKitchenLightstsOn = true; return isKitchenLightstsOn; } bool kitchenLightsOff() { Serial.println("Switch 2 turn off ..."); isKitchenLightstsOn = false; return isKitchenLightstsOn; } // connect to wifi – returns true if successful or false if not boolean connectWifi(){ boolean state = true; int i = 0; WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); Serial.println(""); Serial.println("Connecting to WiFi"); // Wait for connection Serial.print("Connecting ..."); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); if (i > 10){ state = false; break; } i++; } if (state){ Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); } else { Serial.println(""); Serial.println("Connection failed."); } return state; }
    Mutasd a teljes hozzászólást!
  • Ha az arduino kimenetére egy LED-et kötsz akkor az az elvártak szerint dolgozik?

    (Könnyen lehet, hogy nem a kódban hanem az elektronikában van a hiba)
    Mutasd a teljes hozzászólást!
  • Egyébként villogtatja a relén lévő ledet, néha akaratlanul is :) Szóval nem azzal van a gond, Én is gondoltam rá.
    Mutasd a teljes hozzászólást!
  • 1: Ez a két függvény pontosan ugyanazt csinálja - biztos hogy ezt szeretnéd?

    void officeLightsOn() { digitalWrite(relayOne, HIGH); // sets relayOne on } void officeLightsOff() { digitalWrite(relayOne, HIGH); // sets relayOne off }
    2: Ha a setup részben nem sikerül a wifi csatlakozás, vagy menet közben valamiért elszáll akkor az eszköz nem próbál meg visszacsatlakozni a hálózatra.
    3: Ahogy már írták előttem is a NULL nem szerencsés - még debug kódban sem. Inkább remeld ki azt ami nem kell, nehogy a NULL bekavarjon.
    Mutasd a teljes hozzászólást!
  • Ez volna?

    https://wiki.wemos.cc/products:lolin32:lolin32_pro#pin


    Mert ha olyan relét használsz, ami 5V-os akkor gond van!

    "All of the IO pins run at 3.3V."

    Vagy vettél külön WIFI relay modult? Vagy sima különálló reléket használsz?
    Mutasd a teljes hozzászólást!
  • A másik ami eszembe jutott:

    Ha az Arduino IDE nem megfelelő verziószámú, vagy ha az megfelelő ugyan, de a cél board nem jól lett kiválasztva, akkor gond lehet. Főleg a láb kiosztásoknál. A D1 más-más lapokon eltérő szám lehet, ezért direktben használd a láb számát! pl D1 helyett 12, vagy 10, amire kötötted. 
    Most nem ugrik be pontosan, de a TX lábat lehet erre használni? Szerintem nem, keress valami másik digitális lábat erre a célra.

    Nézz utána a output_pullup-nak is, mikor mire használják, és miért fontos. Lehet neked nem kell, de nem árt tudni.

    De lehet mindent félreértek, mert nem tudom mi az az Alexa. Meg azt sem tudom pontosan milyen elemekből van felépítve mindez. Csak az eddigi tapasztalatokból szemezgetek. Mindezt én annó különálló modulokból raktam össze, nem vettem egybeépített WIFI relay modult.
    Mutasd a teljes hozzászólást!
  • Az Amazon Alexa egy okos otthon vezérlő. Központi egység, és perifériák.

    https://www.amazon.com/Amazon-Echo-And-Alexa-Devices/b?ie=UTF8&node=..

    Erős marketingjük van, összességében drága cucc, az üzletpolitikájuk nem támogatja a barkácsolósdit (marketing gyanánt a központi vezérlőt adják olcsóbban).
    Mutasd a teljes hozzászólást!
  • Mint előttem már @zizikus leírta, valószínűleg elektronikai a probléma. Egy relét meghúzni sokkal több craft kell, mint egy ledet kapcsolgatni. Ha a ledet már tudod kapcsolgatni, az azt jelenti, hogy szoftveres problémád nincsen. Relét huzigálni viszont külön meghajtó fokozat fog kelleni a relé függvényében. Csinálj közeli fényképeket a relékről jó világításnál (olvasni szeretnénk a feliratot rajtuk), amiket használnál, és linkeld fel a fotókat.
    Mutasd a teljes hozzászólást!
  • Először is köszönöm a rengeteg választ. Azt sem tudom hol kezdjem. A beépített ledet sem akarja már villogtatni. De most már meghúz a relé. Amit írtatok, az a függvény aminek mindkét értéke HIGH az az Én kódomban jelenleg át van írva. A NULL-os dolognak utána nézek, mert nem nagyon értem a funkcióját/értelmét. Az alábbi alkatrészeket használom. Mint momdtam előzőleg, a wifi modul kommunikál az Alexa alkalmazással. Ha bekapcsoltatom vele, mutatja hogy ki vagy be van kapcsolva. Egyébként videókban láttam hogy működik, kommentekben szintén több embernek is, de van aki hasonlóan járt mint Én. 

    Wifi module (wemos)
    http://www.kepfeltoltes.eu/images/hdd1/2017/12/21/996Screenshot_20171221_14.png

    Relay module
    http://www.kepfeltoltes.eu/images/hdd1/2017/12/21/929Screenshot_20171221_14.png

    Amikor villog a beépített led, (írás után, írás közben) akkor a relén levő zöld led is villog, azaz a relé tekercs meghúz. Tegnap órákon át kísérleteztem. Mindenhol utánanéztem.

    Van mellé még néhány fájl is, amik kellenek hozzá. Általában .h kiterjesztésű.
    Mutasd a teljes hozzászólást!
  • Most akkor mi nem jó még ? Olyan relé modulom nekem is van azt hiszem itt, csak a képeden pont nem látszanak a tüskék, ahol a tápot kapja, meg a vezérlő jelet. 

    Ez 5V-os modul. Jel elég neki a 3V3-as procikból is, mert egy sima tranzisztort kapcsolgat ki, be, ami a relét húzza meg. Hardverileg ha jó helyre kötötted, annak mennie kellene legalábbis.

    hestore-ból vetted ?
    Mutasd a teljes hozzászólást!
  • Aliexpressen vásároltam mindent. Már régebben, de tökéletesen működik az Arduino Megaval. 
    Szóval azzal nem lehet gond. Az elektronikus dolgokkal nincs problémám, mivel egyébként villanyszerelő vagyok. Inkább a kóddal lehet a probléma. Nem tudom ezek a relék mennyire bírják hosszútávon mondjuk a 16 ampert, ezért inkább csak egy MK behúzó tekercsét szeretném működtetni vele. Arra meg bőven elég.
    D1-re kötöttem, azt hiszem az a kettes vagy ötös pin. Fejből nem tudom, de megnéztem. D1 helyett írtam már azt is. Több kódból is kókányoltam már össze, de semmi. A relét egyszerűen sehogyan sem kapcsolja.
    Mutasd a teljes hozzászólást!
  • Éppen ESP8266-ot hegesztek én is, egyébként programozó lennék, meg amatőr villamos mérnök (is) :)

    Nem túl nagyok ezek még nem szedtem szét, lehet nem sok ezüst van az éprintkező pogácsájában, meg az a maximum amper lehet nem tesz neki jót, illetve a kapcsolgatás miatt az ív keletkeésekor egy kicsit roncsolódik, erre plusz szűrést téve lehet növelhető lenne az élettartama, de nme drágák ezek, annyira lehet nem érdemese belemélyülni anyagilag, ha oylan helyen van, hogy könnyen cserélhető . :)
    Mutasd a teljes hozzászólást!
  • írj egy rövidke teszprogramot amiben a relé ki és bekapcsolást hívod meg felváltva másodpercenként - így tisztázni tudod a pin kérdést is.
    Mutasd a teljes hozzászólást!
abcd