![]()  | 
				
				
				Informationstechnik eMalRob-Austausch  | 
				
				Sommersemester 2020 Florian Herker (hefl1018) Fabian Passler (pafa1011)  | 
			
			
  | 
		|||
| 
			Diese Seite erklärt das Szenario #2, beschrieben auf 
			 
			Stand der Technik.
			 Hinweis: OTA steht hier (und auf allen anderen Seiten dieser Projektwebseite) für Over The Air! Im folgenden wird ein Muster-Code gezeigt, der so auf dem ESP32 des eMalRob-FG funktioniert. Damit dieser Code und somit auch weitere Übertragungen OTA funktionieren, muss folgendes beachtet werden: 1. Zuerst müssen die nötigen Includes der OTA-Bibliothek vorhanden sein (//Includes für OTA 2. Danach müssen die Router-Daten des aktuell zugänglichen Routers eingetragen werden. Also bei const char* ssid muss der Netzwerk-Name innerhalb der Anführungsstriche eingetragen werden. Bei const char* password muss der WPA/WPA2-Schlüssel, also das Router-Passwort eingetragen werden. 3. Die Code-Zeilen, die innerhalb der void setup() {} dürfen nicht verändert werden. Zudem muss die void loop() {} Sonst können weitere OTA-Übertragungen nicht stattfinden. 4. Der OTA-Roh-Code (mit eingetragenen Router-Daten aus Schritt 2) kann nun seriell auf den ESP32 hochgeladen werden. Ist dies erfolgreich, kann danach ohne eine weitere serielle Verbindung ein neuer Code auf den ESP32 über den Netzwerkschnittstellen-Port (bei Arduino unter "Werkzeuge -> Port") übertragen werden. Diese Übertragung erfolgt damit OTA. Eine genaue und detallierte Anleitung dazu befindet sich auf der Seite Bedienungsanleitung. 
			//Includes für OTA 
			#include 
			<WiFi.h> 
			#include 
			<ESPmDNS.h> 
			#include 
			<WiFiUdp.h> 
			#include 
			<ArduinoOTA.h> 
			 
			//Includes für eMalRob-FG 
			#include 
			"Ticker.h" 
			#include 
			<arduino.h> 
			#include 
			<analogWrite.h> 
			#define 
			
			AIN1 17       
			
			//Pindefinitionen für ESP32 
			#define 
			AIN2 16 
			#define 
			
			BIN1 4 
			#define 
			
			BIN2 2 
			#define 
			
			EN 27 
			#define 
			
			Pin 39 
			#define 
			
			Pin1 36 
			int s=0; 
			int var; 
			int s1=0; 
			int 
			var1; 
			int 
			Z1=0; 
			int 
			Z=0; 
			int Y1=0; 
			int Y=0; 
			 
			//WLAN-ROUTER-DATEN 
			const char* 
			ssid =
			
			"..WLAN-ROUTER-NAME.."; 
			const char* 
			password =
			
			"..WLAN-ROUTER-PASSWORT.."; 
			 
			void 
			setup() { 
			 
			  /** 
			BEGIN OTA SETUP **/ 
			 
			
			  
			Serial.begin(115200); 
			
			  
			Serial.println("Booting"); 
			
			  
			WiFi.mode(WIFI_STA); 
			
			  
			WiFi.begin(ssid, 
			password); 
			
			  
			while (WiFi.waitForConnectResult() 
			!= WL_CONNECTED) { 
			
			    
			Serial.println("Connection 
			Failed! Rebooting..."); 
			
			    
			delay(5000); 
			
			    
			ESP.restart(); 
			
			  } 
			 
			  // 
			Port defaults to 3232 
			  // 
			ArduinoOTA.setPort(3232); 
			  // 
			Hostname defaults to esp3232-[MAC] 
			  // 
			ArduinoOTA.setHostname("myesp32"); 
			  // No 
			authentication by default 
			  // 
			ArduinoOTA.setPassword("admin"); 
			  // 
			Password can be set with it's md5 value as well 
			  // 
			MD5(admin) = 21232f297a57a5a743894a0e4a801fc3 
			  // 
			ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3"); 
			 
			
			  
			ArduinoOTA 
			
			    .onStart([]() { 
			
			      
			String type; 
			
			      
			if (ArduinoOTA.getCommand() 
			== U_FLASH) 
			
			       
			type = "sketch"; 
			
			      
			else
			// U_SPIFFS 
			
			       
			type = "filesystem"; 
			 
			
			      
			// NOTE: if updating SPIFFS this would be the 
			place to unmount SPIFFS using SPIFFS.end() 
			
			      
			Serial.println("Start 
			updating " + type); 
			
			    }) 
			
			    .onEnd([]() { 
			
			      
			Serial.println("\nEnd"); 
			
			    }) 
			
			    .onProgress([](unsigned 
			int progress,
			unsigned int
			total) { 
			
			      
			Serial.printf("Progress: 
			%u%%\r", (progress / (total / 100))); 
			
			    }) 
			
			    .onError([](ota_error_t error) { 
			
			      
			Serial.printf("Error[%u]: 
			", error); 
			
			      
			if (error == OTA_AUTH_ERROR)
			Serial.println("Auth 
			Failed"); 
			
			      
			else if (error == OTA_BEGIN_ERROR)
			Serial.println("Begin 
			Failed"); 
			
			      
			else if (error == OTA_CONNECT_ERROR)
			Serial.println("Connect 
			Failed"); 
			
			      
			else if (error == OTA_RECEIVE_ERROR)
			Serial.println("Receive 
			Failed"); 
			
			      
			else if (error == OTA_END_ERROR)
			Serial.println("End 
			Failed"); 
			
			    }); 
			 
			
			  
			ArduinoOTA.begin(); 
			 
			
			  
			Serial.println("Ready"); 
			
			  
			Serial.print("IP 
			address: "); 
			
			  
			Serial.println(WiFi.localIP()); 
			 
			  /** 
			OTA SETUP END **/ 
			 
			  /** 
			BEGIN MOTOR-PINS SETUP **/ 
			 
			
			  
			pinMode(AIN1,OUTPUT); 
			
			  
			pinMode(AIN2,OUTPUT); 
			
			  
			pinMode(BIN1,OUTPUT); 
			
			  
			pinMode(BIN2,OUTPUT); 
			
			  
			pinMode(EN,OUTPUT); 
			
			  
			pinMode(Pin,INPUT); 
			
			  
			pinMode(Pin1,INPUT); 
			
			  
			digitalWrite(EN,HIGH); 
			 
			  /** 
			MOTOR-PINS SETUP END **/ 
			} 
			 
			 
			void
			loop() { 
			
			  
			ArduinoOTA.handle(); 
			 
			  
			digitalWrite(EN,HIGH);   
			 // 
			einschalten des Motortreibers 
			  
			analogWrite(AIN1,255);   
			
			//Rechts 
			  
			analogWrite(AIN2,HIGH);  
			
			//fährt rückwärts/ fast decay (Motor 1) 
			   
			  
			analogWrite(BIN1,255);   
			
			//Links 
			  
			analogWrite(BIN2,HIGH);  
			
			//fährt vorwärts/ fast decay (Motor 2) 
			 
			  
			delay(1000); 
			
			  
			analogWrite(BIN1,HIGH); 
			
			  
			analogWrite(BIN2,HIGH); 
			
			  
			analogWrite(AIN1,LOW); 
			
			  
			analogWrite(AIN2,LOW); 
			
			  
			delay(1000); 
			
			   
			
			  
			analogWrite(BIN1,LOW); 
			
			  
			analogWrite(BIN2,LOW);  
			
			  
			analogWrite(AIN1,LOW); 
			
			  
			analogWrite(AIN2,LOW); 
			  
			digitalWrite(EN,LOW);
			   // 
			auschalten des Motortreibers 
			  
			delay(1000); 
			 
			}  | 
		
| Mit Unterstützung von Prof. J. Walter | Sommersemester 2020 | 
