Berner

Verfasste Forenbeiträge

Ansicht von 15 Beiträgen - 181 bis 195 (von insgesamt 553)
  • Autor
    Beiträge
  • als Antwort auf: Problem: Projekte mit Arduino Uno R3 und ESP8266 ESP-01 nachbasteln #1043
    fk
    Administrator

    Ach und ich sehe gerade in meinem Config-Programm steht AT+UART_DEF=19200,8,1,0,0 ….

    als Antwort auf: Problem: Projekte mit Arduino Uno R3 und ESP8266 ESP-01 nachbasteln #1044
    Jonathan
    Teilnehmer

    AT+UART_DEF=19200,8,1,0,0 …. Ja und das war gewiss mein Fehler, Naja Lehrgeld der Ahnungslosen,

    als Antwort auf: Das NanoESP & Pretzel Board Forum #1045
    rootuser
    Mitglied

    Hallo,

    nachdem ich jetzt die ersten Gehversuche mit dem PretzelBoard gemacht habe stellen sich für mich noch folgende zwei Fragen:

    1. Kommt das ESP8266 mit IP v6 zurecht?
    2. Im Adventskalender wird ja Thinkspeak angesprochen. Dabei läuft die Verbindung immer über HTTP auf Port 80. Wären HTTPS Verbindungen auch möglich?

    Danke für die Hilfe und viele Grüße!

    rootuser

    als Antwort auf: HTTPS und IP v6 mit dem ESP 8266 möglich? #1046
    Klaus
    Teilnehmer

    Zu 1:
    nein

    Zu2:
    Theoretisch ja, praktisch vermutlich nein. Warum? Die Verbindung wird ja einfach per TCP gemacht. Dem ist es egal, ob da verschlüsselte, oder unverschlüsselte Daten gesendet werden. Du musst nur das komplette TLS-Protokoll nachbauen. Und genau da wird es vermutlich scheitern, weil der Mikrocontroller das aufgrund von Ressourcenmangel nicht kann. Was theoretisch möglich sein müsste, dass Du einen Cryptochip, der per I2C oder SPI ansprechbar ist, noch dran hängst. Das müsste dann vom Prinzip gehen, dürfte aber grauenvoll langsam und deshalb vermutlich nicht praxistauglich sein.

    als Antwort auf: Problem: Projekte mit Arduino Uno R3 und ESP8266 ESP-01 nachbasteln #1047
    Jonathan
    Teilnehmer

    Erst als Nichts mehr ging hab ich die Bedeutung des letzten Parameter gelesen. Zu spät. Ob es eine verständliche Anleitung zum Schreiben der Firmware gibt?

    als Antwort auf: Problem: Projekte mit Arduino Uno R3 und ESP8266 ESP-01 nachbasteln #1063
    Jonathan
    Teilnehmer

    Hi, nach endlosen Std.-Versuchen und sammeln von vielen Erfahrungen, bin ich jetzt 2 Schritte weiter. Das Flashen der Firmware wollte lange Zeit nicht klappen (alle mögl. Versionen der .bin Files ) bis ich auf diese ai-thinker-v1.1.1.bin gestoßen bin. Diese funktionierte jetzt vor 20 Min!!!
    So dass mit Sketch Day 1 wieder AT und OK im ser. Mon. zu lesen war. Dann nun endlich richtig die Baudrate mit AT+UART_DEF=19200,8,1,0,0 eingestellt.
    Sketch umgestellt und Super, Super Super auf AT+CWLAP kommt jetzt ALLES ganz sauber. Toll! Vielen Dank für den richtigen Weg.
    Höhere Baudraten funktionieren echt nicht!!!
    Eine Frage bleibt noch:
    AT+GMR
    AT version:0.25.0.0(Jun 5 2015 16:27:16)
    SDK version:1.1.1
    Ai-Thinker Technology Co. Ltd.
    Jun 23 2015 23:23:50
    OK
    AT+RST
    OK
    $aP-ÁdXQ%‰«¡-ÿ”§‡#Áläb”R„£?lÉ”$J(Îç%)$Sd¸H’—‡ÌP?i;ÿòò
    Ai-Thinker Technology Co. Ltd.
    invalid
    —–
    Ja eigentlich gehört doch ready in die letzte Zeile, hmmm? ;-)
    Aber nochmals Danke für den „Wegweiser“

    als Antwort auf: Problem: Projekte mit Arduino Uno R3 und ESP8266 ESP-01 nachbasteln #1064
    fk
    Administrator

    Ja das liegt daran, dass du keine original Firmware sonder eine (vermutlich nur leicht) angepasste Version von Ai-Thinker hast. Ich vermute mal, dass die meisten Versuche trotzdem funktionieren – allerdings solltest du dann in der espConfig()-Funktion die Zeile
    succes &= sendCom(„AT+RST“, „ready“);
    anpassen, z.B. in
    succes &= sendCom(„AT+RST“, „invalid“);
    wenn das die letzte Meldung nach einem Reset ist.

    als Antwort auf: HTTPS und IP v6 mit dem ESP 8266 möglich? #1098
    rootuser
    Mitglied

    Hallo Klaus,

    danke für die Antworten.

    IP v6 ist natürlich schade, aber momentan wohl noch zu verschmerzen.

    Das Thema HTTPS finde ich da schon deutlich gravierender. Das TLS-Protokoll nachzubauen ist wäre wohl eine Mammutaufgabe.
    Gesendete Daten sollten aber trotzdem irgendwie verschlüsselt übertragen werden. Könnte man mit einem crypto-chip ggf. die zu sendenden Daten am Arduino verschlüsseln (mit einem gewissen secret) und am Server wieder entschlüsseln? Für PHP kenne ich da rncryptor, also vielleicht eine Art rncryptor für Arduino?

    Viele Grüße!

    rootuser

    als Antwort auf: HTTPS und IP v6 mit dem ESP 8266 möglich? #1099
    Klaus
    Teilnehmer

    Ich bin kein Experte für Arduino (habe mit dem Adventskalender zum ersten Mal einen benutzt), aber Atmega habe ich schon mehr programmiert. Wenn Du einen Cryptochip nimmst, der ein Protokoll spricht, welches Du entweder im Arduino schon drin hast, oder selbst nachbaust, steht dem prinzipiell nix im Wege. Du musst dem Chip ja nur die Daten schicken und die Antwort entgegen nehmen. Wo es eng werden könnte, wäre eben die Geschwindigkeit. Die Daten rüber schaufeln dauert halt je nach Protokoll einen Moment. Ansonsten sehe ich da kein Hindernis. Ich habe mich aber noch nie mit Cryptochips beschäftigt und kann Dir somit keinen nennen. Aber irgendwie kommunizieren die ja.

    Was IPv6 angeht, so könntest Du das Protokoll höchstens nachprogrammieren. Die Firmware des ESP ist ja offen. Es gibt sogar eine Bibliothek, womit Du in der Arduino-Oberfläche eine Firmware erstellen kannst. Du musst dann halt nur das komplette Protokoll nachprogrammieren. Vom Rechenaufwand denke ich, dass es den Rahmen des Chips nicht sprengen dürfte, da es ja wohl nicht groß aufwändiger als IPv4 sein dürfte.

    als Antwort auf: Kann nichts mehr hochladen und das Board reagiert nicht mehr #1100
    riegler93
    Teilnehmer

    Schon gefragt bei Conrad?
    Gibt es eine Möglichkeit, dass das Gerät getauscht wird?

    als Antwort auf: Kein Sketch-Upload mehr möglich: avrdude: stk500_recv() #1101
    riegler93
    Teilnehmer

    Hallo im neuen Jahr!
    Ich habe auch das Problem:
    „avrdude: stk500_recv(): programmer is not responding“
    Habe bereits vieles von diesem und anderen Foren probiert- ohne Erfolg.
    Gibt es schon eine Rückmeldung bezüglich der Kulanzanfrage?

    als Antwort auf: Adventskalender #1102
    McElch
    Mitglied

    Laut ThingSpeak geht das so:

    updateThingSpeak("field1="+analogPin0+"&field2="+analogPin1);

    Ich hab aber nicht so ganz verstanden, wie die „Subroutine“ diesen POST zusammensetzt bzw. wie ich das um drei andere Sensorwerte erweitern könnte…

    Kann mir da jemand helfen? Danke! :)

    als Antwort auf: User Projekte #1103
    Terra
    Teilnehmer

    Hallo Leute,

    Ich versuche jetzt seit ein paar Tagen meinem NanoESP folgendes beizubringen:

    WENN:
    – Ich 3x die „TV“ Taste meiner Fernbedienung drücke

    DANN:
    – Soll sich mein Beamer ausschalten (durch 3x dasselbe IR Signal senden)
    – Mein Yamaha AV-Receiver ausschalten (durch Webservice Call auf lokale IP)

    Das ganze funktioniert getrennt schon sehr gut, ich habe ein Script das bei dreimal drücken der taste „TV“ auf meiner Fernbedienung 3x das Signal zum Beamer ausschalten sendet und einmal ein weiteres Script das beim starten den WebService Call an den Yamaha AV Receiver schickt. Beides funktioniert unabhängig tadellos.

    Jetzt habe ich die beiden Scripts in ein Script gepackt und der WebService Call geht leider nicht, ich bekomme immer eine Fehlermeldung des NanoESP das der Call nicht geschickt werden kann.
    Ich vermute das der Speicher zu klein wird obwohl die GUI nichts anzeigt :/

    Ich hab schon überall probiert Speicher zu sparen, aber ich denke das Problem liegt an dem langen String den ich über den WebService schicken muss. Kann ich den irgendwie Speicherschonender zusammenbauen und übergeben?

    Relevanter Teil:

    
    #define AVRStopMessage "<?xml version=\"1.0\" encoding=\"utf-8\"?><YAMAHA_AV cmd=\"PUT\"><Main_Zone><Power_Control><Power>Standby</Power></Power_Control></Main_Zone></YAMAHA_AV>"
    
      String getRequest = "POST "+Subpage+" HTTP/1.1\r\nHost:"+Host+"\r\nContent-Type: text/xml;charset=\"UTF-8\"\r\nAccept: text/xml\r\nContent-Length: " + String(strlen(AVRStopMessage)+1) + "\r\n\r\n" + String(AVRStopMessage) + "\r\n";
    
      sendCom("AT+CIPSTART=\"TCP\",\""+Host+"\",80", "OK");
      sendCom("AT+CIPSEND=" + String(getRequest.length() + 2), ">");
      esp8266.println(getRequest);

    Das ganze Script:

    #include <IRremote.h>
    #include <SoftwareSerial.h>
    SoftwareSerial esp8266(11, 12); // RX, TX
    
    #define SSID "*****"
    #define PASSWORD "*****"
    
    #define AVRHost "192.168.0.12"
    #define AVRSubpage "/YamahaRemoteControl/ctrl"
    
    /*
    Yamaha XML Messages
    Note!
    - AVROutputSetVolume has -39 hardcoded as defined volume
    - AVROutputHDMI1 the outputs of the Yamaha must be set via the NAMES that were assigned in 
      the configuration. My HDMI1 output is called HTPC. Default it most likely the name is HDMI1. 
      "HTPC" is hardcoded in the request!
      All of the extra ones are disabled because of space issues...
    */
    
    #define AVRStopMessage "<?xml version=\"1.0\" encoding=\"utf-8\"?><YAMAHA_AV cmd=\"PUT\"><Main_Zone><Power_Control><Power>Standby</Power></Power_Control></Main_Zone></YAMAHA_AV>"
    
    /* Some IR Codes
    TURN BEAMER ON    Value:      4CB340BF Type: 3 Length: 32
    TURN BEAMER OFF   Value:      4CB3748B Type: 3 Length: 32
    TURN RECEIVER ON/OFF Value:   7E8154AB Type: 3 Length: 32 - And add a FFFFFFFF Type 3 Length 0
    
    Type 2
    up type 2 800F041E
    down type2 800F841F
    
    */
    unsigned long timenow = 1;
    
    unsigned long receivedBeamerOnSignal1 = 0;
    unsigned long receivedBeamerOnSignal2 = 0;
    unsigned long receivedBeamerOnSignal3 = 0;
    unsigned long repeatTimeoutMillisThreshold = 1000;
    
    #define LED_WLAN 13
    #define GND 4
    #define RECV_PIN  7
    #define GND2  8
    #define VCC  9
    
    IRrecv irrecv(RECV_PIN);
    IRsend irsend;
    
    decode_results results;
    
    // Storage for the recorded code
    int codeType = -1; // The type of code
    unsigned long codeValue; // The code value if not raw
    unsigned int rawCodes[RAWBUF]; // The durations if raw
    int codeLen; // The length of the code
    
    void setup() {
    
      Serial.begin(19200);
      irrecv.enableIRIn(); // Start the receiver
      esp8266.begin(19200);
    
      //Set Pins for LED and IR Monitor
      pinMode(GND, OUTPUT);
      pinMode(GND2, OUTPUT);
      pinMode(VCC, OUTPUT);
      digitalWrite (GND, LOW);
      digitalWrite (GND2, LOW);
      digitalWrite (VCC, HIGH);
    
      if (!espConfig()) serialDebug();
      else digitalWrite(LED_WLAN, HIGH);
    
    }
    
    void loop() {
    
      //Serial.println("I am Alive!");
    
      timenow = millis();
    
      //IR RECEIVER SIGNAL
      if (irrecv.decode(&results)) {
        analyzeCode(&results);
        Serial.println("Received IR!");
        irrecv.resume();
      }
    
    }
    
    // Stores the code for later playback
    // Most of this code is just logging
    void analyzeCode(decode_results *results) {
      codeType = results->decode_type;
      int count = results->rawlen;
      String receivedSignal;
      if (codeType == UNKNOWN) {
        //Serial.println("Received unknown code, saving as raw");
        codeLen = results->rawlen - 1;
        // To store raw codes:
        // Drop first value (gap)
        // Convert from ticks to microseconds
        // Tweak marks shorter, and spaces longer to cancel out IR receiver distortion
        for (int i = 1; i <= codeLen; i++) {
          if (i % 2) {
            // Mark
            rawCodes[i - 1] = results->rawbuf[i]*USECPERTICK - MARK_EXCESS;
            //Serial.print(" m");
          } 
          else {
            // Space
            rawCodes[i - 1] = results->rawbuf[i]*USECPERTICK + MARK_EXCESS;
            //Serial.print(" s");
          }
          //Serial.print(rawCodes[i - 1], DEC);
        }
        //Serial.println("");
      }
      else {
        if (codeType == NEC) {
          //debug("Received NEC: ");
          if (results->value == REPEAT) {
            // Don't record a NEC repeat value as that's useless.
            //debug("repeat; ignoring.");
            return;
          }
        }
        receivedSignal = String(results->value, HEX);
        receivedSignal.toUpperCase();
    
        // So now we are listening if someone has send the BEAMER ON ir signal 3 times in a row.
        // we have three variables to store the millisecond when the signal was received.
        // the next variable iteration will be populated by the system if the last signal was send less than
        // repeatTimeoutMillis milliseconds.
        // e.g. if repeatTimeoutMillis=500 it means a signal is valid repeated when the previous signal was 
        // send not longer than half a second before! 
        // Until it reaches the third iteration where it executes the command after 3 repeats of the signal.
        // In case the previous signal was send longer than repeatTimeoutMillis ago the iteration resets and 
        // sets the newly received signal as iteration 1 to start the cyrcle with this signal again.
        //
        if(receivedSignal == "4CB340BF") {
          debug("--------Detected My Signal!");
          if(receivedBeamerOnSignal1 == 0) {
            receivedBeamerOnSignal1 = timenow;
            debug("----SET RS1");
            
          } else if(receivedBeamerOnSignal1 != 0 && receivedBeamerOnSignal2 == 0) {
            receivedBeamerOnSignal2 = timenow;
            if( receivedBeamerOnSignal2 > receivedBeamerOnSignal1+repeatTimeoutMillisThreshold ) {
              receivedBeamerOnSignal1 = timenow;
              receivedBeamerOnSignal2 = 0;
              receivedBeamerOnSignal3 = 0;
              debug("----RESET ON RS2: ");
            } else {
              debug("----SET RS2");
            }
            
          } else if(receivedBeamerOnSignal2 != 0) {
            receivedBeamerOnSignal3 = timenow;
            if( receivedBeamerOnSignal3 > receivedBeamerOnSignal2+repeatTimeoutMillisThreshold ) {
              receivedBeamerOnSignal1 = timenow;
              receivedBeamerOnSignal2 = 0;
              receivedBeamerOnSignal3 = 0;
              debug("----RESET ON RS3: ");
            } else {
              debug("----SET RS3");
    
              //esp8266.end();
              delay(200);
    
              //TURN OFF BEAMER BEGIN
              debug("--------TURN OFF BEAMER !!!");
              irsend.sendNEC(0x4CB3748B, 32);
              delay(200);
              irsend.sendNEC(0x4CB3748B, 32);
              delay(200);
              irsend.sendNEC(0x4CB3748B, 32);
              //TURN OFF BEAMER END
    
              //TURN OFF RECEIVER BEGIN
              manageAVR(AVRHost, AVRSubpage);
              //TURN OFF RECEIVER END
    
              //reenable IR receiver after sending
              irrecv.enableIRIn();
              irrecv.resume();
    
              receivedBeamerOnSignal1 = 0;
              receivedBeamerOnSignal2 = 0;
              receivedBeamerOnSignal3 = 0;
            }
          }
          
        }
        
        codeValue = results->value;
        codeLen = results->bits;
      }
    }
    
    //--------------------------------------Yamaha AVR Functions--------------------------------------
    
    void manageAVR(String Host, String Subpage)
    {
    
      String getRequest = "POST "+Subpage+" HTTP/1.1\r\nHost:"+Host+"\r\nContent-Type: text/xml;charset=\"UTF-8\"\r\nAccept: text/xml\r\nContent-Length: " + String(strlen(AVRStopMessage)+1) + "\r\n\r\n" + String(AVRStopMessage) + "\r\n";
    
      sendCom("AT+CIPSTART=\"TCP\",\""+Host+"\",80", "OK");
      sendCom("AT+CIPSEND=" + String(getRequest.length() + 2), ">");
      esp8266.println(getRequest);
    
      //debug(getRequest);
    
      if (esp8266.find("+IPD"))
      {
        if (esp8266.find("\r\n\r\n"))
        {
          sendCom("AT+CIPCLOSE", "OK");
        }
      }
    
    }
    
    //-----------------------------------------Config ESP8266------------------------------------
    
    boolean espConfig()
    {
      boolean succes = true;
      esp8266.setTimeout(5000);
      succes &= sendCom("AT+RST", "ready");
      esp8266.setTimeout(1000);
      if (configStation(SSID, PASSWORD)) {
        succes &= true;
        debug("WLAN OK");
        debug("IP:");
        debug(sendCom("AT+CIFSR"));
      }
      else
      {
        succes &= false;
      }
      //shorter Timeout for faster wrong UPD-Comands handling
      succes &= sendCom("AT+CIPMODE=0", "OK");
      succes &= sendCom("AT+CIPMUX=0", "OK");
    
      return succes;
    }
    
    boolean configStation(String vSSID, String vPASSWORT)
    {
      boolean succes = true;
      succes &= (sendCom("AT+CWMODE=1", "OK"));
      esp8266.setTimeout(20000);
      succes &= (sendCom("AT+CWJAP=\"" + String(vSSID) + "\",\"" + String(vPASSWORT) + "\"", "OK"));
      esp8266.setTimeout(1000);
      return succes;
    }
    
    //-----------------------------------------------Controll ESP-----------------------------------------------------
    
    boolean sendCom(String command, char respond[])
    {
      esp8266.println(command);
      if (esp8266.findUntil(respond, "ERROR"))
      {
        return true;
      }
      else
      {
        debug("ESP ERR: " + command);
        return false;
      }
    }
    
    String sendCom(String command)
    {
      esp8266.println(command);
      return esp8266.readString();
    }
    
    //-------------------------------------------------Debug Functions------------------------------------------------------
    void serialDebug() {
      while (true)
      {
        if (esp8266.available())
          Serial.write(esp8266.read());
        if (Serial.available())
          esp8266.write(Serial.read());
      }
    }
    
    void debug(String Msg)
    {
        Serial.println("FR:" + String(freeRam()) + " - " + Msg);
    }
    
    int freeRam() 
    {
      extern int __heap_start, *__brkval; 
      int v; 
      return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); 
    }

    lg und danke

    • Dieses Thema wurde geändert vor 8 Jahren, 11 Monaten von Terra.
    • Dieses Thema wurde geändert vor 8 Jahren, 11 Monaten von Terra.
    • Dieses Thema wurde geändert vor 8 Jahren, 11 Monaten von Terra.
    als Antwort auf: IR Receive, Send + Webservice Call #1107
    Terra
    Teilnehmer

    Ich hab den Fehler inzwischen gefunden, es war wie vermutet die Variable/Konstante:

    #define AVRStopMessage „<?xml version=\“1.0\“ encoding=\“utf-8\“?><YAMAHA_AV cmd=\“PUT\“><Main_Zone><Power_Control><Power>Standby</Power></Power_Control></Main_Zone></YAMAHA_AV>“

    Wenn ich die Zeichenkette im obigen Programm reduziere schickt er den Webservice Call, ansonsten nicht.
    Ich hab jetzt nochmal ein paar debug ausgaben verkürzt, HTTP Header entfernt und ein paar Sachen anders gelöst oder gelöscht, jetzt klappt alles :)

    WENN:
    – Ich 3x die “TV” Taste meiner Fernbedienung drücke

    DANN:
    – Soll sich mein Beamer ausschalten (durch 3x dasselbe IR Signal senden)
    – Mein Yamaha AV-Receiver ausschalten (durch Webservice Call auf lokale IP)
    – Zusätzlich blinkt eine LED bei jedem IR Signal das er empfängt, nur damit ich sehe ob er noch zuhört.

    #include <IRremote.h>
    #include <SoftwareSerial.h>
    SoftwareSerial esp8266(11, 12); // RX, TX
    
    const char* WiFiSSID       = "*****";
    const char* WiFiPASSWORD   = "*****";
    
    const char* AVRHost    = "192.168.0.12";
    const char* AVRSubpage = "/YamahaRemoteControl/ctrl";
    
    /*
    Yamaha XML Messages
    Note!
    - AVROutputSetVolume has -39 hardcoded as defined volume
    - AVROutputHDMI1 the outputs of the Yamaha must be set via the NAMES that were assigned in 
      the configuration. My HDMI1 output is called HTPC. Default it most likely the name is HDMI1. 
      "HTPC" is hardcoded in the request!
      All of the extra ones are disabled because of space issues...
    */
    const char* AVRStopMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?><YAMAHA_AV cmd=\"PUT\"><Main_Zone><Power_Control><Power>Standby</Power></Power_Control></Main_Zone></YAMAHA_AV>";
    
    /* Some IR Codes
    TURN BEAMER ON    Value:      4CB340BF Type: 3 Length: 32
    TURN BEAMER OFF   Value:      4CB3748B Type: 3 Length: 32
    TURN RECEIVER ON/OFF Value:   7E8154AB Type: 3 Length: 32 - And add a FFFFFFFF Type 3 Length 0
    
    Type 2
    up type 2 800F041E
    down type2 800F841F
    
    */
    const char* sigBeamerOn        = "4CB340BF";
    //const char* sigBeamerOff       = "4CB3748B";
    //const char* sigAVReceiverOnOff = "7E8154AB";
    
    unsigned long timenow = 1;
    unsigned long receivedBeamerOnSignal1 = 0;
    unsigned long receivedBeamerOnSignal2 = 0;
    unsigned long receivedBeamerOnSignal3 = 0;
    const long repeatTimeoutMillisThreshold = 1000;
    
    const int LED_WLAN = 13;
    const int GND = 2;
    const int RECV_PIN = 7;
    const int GND2 = 8;
    const int VCC = 9;
    const int LED = 5;
    
    IRrecv irrecv(RECV_PIN);
    IRsend irsend;
    decode_results results;
    
    void setup() {
    
      Serial.begin(19200);
      irrecv.enableIRIn(); // Start the receiver
      esp8266.begin(19200);
    
      //Set Pins for LED and IR Monitor
      pinMode(GND, OUTPUT);
      pinMode(GND2, OUTPUT);
      pinMode(VCC, OUTPUT);
      pinMode(LED, OUTPUT);
      digitalWrite (GND, LOW);
      digitalWrite (GND2, LOW);
      digitalWrite (VCC, HIGH);
    
      if (!espConfig()) serialDebug();
      else digitalWrite(LED_WLAN, HIGH);
    
    }
    
    void loop() {
    
      //Serial.println("I am Alive!");
    
      //IR RECEIVER SIGNAL
      if (irrecv.decode(&results)) {
        timenow = millis();
        analyzeCode(&results);
        Serial.print(F("ir"));
        digitalWrite(LED, 1);
        delay(50);
        digitalWrite(LED, 0);
        irrecv.resume();
      }
    
    }
    
    void analyzeCode(decode_results *results) {
    
      results->decode_type;
      
      String receivedSignal;
      receivedSignal = String(results->value, HEX);
      receivedSignal.toUpperCase();
    
      // So now we are listening if someone has send the PROJECTOR ON ir signal 3 times in a row.
      // we have three variables to store the millisecond when the signal was received.
      // the next variable iteration will be populated by the system if the last signal was send less than
      // repeatTimeoutMillis milliseconds.
      // e.g. if repeatTimeoutMillis=500 it means a signal is valid repeated when the previous signal was 
      // send not longer than half a second before! 
      // Until it reaches the third iteration where it executes the command after 3 repeats of the signal.
      // In case the previous signal was send longer than repeatTimeoutMillis ago the iteration resets and 
      // sets the newly received signal as iteration 1 to start the cycle with this signal again.
      //
      if(receivedSignal == sigBeamerOn) {
        Serial.println(F("+")); //Detected My Signal
        if(receivedBeamerOnSignal1 == 0) {
          receivedBeamerOnSignal1 = timenow;
          Serial.println(F("1")); //Set 1
          
        } else if(receivedBeamerOnSignal1 != 0 && receivedBeamerOnSignal2 == 0) {
          receivedBeamerOnSignal2 = timenow;
          if( receivedBeamerOnSignal2 > receivedBeamerOnSignal1+repeatTimeoutMillisThreshold ) {
            receivedBeamerOnSignal1 = timenow;
            receivedBeamerOnSignal2 = 0;
            receivedBeamerOnSignal3 = 0;
            Serial.println(F("r2")); //Reset on 2
          } else {
            Serial.println(F("2")); //Set 2
          }
          
        } else if(receivedBeamerOnSignal2 != 0) {
          receivedBeamerOnSignal3 = timenow;
          if( receivedBeamerOnSignal3 > receivedBeamerOnSignal2+repeatTimeoutMillisThreshold ) {
            receivedBeamerOnSignal1 = timenow;
            receivedBeamerOnSignal2 = 0;
            receivedBeamerOnSignal3 = 0;
            Serial.println(F("r3")); //Reset on 3
          } else {
            Serial.println(F("3")); //Set 3
    
            delay(200);
    
            //TURN OFF PROJECTOR BEGIN
            Serial.println(F("xb")); //Turn off projector
            irsend.sendNEC(0x4CB3748B, 32);
            delay(200);
            irsend.sendNEC(0x4CB3748B, 32);
            delay(200);
            irsend.sendNEC(0x4CB3748B, 32);
            delay(200);
            irsend.sendNEC(0x4CB3748B, 32);
            
            //reenable IR receiver after sending
            irrecv.enableIRIn();
            //TURN OFF PROJECTOR END
    
            Serial.println(F("xr")); //Turn off AVR-Receiver
            //TURN OFF RECEIVER BEGIN
            manageAVR();
            //TURN OFF RECEIVER END
    
            receivedBeamerOnSignal1 = 0;
            receivedBeamerOnSignal2 = 0;
            receivedBeamerOnSignal3 = 0;
          }
        }
        
      }
    
    }
    
    //--------------------------------------Yamaha AVR Functions--------------------------------------
    
    void manageAVR()
    {
    
      //Usually there are more headers in the original request, but we need to save space and cannot add them
      String getRequest = "POST "+String(AVRSubpage)+" HTTP/1.1\r\nHost:"+String(AVRHost)+"\r\nContent-Length: " + String(strlen(AVRStopMessage)+1) + "\r\n\r\n" + String(AVRStopMessage) + "\r\n";
    
      sendCom("AT+CIPSTART=\"TCP\",\""+String(AVRHost)+"\",80", "OK");
      
      sendCom("AT+CIPSEND=" + String(getRequest.length() + 2), ">");
      esp8266.println(getRequest);
    
      Serial.println(getRequest);
    
      delay(1000);
    
      if (esp8266.find("+IPD"))
      {
        if (esp8266.find("\r\n\r\n"))
        {
          sendCom("AT+CIPCLOSE", "OK");
        }
      }
    
    }
    
    //-----------------------------------------Config ESP8266------------------------------------
    
    boolean espConfig()
    {
      boolean success = true;
      esp8266.setTimeout(5000);
      success &= sendCom("AT+RST", "ready");
      esp8266.setTimeout(1000);
      if (configStation()) {
        success &= true;
        Serial.println(F("WLAN OK"));
        Serial.println(F("IP:"));
        Serial.println(sendCom("AT+CIFSR"));
      }
      else
      {
        success &= false;
      }
      //shorter Timeout for faster wrong UPD-Comands handling
      success &= sendCom("AT+CIPMODE=0", "OK");
      success &= sendCom("AT+CIPMUX=0", "OK");
    
      return success;
    }
    
    boolean configStation()
    {
      boolean success = true;
      success &= (sendCom("AT+CWMODE=1", "OK"));
      esp8266.setTimeout(20000);
      success &= (sendCom("AT+CWJAP=\"" + String(WiFiSSID) + "\",\"" + String(WiFiPASSWORD) + "\"", "OK"));
      esp8266.setTimeout(1000);
      return success;
    }
    
    //-----------------------------------------------Controll ESP-----------------------------------------------------
    
    boolean sendCom(String command, char respond[])
    {
      esp8266.println(command);
      if (esp8266.findUntil(respond, "ERROR"))
      {
        return true;
      }
      else
      {
        Serial.println("ESP ERR: " + command);
        return false;
      }
    }
    
    String sendCom(String command)
    {
      esp8266.println(command);
      return esp8266.readString();
    }
    
    //-------------------------------------------------Debug Functions------------------------------------------------------
    
    void serialDebug() {
    }
    • Diese Antwort wurde geändert vor 8 Jahren, 11 Monaten von Terra.
    • Diese Antwort wurde geändert vor 8 Jahren, 11 Monaten von fk.
    als Antwort auf: Problem: Projekte mit Arduino Uno R3 und ESP8266 ESP-01 nachbasteln #1110
    Jonathan
    Teilnehmer

    Hi Fabian

    sag mal, wäre nicht so eine Lösung für den Arduino eine Herausforderung für dich? – Meldungen über WhatsApp –

    http://www.embarcados.com.br/intel-edison-com-whatsapp/

Ansicht von 15 Beiträgen - 181 bis 195 (von insgesamt 553)