Infarot signale mit Pause senden????

Halli Hallo... ich bin ganz ganz neu in diesem segment Arduino und Co. Alles bagnn damit das ich sowas im einsatz mit einer WS28B Lichterstripes gesehen habe.....was ich leider noch nicht hinbekommen habe und dann die vielfahlt mit Alexa.....

Alexa wohnt nun bei mir und soll einige dinge schlaten und tut das auch schon gut... leider nur fehlen mir die grundlagen um sowas zu programmieren. Jetzt hoffe ich auf eure Hilfe.

Problem 1: Beim einschalten meines Beamers muss ich die Fernbedienung ca. 4 - 5 sek. gedrückt halten. Ich habe es versucht im Programm einzubinden nur leider ohne erfolg. Kleiner erfolg war das es ein bissel länger gesendet wird wenn ich bei der (Adresse, BIT, +100) diese werte eintrage. Leider ist diese Zeit dennoch zu kurz. wenn der Wert +100 auf +150 oder höher gestellt wird, dann wird nach ausübüng dieses Befehls der Mikrocontroller rebootet.... warum auch immer. Was mache ich hier falsch???

Problem 2: Beim ausschalten meines Beamers brauche ich zwei Tasten. Als erstes "off" danach in einem kleinen abstand die "enter" taste gedrückt werden. Ich habe schon den befehl delay hoch gesetzt und trotzdem gibt es keine pause. Leider erkenne ich auch dort nicht meinen Fehler.

Hardware: Wemos D1 mini

Hier mien Code

/*
   Autor:   Christian Kronen
   Video:   https://youtu.be/48RW4JHMXUA , https://youtu.be/9KPloCNosIk
   Datum:   25.März 2017
   Version: 1.0
   Ort:     Aachen

   Verwendetes Board: NodeMCU.
   Weitere Teile: 433 MHZ Funksender und Empfängermodul MX-FM-5V
                  IR LED mit 940nm
                  IR Empfänger V38238
                  1 Widerstand (muss individuell berechnet werden - ca. 150 OHM)
                  Breadboard und Steckbrücken
                  Amazon Echo


   Ich bin nicht der Autor der verwendeten Bibliotheken:

      https://github.com/sui77/rc-switch/archive/master.zip
      https://github.com/me-no-dev/ESPAsyncTCP/archive/master.zip
      https://github.com/me-no-dev/ESPAsyncUDP/archive/master.zip
      https://github.com/me-no-dev/ESPAsyncWebServer/archive/master.zip
      https://bitbucket.org/xoseperez/fauxmoesp/downloads
      https://github.com/markszabo/IRremoteESP8266 by Ken Shirriff (C)

   Treiber für das Board: http://sparks.gogo.co.nz/ch340.html

   Ich übernehme keine Gewähr für die Richtigkeit, Vollständigkeit und Aktualität der bereitgestellten Inhalte.
   Die Nutzung und das nachmachen der Inhalte aus dem Video& der Beschreibung erfolgt auf eigene Gefahr des Nutzers.
   Schaue niemals in die IR LED!


*/

#include <ESP8266WiFi.h>
#include "fauxmoESP.h"

#include <IRremoteESP8266.h> //by Ken Shirriff (C) NEU

#define WIFI_SSID "************"
#define WIFI_PASS "***********"

fauxmoESP alexawifi;


IRsend IRLED(4); // IRLED angeschlossen am D2 Pin (GPIO4) - NEU


void wifiSetup() {

                           //******************************************************
                           //****                  W-Lan Setup                 ****
                           //******************************************************

  WiFi.mode(WIFI_STA);

  Serial.printf("Verbindungs zu %s wird aufgebaut ", WIFI_SSID);

  WiFi.begin(WIFI_SSID, WIFI_PASS);

  while (WiFi.status() != WL_CONNECTED) {
    Serial.print("*");
    delay(100);
  }
  Serial.println("");
  Serial.printf("Verbunden! SSID: %s, IP Adresse: %s\n", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str());
}

