Met Domoticz EN IR motor aansturen gaat niet met esp8266?

Software vragen voor ESP chip familie
Berichten: 10
Geregistreerd: 09 Apr 2016, 14:14

Met Domoticz EN IR motor aansturen gaat niet met esp8266?

Berichtdoor Topcase1 » 25 Jan 2019, 17:11

Hallo mede hobby'ers,

Misschien kan iemand mij hier mee helpen.
Voor de esp8266 (wemos) heb ik twee aparte programma's in elkaar geflanst die een synchrone motor linksdraaiend, rechtsdraaiend en laat stoppen. 1 vanuit Domoticz met Http:// instructie's en een ander programma die hetzelfde doet, maar dan met de infrarood afstandsbediening. Ze werken afzonderlijk perfect naar m'n zin.
Het is om ventilatie roosters aan te sturen vanuit Domoticz, afhankelijk van de CO2 waarde, maar moet/wil ze ook handmatig kunnen bedienen met de IR afstandsbediening.

Deze twee programma's wil ik vanwege de ruimte in 1 esp8266(wemos) stoppen. En loop tegen het volgende aan:
In de void loop() kijkt het programma of de Client verbonden is, dan wacht het op een requist. En als die binnen komt, gaat hij de opdracht uitvoeren b.v. if (request.indexOf("/m otorlinks=AAN") != -1) als de opdracht klaar is komt dit: Serial.println("Client disconnected"); Serial.println("");
De boel wordt afgesloten nadat de instructie is uitgevoerd en gaat weer terug wachtend op een nieuwe instructie. Het is een lus.

Hetzelfde geldt voor het andere programma die op de IR afstandsbediening werkt. Die krijgt een code binnen, springt via switch naar de desbetreffende case. voert de instructie uit, komt bij break en gaat weer terug.

Mijn vraag: kan ik die twee in elkaar schuiven want mij lukt het niet? en hoe? welke code? Als ik de infrarood programma voor de if request.indexOf zet werkt de IR niet en andersom.


Beide werken wel in de ESPEasy, maar dan loopt het niet echt soepel.

Hopelijk is mijn verhaal een beetje duidelijk en is er iemand op dit forum die mij hier mee kan helpen.
In ieder geval bedankt voor het meedenken.

Topcase1

Advertisement

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Met Domoticz EN IR motor aansturen gaat niet met esp8266

Berichtdoor shooter » 26 Jan 2019, 11:35

dat is echt een kwestie van software in elkaar schuiven, simpelste is om loop1 en loop2 te noemen en allemaal in de loop aan te roepen, dat is het minste werk, echter dat ligt aan de software.
paul deelen
shooter@home.nl

Berichten: 10
Geregistreerd: 09 Apr 2016, 14:14

Re: Met Domoticz EN IR motor aansturen gaat niet met esp8266

Berichtdoor Topcase1 » 26 Jan 2019, 22:00

Hoi Shooter,

Bedankt voor jou reactie.
Als ik naar jou antwoord kijk kan het dus wel volgens jou met een ESP8266? Als ik ze loop1 en loop2 maak, hoe kom ik dan uit die eerste loop? Ik begrijp dat je dus als die in de eerste loop zit met een code omleiden naar loop2? en dan daarvandaan weer naar loop1. Begrijp ik jou goed? Dan ben ik erg benieuwd naar welke code ik dan moet gebruiken. Ben flink aan het zoeken, maar het lukt nog niet. Ik kwam "#include<Scheduler.h>" tegen, maar dat ging ook niet. Mijn zoektocht gaat verder.

Tnx,

Topcase1

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Met Domoticz EN IR motor aansturen gaat niet met esp8266

Berichtdoor shooter » 27 Jan 2019, 00:38

je hebt dus eigenlijk dan twee functies lopen, en met een beetje geluk kun je onderaan in de beide loops terugspringen naar de echte loop()
maar zet de software die je nu hebt hier of stukken dan helpen we je wel weer verder.
paul deelen
shooter@home.nl

Berichten: 10
Geregistreerd: 09 Apr 2016, 14:14

Re: Met Domoticz EN IR motor aansturen gaat niet met esp8266

Berichtdoor Topcase1 » 29 Jan 2019, 21:53

Hallo Shooter,

