форк від jeanjack/PiedThon
		
	Merge branch 'arduinoota' of Lomanic/PiedThon into master
Add OTA and wifi setup
This commit is contained in:
		
						коміт
						a9174a59b8
					
				| @ -1,3 +1,5 @@ | ||||
| # PiedThon | ||||
| 
 | ||||
| Feux PiedThon ESP8266 | ||||
| Feux PiedThon ESP8266 | ||||
| 
 | ||||
| https://wiki.fuz.re/doku.php?id=projets:fuz:piedthon | ||||
							
								
								
									
										202
									
								
								arduino.cpp
									
									
									
									
									
								
							
							
						
						
									
										202
									
								
								arduino.cpp
									
									
									
									
									
								
							| @ -1,12 +1,15 @@ | ||||
| 
 | ||||
| /***
 | ||||
|  * Fuz Piedthon | ||||
|  * Pedestrian traffic lights, green and red, controlled over MQTT | ||||
|  * Board:   ESP8266 | ||||
|  * | ||||
|  */ | ||||
|    Fuz Piedthon | ||||
|    Pedestrian traffic lights, green and red, controlled over MQTT | ||||
|    Board:   ESP8266 | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| #include <Arduino.h> | ||||
| #include <ESP8266mDNS.h> | ||||
| #include <WiFiUdp.h> | ||||
| #include <ArduinoOTA.h> | ||||
| 
 | ||||
| /// Pins configuration
 | ||||
| 
 | ||||
| @ -18,14 +21,14 @@ | ||||
| #define MQTT_SERVER      "sonic.fuz.re" | ||||
| #define MQTT_SERVERPORT  1883 | ||||
| 
 | ||||
| 
 | ||||
| #define ESP_HOSTNAME  "piedthon" | ||||
| 
 | ||||
| #include "WifiCredFuz.cpp"              // Wifi and MQTT Credentials
 | ||||
| /* with
 | ||||
| #define WLAN_SSID       "" | ||||
| #define WLAN_PASS       "" | ||||
| #define MQTT_USERNAME    "" //omg no user
 | ||||
| #define MQTT_KEY         "" //omg no key
 | ||||
|   #define WLAN_SSID       "" | ||||
|   #define WLAN_PASS       "" | ||||
|   #define MQTT_USERNAME    "" //omg no user
 | ||||
|   #define MQTT_KEY         "" //omg no key
 | ||||
| */ | ||||
| /// End of user config
 | ||||
| 
 | ||||
| @ -38,20 +41,20 @@ WiFiClient client; | ||||
| 
 | ||||
| void setupWifi() { | ||||
| 
 | ||||
|     // Connect to WiFi access point.
 | ||||
|     Serial.print("Connecting to "); | ||||
|     Serial.println(WLAN_SSID); | ||||
|   // Connect to WiFi access point.
 | ||||
|   Serial.print("Connecting to "); | ||||
|   Serial.println(WLAN_SSID); | ||||
| 
 | ||||
|     WiFi.begin(WLAN_SSID, WLAN_PASS); | ||||
|     while (WiFi.status() != WL_CONNECTED) { | ||||
|         delay(500); | ||||
|         Serial.print("."); | ||||
|     } | ||||
|     Serial.println(); | ||||
|   WiFi.begin(WLAN_SSID, WLAN_PASS); | ||||
|   while (WiFi.status() != WL_CONNECTED) { | ||||
|     delay(500); | ||||
|     Serial.print("."); | ||||
|   } | ||||
|   Serial.println(); | ||||
| 
 | ||||
|     Serial.print("WiFi connected"); | ||||
|     Serial.print(" IP address: "); | ||||
|     Serial.println(WiFi.localIP()); | ||||
|   Serial.print("WiFi connected"); | ||||
|   Serial.print(" IP address: "); | ||||
|   Serial.println(WiFi.localIP()); | ||||
| 
 | ||||
| } | ||||
| /// MQTT
 | ||||