void anfrage(uint8_t device_id, const char * device_name, bool state) {
  Serial.print("Gerät: ");
  Serial.println(device_name);
  Serial.print("Status: ");
//-----------------------------------------------------------------------------------------------------------------------------------------------
                           //*******************************************************
                           //****             Geräte EIN Schalten               ****
                           //*******************************************************

 if (state) {   
   if(device_id == 0) { //Beispiel IR Geräte schalten - NEU
    Serial.println("AN");

    //Samsung
    IRLED.sendSAMSUNG(0xE0E040BF, 32);        //Samsung Fernseher AN Schalten

    delay(50);
  }
else if (device_id == 1) { 
    Serial.println("AN");

    //Samsung
    IRLED.sendSAMSUNG(0xE0E0E01F, 32);        //Samsung Fernseher lauter

    delay(50);
  }
 else if (device_id == 2) { 
    Serial.println("AN");

    //Samsung
    IRLED.sendSAMSUNG(0xE0E0D02F, 32);        //Samsung Fernseher leiser

    delay(50);
  }
  else if (device_id == 3) { 
    Serial.println("AN");

    //NEC Beamer
    IRLED.sendNEC(0x189710EF, 32, +100);      //NEC Beamer EIN Schalten
        
    delay(50);
  }
  else if (device_id == 6) { 
    Serial.println("AN");

    //Harman Kardon
    IRLED.sendNEC(0x10E817E, 32);        //Receiver Radio

    delay(50);
  }
 }

                           //*******************************************************
                           //****             Geräte AUS Schalten               ****
                           //*******************************************************
else { 


  if(device_id == 0) { //IR Geräte ausschalten
    Serial.println("AUS");

  //Samsung
  IRLED.sendSAMSUNG(0xE0E040BF, 32);             // Samsung Fernseher AUS Schalten

  delay(50);
  }
if(device_id == 3) { //IR Geräte ausschalten
    Serial.println("AUS");

  //NEC BEamer
  IRLED.sendNEC(0x189728D7, 32, +20);                // NEC Beamer AUS Schalten
  delay(50000);
    
  IRLED.sendNEC(0x1897E817, 32, +50);                // NEC Beamer ENTER zum AAUS Schalten
  delay(500000);
  Serial.println("Enter");
  }
if(device_id == 3) { //IR Geräte ausschalten
    Serial.println("AUS");

  //Harman Kardon Radio
  IRLED.sendNEC(0x10EF906, 32, +20);                // Harman Kardon Radio
  delay(50000);
    
  }
 }
}

void setup() {

  Serial.begin(115200,SERIAL_8N1,SERIAL_TX_ONLY);
  Serial.println("Nach dem Verbinden, sage 'Alexa, schalte <Gerät> an' oder 'aus'");

//  mySwitch.enableTransmit(5);

  IRLED.begin(); // NEU

  wifiSetup();
  geraete();
                //***************************************************
                //****             Geräteliste                   ****
                //***************************************************
 } 
void geraete() {
   
  alexawifi.addDevice("Fernseher"); //ID 0  
  alexawifi.addDevice("TV Lauter"); //ID 1 
  alexawifi.addDevice("TV Leiser"); //ID 2 
  alexawifi.addDevice("Beamer"); //ID 3 
  alexawifi.addDevice("Receiver"); //ID 4
  
  alexawifi.onMessage(anfrage);
  
 }
void loop(){ 

  alexawifi.handle();
}

Ich bedanke mich ganz doll für eure Hilfe... p.s.: suche schon benutzt und leider nix passenden gefunden.

Ciao Bluelinux

Wenn Du uns noch sagen könntest, welchen Arduino Du benutzt, wäre das hilfreich.

Den Sketch bitte in Codetags, nicht in quote einschließen. [code] davor und [/code] dahinter - ohne den *

Gruß Tommy

Danke für die erste schnelle Reaktion und dem Verbesserungsvorschlag... ich habe es geändert und noch schnell hinzu gefügt das es sich dabei um ein Wemos D1 mini Board handelt....

THX @Tommy56

Die ESP8266 haben einen Watchdog laufen. Wenn der nicht rechtzeitig resetet wird, booten die neu.
Evlt. ist Deine Lib darauf nicht angepasst.
Entweder Du findest eine an den ESP8266 angepasste Version oder Du musst es selbst machen.

In der Routine, in der Du die Wartezeit +100 einstellst, mal schauen, ob da eine Schleife drin ist, die das Warten realisiert. Dort mal versuchsweise yield(); eintragen.

Der ESP8266 braucht Zeit, um die WiFi-Verbindung und ähnliches zu handeln. Dafür ist der yield()-Aufruf da.
In delay() soll er beim ESP8266 mit drin sein.