Dat zou wel erg fijn zijn als je mee wilt denken. Ik kom er niet uit. :oops:
Misschien lukt het jullie wel.

Topcase1

Code: Alles selecteren
/* Dit gedeelte is om in te loggen op het netwerk en wacht het op een
 *  instructie vanuit Domoticz.
 *  Het ventilatierooster wordt dan open of dicht gestuurd met b.v.:http://<IP wemos>/motorrechts=AAN
 *  Bij het open gaan, gaat het groene ledje branden en bij dicht het rode.
*/
#include <Wire.h>
#include <ESP8266WiFi.h>
 
// Configuratie WIFI
const char* ssid = "******";
const char* password = "******";
WiFiServer server(80);

int status = WL_IDLE_STATUS;     // Wifi status
WiFiClient client;

int groeneledPin = D6;                             
int rodeledPin = D1;                               
int groenemotorPin = D3;                           
int rodemotorPin = D2;                             

void setup() {
  Serial.begin(115200);
   
  WiFi.hostname ("esp8266-wemos");
 
  // Verbinden met netwerk
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.print("       ESP Zoekt verbinding met: ");
  int i = 0;
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(++i); Serial.print(' ');
    }
   
  Serial.println("Is verbonden met WIFI");
   
  pinMode(groeneledPin, OUTPUT);                   
  pinMode(groenemotorPin, OUTPUT);
  pinMode(rodeledPin, OUTPUT);
  pinMode(rodemotorPin, OUTPUT);
 
  Serial.print("Start server...");
  server.begin();
  Serial.println("OK!");
}

void loop() {
  // Controle of de client verbonden is
  WiFiClient client = server.available();
  if (!client)   { return;}
 
 // Wacht tot client data zend
  Serial.println("new client");
  while(!client.available()){ delay(1); }
 
  // Lees de eerste regel van het verzoek (request)
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();
 
  if (request.indexOf("/motorlinks=AAN") != -1){
      digitalWrite(groeneledPin, LOW);                   
        digitalWrite(groenemotorPin, LOW);
        digitalWrite(rodeledPin, HIGH);
        digitalWrite(rodemotorPin, HIGH);
          Serial.println("Rode led aan en draaien naar links");
 }

  if (request.indexOf("/motorlinks=UIT") != -1){
       digitalWrite(rodeledPin, LOW);                   
       digitalWrite(rodemotorPin, LOW);             
        Serial.println("Rode led en motor uit");
 } 
   delay(1);
  Serial.println("Client disconnected");
  Serial.println("");

//*********** bovenstaande is een gedeelte (motor links en en uit) de rest motor recht en uit weggelaten vanwege de ruimte*******

//********** onderstaand is het andere programma wat werkt met de afstandsbediening (ook een stukje om het allemaal niet te groot te maken)
#include <Wire.h>
#include <ESP8266WiFi.h>
#include <IRremoteESP8266.h>
#include <IRrecv.h>                               // Nodig om IR codes te onytvangen

// const int pwledPin = D7;

const char* ssid = "*****";
const char* password = "*****";
WiFiServer server(80);
int status = WL_IDLE_STATUS;     // Wifi status
WiFiClient client;

/*
  Aansluitingen:
  Sluit de IR ontvanger data op pin D4 en de gnd en de spanning op 5V
  Sluit de kleuren led op digitale pin D5 en D6 via weerstand
  Sluit PW Led - kant aan op D7 de + is al aangesloten op board
  Sluit motor op digitale pin D2 en D3
  Sluit potmeter aan op A0, massa en 5 volt
*/
int IR_Recv = D4;                                   //IR ontvanger Pin D4
IRrecv irrecv(IR_Recv);
decode_results results;

int groeneledPin = D5;                              //Open led  (D5)
int rodeledPin = D6;                                //Dicht led (D6)
int pwledPin = D7;                                  // Power GPIO 13 = D7 (wemos)
int groenemotorPin = D3;                            //Groenemotor aansturing D3
int rodemotorPin = D2;                              //Rodemotor aansturing D2)
int analogPin = A0;                                 // leest de waarde v.d. potmeter

const int thresholdD = 440;                         // proefondervindelijk vaststellen
const int thresholdO = 890;                         

void setup() {
  Serial.begin(115200);                             
  irrecv.enableIRIn();                              // Start de IR-ontvanger
 
  WiFi.hostname ("Flowunit-rechts");                // Geef de juiste naam

   WiFi.mode(WIFI_STA);                             // Verbinden met netwerk 
  WiFi.begin(ssid, password);
  Serial.print("       ESP Zoekt verbinding met: ");
  int i = 0;
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(++i); Serial.print(' ');
  }
   
  Serial.println("Is verbonden met WIFI");           

 
  pinMode(groeneledPin, OUTPUT);                    // zet de digitale pin als output
  pinMode(groenemotorPin, OUTPUT);
  pinMode(rodeledPin, OUTPUT);
  pinMode(rodemotorPin, OUTPUT);
  pinMode(pwledPin, OUTPUT);
}
void loop()
    {
     int analogValue = analogRead(analogPin);         // ingelezen waarde potmeter wordt toegewezen aan analogValue
     if (analogValue == thresholdO)                   // actie einde potmeter (waarde threshold (O)pen
    { digitalWrite(groeneledPin, LOW);
      digitalWrite(groenemotorPin, LOW);

    }                                                   
    else                                              // voldoet niet aan thresholdwaarde O dan verder
    if (analogValue == thresholdD)                    // actie einde potmeter (waarde threshold (D)icht
    { digitalWrite(rodeledPin, LOW);
      digitalWrite(rodemotorPin, LOW);
    }                                                 
 //  Serial.println(analogValue);                    // laat op monitor de potmeterwaarde zien (handig voor de treshold waardes)

    if (irrecv.decode(&results))                      //input code van de infraroodbediening
    {
    long int decCode = results.value;
    Serial.print(" code van de infrarood:");
    Serial.println(decCode);

    switch (results.value)                            //schakel naar de juiste case
    {

      case 2047:
        digitalWrite(groeneledPin, LOW);
        digitalWrite(groenemotorPin, LOW);            //wanneer je nogmaals op de "open" knop drukt gaat motor uit en groen led uit
        Serial.println("groene led en motor uit");
        break;

      case 4095:                                      //wanneer je op de "open" knop drukt gaat motor draaien
        digitalWrite(rodeledPin, LOW);
        digitalWrite(rodemotorPin, LOW);
        digitalWrite(groeneledPin, HIGH);
        digitalWrite(groenemotorPin, HIGH);
        Serial.println("Groene led aan en draaien naar rechts");
        break;

     

       }
    irrecv.resume();                                    //Ontvang de volgende waarde van de afstandsbediening
  }
}

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Met Domoticz EN IR motor aansturen gaat niet met esp8266

