Merge branch 'arduinoota' of Lomanic/PiedThon into master
Add OTA and wifi setup
This commit is contained in:
		
						commit
						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);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user