Gruß Tommy

Tommy56:
Die ESP8266 haben einen Watchdog laufen. Wenn der nicht rechtzeitig resetet wird, booten die neu.
Evlt. ist Deine Lib darauf nicht angepasst.
Entweder Du findest eine an den ESP8266 angepasste Version oder Du musst es selbst machen.

In der Routine, in der Du die Wartezeit +100 einstellst, mal schauen, ob da eine Schleife drin ist, die das Warten realisiert. Dort mal versuchsweise yield(); eintragen.

Der ESP8266 braucht Zeit, um die WiFi-Verbindung und ähnliches zu handeln. Dafür ist der yield()-Aufruf da.
In delay() soll er beim ESP8266 mit drin sein.

Gruß Tommy

Puuuhhhhh auweia.... also momentan verstehe ich nur Bahnhof....das mit dem yield() sieht dann so aus?

   //NEC Beamer
    yield() IRLED.sendNEC(0x189710EF, 32, +100);      //NEC Beamer EIN Schalten
        
    delay(50);


oder so

   //NEC Beamer
    IRLED.sendNEC(0x189710EF, 32, +100);      //NEC Beamer EIN Schalten
    yield()    
    delay(50);

ich habe leider so gar keine ahnung offensichtlich :open_mouth:

hi,

leider kann ich Dir bei Deinem problem nicht helfen, aber vielleicht Du mir bei meinem:

bei mir wohnt jetzt auch ein echo dot, und ich bin grad dabei, mir alles zusammenzugoogeln.

hast Du Dich für die anbindung alexa <> wemos bei amazon developer und AWS lambda anmelden müssen oder war das durch die simulation mit "fauxmoESP" nicht nötig?

also nur wemos bespielen und dann alexa suchen lassen?

gruß stefan

EDIT: hab' mir das jetzt mal ergoogelt. scheint ja einfach zu funktionieren. dann werd' ich mal suchen, ob es eine so simple lösung auch für raspberry und node.js gibt. schlimmstenfalls häng ich den wemos an den raspberry und verbinde darüber mit alexa.

In dem ESP delay ist ein yield() eingebaut, dein Problem ist dass IRLED.sendNEC() zu lange kein yield() aufruft.

Mein Vorschlag für 500 IR Befehle (ungetestet):

for (int i = 0; i<10; i++) {
  IRLED.sendNEC(0x189710EF, 32, 50);
  yield();
}

Eisebaer:
hi,

leider kann ich Dir bei Deinem problem nicht helfen, aber vielleicht Du mir bei meinem:

bei mir wohnt jetzt auch ein echo dot, und ich bin grad dabei, mir alles zusammenzugoogeln.

hast Du Dich für die anbindung alexa <> wemos bei amazon developer und AWS lambda anmelden müssen oder war das durch die simulation mit "fauxmoESP" nicht nötig?

also nur wemos bespielen und dann alexa suchen lassen?

gruß stefan

EDIT: hab' mir das jetzt mal ergoogelt. scheint ja einfach zu funktionieren. dann werd' ich mal suchen, ob es eine so simple lösung auch für raspberry und node.js gibt. schlimmstenfalls häng ich den wemos an den raspberry und verbinde darüber mit alexa.

Halli Hallo...
Ich hoffe ich kann Dir helfen... also ich habe mich nirgendswo angemeldet. im prinzip wemos bespielt und los geht es.... guck dir mal das Youtube Video dazu an von Ihm an..https://youtu.be/9KPloCNosIk.. so habe ich es auch gemacht

wenn ich helfen kann dann sehr gerne bin aber auch noch sehr frisch

Whandall:
In dem ESP delay ist ein yield() eingebaut, dein Problem ist dass IRLED.sendNEC() zu lange kein yield() aufruft.

Mein Vorschlag für 500 IR Befehle (ungetestet):

for (int i = 0; i<10; i++) {

IRLED.sendNEC(0x189710EF, 32, 50);
 yield();
}

Alles klar ich werde es mal versuchen wenn ich zuhause bin... ich möchte mich auf jedenfall schon mal für die tolle hilfe bedanken.

hi,

ich hab' da ja einiges gefunden. auch für raspberry mit node.js.