| @ -67,8 +70,8 @@ Adafruit_MQTT_Client mqtt(&client, MQTT_SERVER, MQTT_SERVERPORT, MQTT_USERNAME, | ||||
| 
 | ||||
| /****************************** Feeds ***************************************/ | ||||
| 
 | ||||
| // Setup a feed called 'pub_photocell' for publishing.
 | ||||
| Adafruit_MQTT_Publish pub_photocell = Adafruit_MQTT_Publish(&mqtt, "piedthon/debug"); | ||||
| // Setup a feed called 'pub_piedthon' for publishing.
 | ||||
| Adafruit_MQTT_Publish pub_piedthon = Adafruit_MQTT_Publish(&mqtt, "piedthon/debug"); | ||||
| 
 | ||||
| // Setup a feed called 'sub_piedthon' for subscribing to changes.
 | ||||
| Adafruit_MQTT_Subscribe sub_piedthon = Adafruit_MQTT_Subscribe(&mqtt, "piedthon/input"); | ||||
| @ -78,55 +81,55 @@ char *mqtt_message; | ||||
| 
 | ||||
| // Function to connect and reconnect as necessary to the MQTT server.
 | ||||
| void MQTT_connect() { | ||||
|     int8_t ret; | ||||
|   int8_t ret; | ||||
| 
 | ||||
|     // Stop if already connected.
 | ||||
|     if (mqtt.connected()) { | ||||
|         return; | ||||
|   // Stop if already connected.
 | ||||
|   if (mqtt.connected()) { | ||||
|     return; | ||||
|   } | ||||
| 
 | ||||
|   Serial.print("Connecting to MQTT... "); | ||||
| 
 | ||||
|   uint8_t retries = 3; | ||||
|   while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
 | ||||
|     Serial.println(mqtt.connectErrorString(ret)); | ||||
|     Serial.println("Retrying MQTT connection in 5 seconds..."); | ||||
|     mqtt.disconnect(); | ||||
|     delay(5000);  // wait 5 seconds
 | ||||
|     retries--; | ||||
|     if (retries == 0) { | ||||
|       // basically die and wait for WDT to reset me
 | ||||
|       Serial.println("Fail to connect to MQTT after 3 tries ... "); | ||||
|       return; // will recall the function
 | ||||
|     } | ||||
| 
 | ||||
|     Serial.print("Connecting to MQTT... "); | ||||
| 
 | ||||
|     uint8_t retries = 3; | ||||
|     while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
 | ||||
|         Serial.println(mqtt.connectErrorString(ret)); | ||||
|         Serial.println("Retrying MQTT connection in 5 seconds..."); | ||||
|         mqtt.disconnect(); | ||||
|         delay(5000);  // wait 5 seconds
 | ||||
|         retries--; | ||||
|         if (retries == 0) { | ||||
|             // basically die and wait for WDT to reset me
 | ||||
|             Serial.println("Fail to connect to MQTT after 3 tries ... "); | ||||
|             return; // will recall the function
 | ||||
|         } | ||||
|     } | ||||
|     Serial.println("MQTT Connected!"); | ||||
|   } | ||||
|   Serial.println("MQTT Connected!"); | ||||
| } | ||||
| 
 | ||||
| /// PiedThon
 | ||||
| 
 | ||||
