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
|
||||
|
||||
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…
Reference in New Issue
Block a user