allerdings scheint alles ohne direkte verbindung zu amazon (mit developer und AWS lambda) nur die befehle ein/aus zu kennen. licht zu dimmen oder der heizung eine temperatur anzusagen scheint leider nicht möglich zu sein.

mir wäre das offline wie Deine lösung lieber. ein mikro im wohnzimmer erinnert mich sehr an orwells 1984. andererseits liegt das handy auch im wohnzimmer grübel.

na, ich werd' mal weitersuchen...

gruß stefan

Soo ich habe dann mal anstelle des "delay(50)" gegen "yield()" ausgetauscht und musste leider feststellen das es leider damit auch nicht klappt.... hmmm sehr schade irgendwie.... vielleicht wende ich das auch falsch an... eventuell kann mir da jemand helfen beim schreiben... würde mich sehr freuen

Hallo,
ich sehe den Fehler ja an anderer Stelle...
"Beim einschalten meines Beamers muss ich die Fernbedienung ca. 4 - 5 sek. gedrückt halten"

ja und?

Was sendet die denn in den 4-5 sek? Bei IR-Fernbedienung gibt es KEIN- bis, könnte, u.U. oder vielleicht.
Also, besorge Dir doch einmal die gesendete Sequenz- und versuche nicht diese zu zerlegen.
IR-Fernbedienung ist immer ZeitKritisch u.A.
Ist Deine IR-Harware denn genau auf die Empfänger abgestimmt? Du kannst nicht einfach eine IR-LED nehmen
und hoffen es läuft schon...
Das was Ihr da bis jetzt macht, wird in hundert Jahren nicht zuverlässig laufen...
Du brauchst nur ein vernünftiges IR-Signal. In so ein Signal gehört KEIN "delay() oder "yield()" oder eine
andere Zauberei...
Gruß und Spaß
Andreas

SkobyMobil:
Hallo,
ich sehe den Fehler ja an anderer Stelle...
"Beim einschalten meines Beamers muss ich die Fernbedienung ca. 4 - 5 sek. gedrückt halten"

ja und?

Was sendet die denn in den 4-5 sek? Bei IR-Fernbedienung gibt es KEIN- bis, könnte, u.U. oder vielleicht.
Also, besorge Dir doch einmal die gesendete Sequenz- und versuche nicht diese zu zerlegen.
IR-Fernbedienung ist immer ZeitKritisch u.A.
Ist Deine IR-Harware denn genau auf die Empfänger abgestimmt? Du kannst nicht einfach eine IR-LED nehmen
und hoffen es läuft schon...
Das was Ihr da bis jetzt macht, wird in hundert Jahren nicht zuverlässig laufen...
Du brauchst nur ein vernünftiges IR-Signal. In so ein Signal gehört KEIN "delay() oder "yield()" oder eine
andere Zauberei...
Gruß und Spaß
Andreas

Danke erst mal für deinen Post....
Also ich muss mich nochmal etwas korrigieren denn in der Anleitung steht sogar das man nur 2sec. die ON Taste gedrückt halten muss. Was genau in den 2 sek passiert kann ich nicht sagen. Ich weiss leider auch nicht woher ich den Code bekomme. Ich bin jetzt auf die Idee gekommen was vielleicht auch sinnvoller ist, den Beamer über die RS232 schnittstelle zu steuern. Leider ist auch da mein wissen nicht so groß. Die Codes gibt es in der Anleitung nur weiss ich noch nicht wie man das mittels eines Wemos D1 mini realisieren kann.

hi,

ist recht einfach: Du sendest über die serielle schnittstelle die codes an einen TTL <> RS232 wandler (für billiges geld in der bucht) und steckst den in die RS232-buchse des beamers. schnittstellenspezifikation beachten (baudrate, bitanzahl, stopbits usw., das stellst Du bei serial.begin ein).

gruß stefan

schnell gefunden:

Bluelinux:
Danke erst mal für deinen Post....
Also ich muss mich nochmal etwas korrigieren denn in der Anleitung steht sogar das man nur 2sec. die ON Taste gedrückt halten muss. Was genau in den 2 sek passiert kann ich nicht sagen. Ich weiss leider auch nicht woher ich den Code bekomme. Ich bin jetzt auf die Idee gekommen was vielleicht auch sinnvoller ist, den Beamer über die RS232 schnittstelle zu steuern. Leider ist auch da mein wissen nicht so groß. Die Codes gibt es in der Anleitung nur weiss ich noch nicht wie man das mittels eines Wemos D1 mini realisieren kann.

