sketch_52_ESP_espblynkcar_whatsapp   (ESP8266 NodeMCU)

sketch_52_ESP_espblynkcar_whatsapp
  /* Das Auto wird ueber die App "Blynk" vom Smartphone Galaxy aus gesteuert, mit den widgets "Joystick" und "Slider".
     Der Slider veraendert die Geschwindigkeit. Der Wert wird von Blynk ueber das virtuelle Pin V12 zum ESP uebertragen
     und in die Variablen ENA und ENB eingetragen.
     Das Smartphone LG ist am Auto befestigt und erzeugt einen Hotspot (Tethering). Am LG Mobile HotSpot auf "Ein" stellen.
     Ueber diesen Hotspot gelangt der ESP ins Internet.
     Das LG ruft das Galaxy ueber WhatApp Videoanruf an, dann kann der Videostream angesehen werden (Split Screen Blynk/WhatApp). 

     Zuerst muss der sketch gestartet werden, dann die Smartphone-App (sonst zeigt die App an "keine Verbindung" (bzw."disconnected").
     Falls es nicht funktioniert: 
    - ist der ESP mit WLAN verbunden ?
    - sind ssid und pass richtig eingetragen ?
    - in der App den Blynk Authority Token evtl aktualisieren (neuer Token wird an die hinterlegte EMail-Adresse gesendet, muss dann 
      unten im sketch aktualisiert werden).  
  
    Bemerkung: 
    #include <Blynk.h> wenn das aktiviert wird, funktioniert zwar das Schalten der LED, aber es wird nichts im Serial Monitor angezeigt!*/
   
  #define BLYNK_PRINT Serial                          
  #include  <ESP8266WiFi.h>
  #include  <BlynkSimpleEsp8266.h>
  
  char auth[] = "op369BnauezyDQbDDoJYpIfjAndvUOHy"; //Auth Token, der von der Blynk-App per email gesendet worden war (evtl aktualisieren)
  char ssid[] = "X Power3_43xx";                    //SSID (Name) des Smartphone (LG), das den HotSpot bildet (ersetze xx)
  char pass[] = "LGxxxxxxxxx";                      //WLAN-Passwort fuer den Zugriff auf das Smartphone (LG) (ersetze xxxxxxxxx)
  
  #include "Fahrablauf.h"
  int ENA = 500;                                    //Geschwind.Motoren links (PWM, Wert zwischen 0 ...1024)
  int ENB = 500;                                    //Geschwind.Motoren rechts
  
  void setup()
  { 
   Serial.begin(9600);                              //Serial Monitor muss ebenfalls auf 9600 eingestellt sein!
   delay (1000);                                    //Am Serial Monitor muss sich BLYNk melden 
   Serial.println("Start");   
   Blynk.begin(auth, ssid, pass); 
   while (Blynk.connect() == false)                 //Warte, bis verbunden ist
    {
    }
  
  /*Programmiere ESP Pins D1...6 als Ausgang (Bezeichnung mit "D", sonst werden die GPIO-Nummern angesprochen)*/  
    pinMode(D1, OUTPUT);                          //Motoren rechts - Bruecke
    pinMode(D2, OUTPUT);                          //Motoren rechts - Bruecke
    pinMode(D3, OUTPUT);                          //Motoren rechts - PWM
    pinMode(D4, OUTPUT);                          //Motoren links - Bruecke
    pinMode(D5, OUTPUT);                          //Motoren links - Bruecke
    pinMode(D6, OUTPUT);                          //Motoren links - PWM
  } 
   
  void loop()
  { 
   Blynk.run(); 
  } 
  
  BLYNK_WRITE(V1)   // In der Blynk-App ist V1 als virtuelles Pin fuer das widget "Joystick" angelegt worden.
  { 
   int x = param[0].asInt(); 
   int y = param[1].asInt();  
   
   //Refer the truth table for this part:
  
   if(x==-1 && y==-1){               //Backward and Left            
   backward_left();
   }else if(x==-1 && y==0){          //Left Turn 
   left_turn();
   }else if(x==-1 && y==1){          //Forward and Left  
   forward_left();     
   }else if(x==0 && y==-1){          //Backward   
   backward();  
   }else if(x==0 && y==0){           //Stay
   stay ();   
   }else if(x==0 && y==1){           //Forward 
   forward();
   }else if(x==1 && y==-1){          //Backward and Right     
   backward_right();
   }else if(x==1 && y==0){           //Right turn 
   right_turn ();
   }else if(x==1 && y==1){           //Forward and Right 
   forward_right();
   }
  }
  
  BLYNK_WRITE(V12)    // In der Blynk-App ist V12 als virtuelles Pin fuer das widget "Slider" angelegt worden.
  {
   int slider_value = param.asInt();     // Der Eingabewert von V12 wird in eine Variable geladen
   Serial.print("Slider value is: ");
   Serial.println (slider_value);
   ENA= slider_value;                    // uebertragen des Werts in die Variablen ENA und ENB 
   ENB= slider_value;
  }