| void messageToPiedthon(char *msg) { | ||||
| 
 | ||||
|     // Clignotement ? deux en même temps ?
 | ||||
|     switch (msg[0]) { | ||||
|         // LOW active le relay
 | ||||
|         case '0' : // Rouge et Vert
 | ||||
|             digitalWrite(GPIO_ROUGE, LOW); | ||||
|             digitalWrite(GPIO_VERT, LOW); | ||||
|             break; | ||||
|         case '1' : // ROUGE
 | ||||
|             digitalWrite(GPIO_VERT, HIGH); | ||||
|             digitalWrite(GPIO_ROUGE, LOW); | ||||
|             break; | ||||
|         case '2' : // VERT
 | ||||
|             digitalWrite(GPIO_VERT, LOW); | ||||
|             digitalWrite(GPIO_ROUGE, HIGH); | ||||
|             break; | ||||
|         case '3' : // Rien
 | ||||
|             digitalWrite(GPIO_ROUGE, HIGH); | ||||
|             digitalWrite(GPIO_VERT, HIGH); | ||||
|             break; | ||||
|     } | ||||
|   // Clignotement ? deux en même temps ?
 | ||||
|   switch (msg[0]) { | ||||
|     // LOW active le relay
 | ||||
|     case '0' : // Rouge et Vert
 | ||||
|       digitalWrite(GPIO_ROUGE, LOW); | ||||
|       digitalWrite(GPIO_VERT, LOW); | ||||
|       break; | ||||
|     case '1' : // ROUGE
 | ||||
|       digitalWrite(GPIO_VERT, HIGH); | ||||
|       digitalWrite(GPIO_ROUGE, LOW); | ||||
|       break; | ||||
|     case '2' : // VERT
 | ||||
|       digitalWrite(GPIO_VERT, LOW); | ||||
|       digitalWrite(GPIO_ROUGE, HIGH); | ||||
|       break; | ||||
|     case '3'  : // Rien
 | ||||
|       digitalWrite(GPIO_ROUGE, HIGH); | ||||
|       digitalWrite(GPIO_VERT, HIGH); | ||||
|       break; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| //// Bug workaround for Arduino 1.6.6, it seems to need a function declaration
 | ||||
| @ -135,32 +138,65 @@ void messageToPiedthon(char *msg) { | ||||
| 
 | ||||
| 
 | ||||
| void setup() { | ||||
|   Serial.begin(115200); | ||||
|   delay(10); | ||||
|   Serial.println(F("Adafruit MQTT PiedThon remix")); | ||||
| 
 | ||||
|     Serial.begin(115200); | ||||
|     delay(10); | ||||
|     Serial.println(F("Adafruit MQTT PiedThon remix")); | ||||
|   pinMode(GPIO_VERT, OUTPUT); | ||||
|   pinMode(GPIO_ROUGE, OUTPUT); | ||||
| 
 | ||||
|     pinMode(GPIO_VERT, OUTPUT); | ||||
|     pinMode(GPIO_ROUGE, OUTPUT); | ||||
|   randomSeed(analogRead(0)); | ||||
| 
 | ||||
|     setupWifi(); | ||||
|   setupWifi(); | ||||
| 
 | ||||
|     // Setup MQTT subscription for onoff feed.
 | ||||
|     mqtt.subscribe(&sub_piedthon); | ||||
|   // Setup MQTT subscription for onoff feed.
 | ||||
|   mqtt.subscribe(&sub_piedthon); | ||||
| 
 | ||||
| 
 | ||||
|   ArduinoOTA.setHostname(ESP_HOSTNAME); | ||||
|   ArduinoOTA.onStart([]() { // switch off all the GPIOs during upgrade
 | ||||
|     digitalWrite(GPIO_ROUGE, HIGH); | ||||
|     digitalWrite(GPIO_VERT, HIGH); | ||||
|   }); | ||||
|   ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { | ||||
|     /*if (progress % (total / 4) == 0) {
 | ||||
|       digitalWrite(GPIO_ROUGE, random(2) ? LOW : HIGH); | ||||
|       digitalWrite(GPIO_VERT, random(2) ? LOW : HIGH); | ||||
|       }*/ | ||||
| 
 | ||||
|   }); | ||||
| 
 | ||||
|   ArduinoOTA.onEnd([]() { // do a fancy thing with our board led at end
 | ||||
|     for (int i = 0; i < 10; i++) { | ||||
|       int RANDOM_GPIO = GPIO_ROUGE; | ||||
|       if (random(2)) { // random(2) returns 0 or 1 randomly
 | ||||
|         RANDOM_GPIO = GPIO_VERT; | ||||
|       } | ||||
|       digitalWrite(RANDOM_GPIO, !digitalRead(RANDOM_GPIO)); | ||||
|       delay(400); | ||||
|     } | ||||
|     digitalWrite(GPIO_ROUGE, LOW); | ||||
|     digitalWrite(GPIO_VERT, LOW); | ||||
|   }); | ||||
| 
 | ||||
|   ArduinoOTA.onError([](ota_error_t error) { | ||||
|     (void)error; | ||||
|     ESP.restart(); | ||||
|   }); | ||||
|   ArduinoOTA.begin(); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void loop() { | ||||
|   MQTT_connect(); | ||||
|   ArduinoOTA.handle(); | ||||
| 
 | ||||
|     MQTT_connect(); | ||||
| 
 | ||||
|     Adafruit_MQTT_Subscribe *subscription; | ||||
|     while ((subscription = mqtt.readSubscription(5000))) { | ||||
|         if (subscription == &sub_piedthon) { | ||||
|             mqtt_message = (char *) sub_piedthon.lastread; | ||||
|             Serial.println("Got: "+String(mqtt_message)); | ||||
|             messageToPiedthon(mqtt_message); | ||||
|         } | ||||
|   Adafruit_MQTT_Subscribe *subscription; | ||||
|   while ((subscription = mqtt.readSubscription(5000))) { | ||||
|     if (subscription == &sub_piedthon) { | ||||
|       mqtt_message = (char *) sub_piedthon.lastread; | ||||
|       Serial.println("Got: " + String(mqtt_message)); | ||||
|       messageToPiedthon(mqtt_message); | ||||
|     } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Завантаження…
	
	
			
			x
			
			
		
	
		Посилання в новій задачі
	
	Block a user