Als Anfänger solltest du dich besser mit einem Arduino Uno beschäftigen. Da kannst du den IR-Code mittels IR-Empfänger auslesen und damit arbeiten.

Einen Wemos D1 als Anfänger zu nutzen, ist keine gute Lösung.
Und die Steuerung über eine RS232 ist nicht wirklich einfacher.

hi,

Und die Steuerung über eine RS232 ist nicht wirklich einfacher.

wo siehst Du das problem, wenn die codes bekannt sind?

gruß stefan

Eisebaer:
hi,
wo siehst Du das problem, wenn die codes bekannt sind?

gruß stefan

Ich sehe kein Problem, habe auch nicht davon geschrieben.

Allerdings ist das für einen "Anfänger" nicht einfacher, war nur ein Hinweis.
Sollte keine Hinderung sein.

Hallo,
"in der Anleitung steht sogar das man nur 2sec. die ON Taste"

damit kommst Du schon ein gutes Stück weiter.

Wenn Du es sicher haben willst…

HotSystems hat es ja schon angedeutet…
Du besorgst Dir einen ECHTEN Arduino Uno
Denn passenden IR-Empfänger
Die passende IR-LED zum senden.
Einen Taster zum senden
Dann die IR-Lib für Arduino von Ken Shirriff

In den Beispielen gibt es Sketche, mit denen Du alles simulieren kannst.
Du sendest also mit Deiner Fernbedienung, der UNO empfängt das IR-Signal,
Du drückst den Taster, der Arduino sendet das IR-Signal, Dein Beamer macht
etwas.
Das IR-Signal wird vom UNO aufgezeichnet und ausgegeben.
Wenn Du das IR-Signal so sicher deketiert hast, kannst Du es "einfach" für einen
anderen "Sender" verwenden.
Da beide Lib von Ken Shirriff sind, stehen die Chancen nicht schlecht.

Auch wenn Du die Kosten wohl erst einmal scheuen wirst- für die Zukunft hast
Du die schnell wieder drin. Du entwickelst auf dem Uno und schiebst es dann
zum ESP8266. Wenn es nicht läuft, ist es für die Forums-Mitglieder einfacher
zu helfen… Nach dem Motto:
"Es läuft auf einem Uno, aber nicht auf dem ESP8266"
Gruß und Spaß
Andreas

Sooo Ihr Lieben.... neuer Plan.....

Beamer lässt sich über einen internen HTTP-Servers steuern. Man hat eine oberfläche mit aktivien knöpfen. Da ich das ganze über Alexa Steuern möchte zumindestens ein und ausschalten baruche ich irgendwie ne möglichkeit alexa zu sagen Beamer An und sie drückt irgendwie virtuell diesen knopf..... geht das????

das ganze ist in javascript geschrieben wohl.....

mit diesen Befehlen bekomme ich ihn An und Aus:

AN:http://meineIP/cgi-bin/consoleON.cgi?D=

AUS: http://meineIP/cgi-bin/consoleR15.cgi?D=

Kann man bei dem Wemos D1 ein sowa in etwa schreiben???

Beispiel

 else if (device_id == 3) { 
    Serial.println("AN");

    //NEC Beamer
    Http.send(http://meineIP/cgi-bin/consoleON.cgi?D=%05%02%00%00%00%00);      //NEC Beamer EIN Schalten
        
    delay(50);
 }

Ich hoffe Ihr versteht mein Problem.....und Frage :stuck_out_tongue:

Oh man ey ich und meine Ideen.... hoffe es kann einer umsetzen bzw mir dabei helfen....

@SkobyMobil: Ich habe den Code schon via Wemos D1 mini + der Ken... Library + TSOP31238 ausgelesen. wenn ich den code aber sende via TSAL 6400 + TSAL 6100 klappt da garnix.. leider.... meinen Fernseher bekomme ich auf diesem wege gesteuert über Alexa....

Danke für eure unterstützung

Benny

Hallo,
willst Du uns hier verulken?! >:(

Erst kommst Du mit Deiner FunkerBude an- und jetzt mit Alexa!
Was kommt denn als nächstes? Trio aus FileMaker?
Wie auch immer- viel Spaß dabei.
Gruß
Andreas