Fahrablauf.h
  extern int ENA;                      //Die Variablen ENA und ENB sind im Hauptprogramm bereits...
  extern int ENB;                      //... definiert, siue muessen hier nochmal deklariert werden
  
  void backward_left(){                //Backward and Left
    digitalWrite(D1, LOW);             // Schalte Motoren RECHTS ein 
    digitalWrite(D2, HIGH);                                                      
    analogWrite(D3, ENB);              // Setze die Geschwindigkeit rechts(zwischen 0 und 1024)
    digitalWrite(D4, LOW);             // Schalte Motoren LINKS ein 
    digitalWrite(D5, LOW);                                
    analogWrite(D6, ENA); }            // Setze die Geschwindigkeit links(zwischen 0 und 1024)
  
  void left_turn(){                    //Left Turn
    digitalWrite(D1, HIGH);            // Schalte Motoren RECHTS ein 
    digitalWrite(D2, LOW);                                                      
    analogWrite(D3, ENB);              // Setze die Geschwindigkeit rechts(zwischen 0 und 1024)
    digitalWrite(D4, LOW);             // Schalte Motoren LINKS ein 
    digitalWrite(D5, HIGH);                                
    analogWrite(D6, ENA);}             // Setze die Geschwindigkeit links(zwischen 0 und 1024)
  
  void forward_left(){                 //Forward and LEFT
    digitalWrite(D1, HIGH);            // Schalte Motoren RECHTS ein 
    digitalWrite(D2, LOW);                                                      
    analogWrite(D3, ENB);              // Setze die Geschwindigkeit rechts(zwischen 0 und 1024)
    digitalWrite(D4, LOW);             // Schalte Motoren LINKS ein 
    digitalWrite(D5, LOW);                                
    analogWrite(D6, ENA);}             // Setze die Geschwindigkeit links(zwischen 0 und 1024)
  
  void backward(){                     //Backward
    digitalWrite(D1, LOW);             // Schalte Motoren RECHTS ein 
    digitalWrite(D2, HIGH);                                                      
    analogWrite(D3, ENB);              // Setze die Geschwindigkeit rechts(zwischen 0 und 1024)
    digitalWrite(D4, LOW);             // Schalte Motoren LINKS ein 
    digitalWrite(D5, HIGH);                                
    analogWrite(D6, ENA);}             // Setze die Geschwindigkeit links(zwischen 0 und 1024)
  
  void stay(){                         //Stay
    digitalWrite(D1, LOW);             // Schalte Motoren RECHTS ein 
    digitalWrite(D2, LOW);                                                      
    analogWrite(D3, ENB);              // Setze die Geschwindigkeit rechts(zwischen 0 und 1024)
    digitalWrite(D4, LOW);             // Schalte Motoren LINKS ein 
    digitalWrite(D5, LOW);                                
    analogWrite(D6, ENA);}             // Setze die Geschwindigkeit links(zwischen 0 und 1024)
  
  void forward(){                      //Forward
    digitalWrite(D1, HIGH);            // Schalte Motoren RECHTS ein 
    digitalWrite(D2, LOW);                                                      
    analogWrite(D3, ENB);              // Setze die Geschwindigkeit rechts(zwischen 0 und 1024)
    digitalWrite(D4, HIGH);            // Schalte Motoren LINKS ein 
    digitalWrite(D5, LOW);                                
    analogWrite(D6, ENA);}             // Setze die Geschwindigkeit links(zwischen 0 und 1024)
  
  void backward_right(){               //Backward and Right   
    digitalWrite(D1, LOW);             // Schalte Motoren RECHTS ein 
    digitalWrite(D2, LOW);                                                      
    analogWrite(D3, ENB);              // Setze die Geschwindigkeit rechts(zwischen 0…1024)
    digitalWrite(D4, LOW);             // Schalte Motoren LINKS ein 
    digitalWrite(D5, HIGH);                                
    analogWrite(D6, ENA);}             // Setze die Geschwindigkeit links(zwischen 0 und 1024)
  
  void right_turn(){                   //Right turn    
    digitalWrite(D1, LOW);             // Schalte Motoren RECHTS ein 
    digitalWrite(D2, HIGH);                                                      
    analogWrite(D3, ENB);              // Setze die Geschwindigkeit rechts(zwischen 0 und 1024)
    digitalWrite(D4, HIGH);            // Schalte Motoren LINKS ein 
    digitalWrite(D5, LOW);                                
    analogWrite(D6, ENA);}             // Setze die Geschwindigkeit links(zwischen 0 und 1024)
  
  void forward_right(){                //Forward and Right     
    digitalWrite(D1, LOW);             // Schalte Motoren RECHTS ein 
    digitalWrite(D2, LOW);                                                      
    analogWrite(D3, ENB);              // Setze die Geschwindigkeit rechts(zwischen 0 und 1024)
    digitalWrite(D4, HIGH);            // Schalte Motoren LINKS ein 
    digitalWrite(D5, LOW);                                
    analogWrite(D6, ENA);}             // Setze die Geschwindigkeit links(zwischen 0 und 1024)