From 87dc889a7b794cd56ba2aac5cef8688edd11b7dc Mon Sep 17 00:00:00 2001 From: Lomanic Date: Fri, 22 Nov 2019 21:21:54 +0100 Subject: [PATCH] Implement OTA over local WiFi --- arduino.cpp | 49 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/arduino.cpp b/arduino.cpp index 9926db3..336a227 100644 --- a/arduino.cpp +++ b/arduino.cpp @@ -7,6 +7,9 @@ */ #include +#include +#include +#include /// Pins configuration @@ -18,7 +21,7 @@ #define MQTT_SERVER "sonic.fuz.re" #define MQTT_SERVERPORT 1883 - +#define ESP_HOSTNAME "piedthon" #include "WifiCredFuz.cpp" // Wifi and MQTT Credentials /* with @@ -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"); @@ -122,7 +125,7 @@ void messageToPiedthon(char *msg) { digitalWrite(GPIO_VERT, LOW); digitalWrite(GPIO_ROUGE, HIGH); break; - case '3' : // Rien + case '3' : // Rien digitalWrite(GPIO_ROUGE, HIGH); digitalWrite(GPIO_VERT, HIGH); break; @@ -135,7 +138,6 @@ void messageToPiedthon(char *msg) { void setup() { - Serial.begin(115200); delay(10); Serial.println(F("Adafruit MQTT PiedThon remix")); @@ -143,16 +145,51 @@ void setup() { pinMode(GPIO_VERT, OUTPUT); pinMode(GPIO_ROUGE, OUTPUT); + randomSeed(analogRead(0)); + setupWifi(); // 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(); Adafruit_MQTT_Subscribe *subscription; while ((subscription = mqtt.readSubscription(5000))) {