/*Die Fahrrichtung sowie Geschwindigkeit des Autos werden ueber den Blynk-Server gesteuert. Das kann entweder von einem Computer oder von einem Smartphone erfolgen (App "Blynk IoT"). Der ESP8266 wird ueber WLAN mit einem Router verbunden (der Router verbindet zum Internet). Alternativ kann die Verbindung des ESP zum Internet auch ueber ein Smartphone mit aktiviertem Tethering erfolgen: "Mobile HotSpot" auf "Ein". Der ESP waehlt sich in diesen HotSpot ein (der ESP muss in WLAN-Reichweite zu diesem Smartphone bleiben). Wenn dieses Smartphone am Auto angebracht wird, kann ueber beliebig weite Entfernung gesteuert werden. Zuerst wird der sketch gestartet, dann die App "Blynk" (sonst zeigt die App an "Offline"). Falls es nicht funktioniert: - ist der ESP mit WLAN verbunden ? - sind ssid und pass richtig eingetragen ? - sind BLYNK_TEMPLATE_ID und BLYNK_AUTH_TOKEN richtig eingetragen ? Am Serial Monitor muss eine Ausschrift erscheinen, ob die Verbindung zu Blynk steht. Bei Ausfall der Verbindung - erneut Reset am ESP oder Refresh der Blynk Webseite bzw App. */ #define BLYNK_PRINT Serial #define BLYNK_TEMPLATE_ID "TMPLjly43WpC" //uebernommen von der Website (Blynk-Device) #define BLYNK_DEVICE_NAME "Autofahren" //uebernommen von der Website (Blynk-Device) #define BLYNK_AUTH_TOKEN "-c8PXoVIxpN4wSWzr16tb92D0c5OY1Y3" //uebernommen von der Website (Blynk-Device) #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> #include "Fahrablaufmodule.h" //Binde den Programmablauf von Fahrablaufmodule.h ein char auth[] = BLYNK_AUTH_TOKEN; //Authority-Token (siehe oben) char ssid[] = "AndroidAP3232"; //SSID (Name) des Smartphone, das den HotSpot fuer den ESP bildet char pass[] = "20c93d0xxxxx"; //WLAN-Passwort fuer den Zugriff auf das Smartphone int ENA_ENB; BLYNK_CONNECTED() { Blynk.syncVirtual(V0); } void setup() { pinMode(D1, OUTPUT); //Motoren rechts - Bruecke pinMode(D2, OUTPUT); //Motoren rechts - Bruecke pinMode(D5, OUTPUT); //Motoren rechts - PWM pinMode(D3, OUTPUT); //Motoren links - Bruecke pinMode(D4, OUTPUT); //Motoren links - Bruecke pinMode(D6, OUTPUT); //Motoren links - PWM delay (2000); //Bis Programmstart warten, damit Anzeige im Serial Monitor sichtbar ist Serial.begin(9600); //fuer Test-Ausschrift am Serial Monitor ob Verbindung zu Blynk steht Blynk.begin(auth, ssid, pass); } BLYNK_WRITE(V5) //Festlegung, was der ESP bei einer Aenderung des Virtual Pin V5 machen soll { if(param.asInt() == 1) { Stopp(); } else { Stopp(); } } BLYNK_WRITE(V0) //Festlegung, was der ESP bei einer Aenderung des Virtual Pin VO machen soll { if(param.asInt() == 1) { Vor(); } else { Stopp(); } } BLYNK_WRITE(V1) //Festlegung, was der ESP bei einer Aenderung des Virtual Pin V1 machen soll { if(param.asInt() == 1) { Rueck(); } else { Stopp(); } } BLYNK_WRITE(V2) //Festlegung, was der ESP bei einer Aenderung des Virtual Pin V2 machen soll { if(param.asInt() == 1) { RechtsDrehen(); } else { Stopp(); } } BLYNK_WRITE(V3) //Festlegung, was der ESP bei einer Aenderung des Virtual Pin V3 machen soll { if(param.asInt() == 1) { LinksDrehen(); } else { Stopp(); } } BLYNK_WRITE(V4) // In der Blynk-App ist V4 als virtuelles Pin fuer das widget "Slider" angelegt { int Geschwindigkeit = param.asInt(); // Der Eingabewert von V4 wird in eine Variable geladen Serial.print("Geschwindigkeit ist: "); Serial.println (Geschwindigkeit); ENA_ENB = Geschwindigkeit * 100; // uebertragen des Werts in die Variablen ENA und ENB } void loop() { Blynk.run(); }
extern int ENA_ENB; void Stopp() //Achtung: "stop" funktioniert nicht , es ist ein reservierter Befehl { digitalWrite(D1, LOW); // Schalte alle Motoren aus digitalWrite(D2, LOW); digitalWrite(D3, LOW); digitalWrite(D4, LOW); } void Vor() { digitalWrite(D1, HIGH); // Schalte Motoren RECHTS ein digitalWrite(D2, LOW); analogWrite(D5, ENA_ENB); // Setze die Geschwindigkeit (zwischen 0...1024) digitalWrite(D3, HIGH); // Schalte Motoren LINKS ein digitalWrite(D4, LOW); analogWrite(D6, ENA_ENB); // Setze die Geschwindigkeit (zwischen 0...1024) } void LinksDrehen() { digitalWrite(D1, HIGH); // Schalte Motoren RECHTS ein digitalWrite(D2, LOW); analogWrite(D5, ENA_ENB); // Setze die Geschwindigkeit (zwischen 0...1024) digitalWrite(D3, LOW); // Schalte Motoren LINKS ein digitalWrite(D4, HIGH); analogWrite(D6, ENA_ENB); // Setze die Geschwindigkeit (zwischen 0...1024) } void RechtsDrehen() { digitalWrite(D1, LOW); // Schalte Motoren RECHTS ein digitalWrite(D2, HIGH); analogWrite(D5, ENA_ENB); // Setze die Geschwindigkeit (zwischen 0...1024) digitalWrite(D3, HIGH); // Schalte Motoren LINKS ein digitalWrite(D4, LOW); analogWrite(D6, ENA_ENB); // Setze die Geschwindigkeit (zwischen 0...1024) } void Rueck() { digitalWrite(D1, LOW); // Schalte Motoren RECHTS ein digitalWrite(D2, HIGH); analogWrite(D5, ENA_ENB); // Setze die Geschwindigkeit (zwischen 0...1024) digitalWrite(D3, LOW); // Schalte Motoren LINKS ein digitalWrite(D4, HIGH); analogWrite(D6, ENA_ENB); // Setze die Geschwindigkeit (zwischen 0...1024) }