Berichtdoor shooter » 30 Jan 2019, 19:41

Probeer het eerst zelf, want zoals je ziet staan er 2 loops in en 2 setups, en dat kan niet in de compiler.
doe dan ook commentaar erbij wat je verandert hebt en zo.
paul deelen
shooter@home.nl

Berichten: 10
Geregistreerd: 09 Apr 2016, 14:14

Re: Met Domoticz EN IR motor aansturen gaat niet met esp8266

Berichtdoor Topcase1 » 31 Jan 2019, 20:59

Ik weet dat twee loops enz. niet werkt, maar het gaat om twee programma's waarvan de een wacht op een request en de ander (infrarood) loopt in een loop wachtende op IR code.

In mijn optiek leek het mij handiger om ze beide achter elkaar te zetten voor jullie duidelijkheid en wat regels weggelaten om het niet te onoverzichtelijk te maken.

Mijn vraag was/is of er een instructie is en hoe ik die moet toepassen om van de wachtende request naar de IR loop te komen zodat hij de eerste doorloopt de tweede door loopt enz.

Van alles heb ik geprobeerd, maar mis net die kennis om die loop te onderbreken om vervolgens die andere te doorlopen en weer naar de eerste enz. Je eerste reactie om twee loops te maken en die afwisselend te doorlopen lijkt mij logisch, maar hoe? Het lijkt mij niet handig dat ik al mijn probeersels op deze site plaats vanwege de ruimte. Op een andere manier lukt het mij niet om het over te brengen. Sorry.

Gr,
Topcase1

Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Re: Met Domoticz EN IR motor aansturen gaat niet met esp8266

Berichtdoor Gij Kieken » 31 Jan 2019, 21:58

while (voorwaade1) do loop1 anders
while(voorwaade2) do loop2

Terug naar ESP Software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 6 gasten