From d17f8259fe79f5285302cf4f297d367c4ef9da7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xose=20P=C3=A9rez?= Date: Mon, 19 Dec 2016 12:04:40 +0100 Subject: [PATCH] Support for multiple buttons on board --- CHANGELOG.md | 7 ++++++ code/data/script.js.gz | Bin 37417 -> 37418 bytes code/html/custom.js | 2 +- code/platformio.ini | 49 ++++++++++++++++--------------------- code/src/button.ino | 39 +++++++++++++++++++++++------ code/src/config/hardware.h | 38 +++++++++++++++++++--------- code/src/config/version.h | 2 +- code/src/main.ino | 5 ++-- code/src/relay.ino | 2 ++ 9 files changed, 93 insertions(+), 51 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b5fb5a14..a214c344 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,8 +4,15 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +### Added +- Added last-modified header to static contents +- Added support for multi-button boards (SONOFF_4CH) +- Force password changing if it's the default one +- Comment out hardware selection in hardware.h if using Arduino IDE + ### Changed - Using unreleased AsyncMqttClient with stability improvements +- Better decoupling between MQTT and relays/websockets ## [1.1.0] 2016-12-06 ### Added diff --git a/code/data/script.js.gz b/code/data/script.js.gz index df8381039010d7c315601825afb805b93e612543..046d536b589d1c6b9b4b57a05521456fd40bd888 100644 GIT binary patch delta 36750 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 Gr~v>Pr0%u= delta 36749 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 F0RS)2GHw6> diff --git a/code/html/custom.js b/code/html/custom.js index 8b80db50..2fe39e42 100644 --- a/code/html/custom.js +++ b/code/html/custom.js @@ -70,7 +70,7 @@ function createRelays(count) { $(line).find("input").each(function() { $(this).attr("data", relayID); }); - if (count > 1) $(".relay_id", line).html(" " + relayID); + if (count > 1) $(".relay_id", line).html(" " + (relayID+1)); line.appendTo("#relays"); $(":checkbox", line).iphoneStyle({ onChange: doToggle, diff --git a/code/platformio.ini b/code/platformio.ini index 891e42c7..edc8d1d4 100644 --- a/code/platformio.ini +++ b/code/platformio.ini @@ -127,6 +127,27 @@ upload_speed = 115200 upload_port = "192.168.4.1" upload_flags = --auth=fibonacci --port 8266 +[env:sonoff-4ch-debug] +platform = espressif8266 +framework = arduino +board = esp01_1m +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +extra_script = pio_hooks.py +build_flags = -g -Wl,-Tesp8266.flash.1m128.ld -DDEBUG_PORT=Serial -DSONOFF_4CH + +[env:sonoff-4ch-debug-ota] +platform = espressif8266 +framework = arduino +board = esp01_1m +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +extra_script = pio_hooks.py +build_flags = -g -Wl,-Tesp8266.flash.1m128.ld -DDEBUG_PORT=Serial -DSONOFF_4CH +upload_speed = 115200 +upload_port = "192.168.4.1" +upload_flags = --auth=fibonacci --port 8266 + [env:slampher-debug] platform = espressif8266 framework = arduino @@ -189,31 +210,3 @@ build_flags = -g -DDEBUG_PORT=Serial -DDEBUG_PORT=Serial -DESP_RELAY_BOARD -DENA upload_speed = 115200 upload_port = "192.168.4.1" upload_flags = --auth=fibonacci --port 8266 - -# ------------------------------------------------------------------------------ - -[env:studio-lamp-device] -topic = /home/studio/lamp/ip -platform = espressif8266_stage -framework = arduino -board = esp01_1m -lib_deps = ${common.lib_deps} -lib_ignore = -extra_script = pio_hooks.py -build_flags = -g -Wl,-Tesp8266.flash.1m128.ld -DDEBUG_PORT=Serial -DSONOFF -DENABLE_FAUXMO=1 -upload_speed = 115200 -upload_port = "192.168.4.1" -upload_flags = --auth=fibonacci --port 8266 - -[env:living-lamp-device] -topic = /home/living/lamp/ip -platform = espressif8266_stage -framework = arduino -board = esp01_1m -lib_deps = ${common.lib_deps} -lib_ignore = -extra_script = pio_hooks.py -build_flags = -g -Wl,-Tesp8266.flash.1m128.ld -DDEBUG_PORT=Serial -DSONOFF -DENABLE_FAUXMO=1 -upload_speed = 115200 -upload_port = "192.168.4.1" -upload_flags = --auth=fibonacci --port 8266 diff --git a/code/src/button.ino b/code/src/button.ino index 4f5d6b26..baaaca41 100644 --- a/code/src/button.ino +++ b/code/src/button.ino @@ -55,21 +55,46 @@ void buttonLoop() { } #else -#ifdef BUTTON_PIN +#ifdef BUTTON1_PIN #include -DebounceEvent button1 = false; +#include + +std::vector _buttons; void buttonSetup() { - button1 = DebounceEvent(BUTTON_PIN); + + #ifdef BUTTON1_PIN + _buttons.push_back(new DebounceEvent(BUTTON1_PIN)); + #endif + #ifdef BUTTON2_PIN + _buttons.push_back(new DebounceEvent(BUTTON2_PIN)); + #endif + #ifdef BUTTON3_PIN + _buttons.push_back(new DebounceEvent(BUTTON3_PIN)); + #endif + #ifdef BUTTON4_PIN + _buttons.push_back(new DebounceEvent(BUTTON4_PIN)); + #endif + + DEBUG_MSG("[BUTTON] Number of buttons: %d\n", _buttons.size()); + } void buttonLoop() { - if (button1.loop()) { - if (button1.getEvent() == EVENT_SINGLE_CLICK) relayToggle(0); - if (button1.getEvent() == EVENT_DOUBLE_CLICK) createAP(); - if (button1.getEvent() == EVENT_LONG_CLICK) ESP.reset(); + + for (unsigned int i=0; i < _buttons.size(); i++) { + if (_buttons[i]->loop()) { + uint8_t event = _buttons[i]->getEvent(); + DEBUG_MSG("[BUTTON] Pressed #%d, event: %d\n", i, event); + if (i == 0) { + if (event == EVENT_DOUBLE_CLICK) createAP(); + if (event == EVENT_LONG_CLICK) ESP.reset(); + } + if (event == EVENT_SINGLE_CLICK) relayToggle(i); + } } + } #else diff --git a/code/src/config/hardware.h b/code/src/config/hardware.h index 9adec94e..babbfea0 100644 --- a/code/src/config/hardware.h +++ b/code/src/config/hardware.h @@ -6,7 +6,7 @@ #define MANUFACTURER "NODEMCU" #define DEVICE "LOLIN" - #define BUTTON_PIN 0 + #define BUTTON1_PIN 0 #define RELAY1_PIN 12 #define LED_PIN 2 #define LED_PIN_INVERSE 0 @@ -19,7 +19,7 @@ #define MANUFACTURER "ITEAD" #define DEVICE "SONOFF" - #define BUTTON_PIN 0 + #define BUTTON1_PIN 0 #define RELAY1_PIN 12 #define LED_PIN 13 #define LED_PIN_INVERSE 0 @@ -28,7 +28,7 @@ #define MANUFACTURER "ITEAD" #define DEVICE "SONOFF_TH" - #define BUTTON_PIN 0 + #define BUTTON1_PIN 0 #define RELAY1_PIN 12 #define LED_PIN 13 #define LED_PIN_INVERSE 0 @@ -37,7 +37,7 @@ #define MANUFACTURER "ITEAD" #define DEVICE "SONOFF_TOUCH" - #define BUTTON_PIN 0 + #define BUTTON1_PIN 0 #define RELAY1_PIN 12 #define LED_PIN 13 #define LED_PIN_INVERSE 1 @@ -46,7 +46,7 @@ #define MANUFACTURER "ITEAD" #define DEVICE "SONOFF_POW" - #define BUTTON_PIN 0 + #define BUTTON1_PIN 0 #define RELAY1_PIN 12 #define LED_PIN 15 #define LED_PIN_INVERSE 1 @@ -56,17 +56,32 @@ #define MANUFACTURER "ITEAD" #define DEVICE "SONOFF_DUAL" - #define BUTTON_PIN 0 + #define BUTTON1_PIN 0 #define LED_PIN 13 #define LED_PIN_INVERSE 0 #undef SERIAL_BAUDRATE #define SERIAL_BAUDRATE 19230 +#elif defined(SONOFF_4CH) + + #define MANUFACTURER "ITEAD" + #define DEVICE "SONOFF_4CH" + #define BUTTON1_PIN 0 + #define BUTTON2_PIN 9 + #define BUTTON3_PIN 10 + #define BUTTON4_PIN 14 + #define RELAY1_PIN 12 + #define RELAY2_PIN 5 + #define RELAY3_PIN 4 + #define RELAY4_PIN 15 + #define LED_PIN 13 + #define LED_PIN_INVERSE 1 + #elif defined(SLAMPHER) #define MANUFACTURER "ITEAD" #define DEVICE "SLAMPHER" - #define BUTTON_PIN 0 + #define BUTTON1_PIN 0 #define RELAY1_PIN 12 #define LED_PIN 13 #define LED_PIN_INVERSE 0 @@ -75,7 +90,7 @@ #define MANUFACTURER "ITEAD" #define DEVICE "S20" - #define BUTTON_PIN 0 + #define BUTTON1_PIN 0 #define RELAY1_PIN 12 #define LED_PIN 13 #define LED_PIN_INVERSE 0 @@ -88,7 +103,8 @@ #define MANUFACTURER "ELECTRODRAGON" #define DEVICE "ESP_RELAY_BOARD" - #define BUTTON_PIN 2 + #define BUTTON1_PIN 0 + #define BUTTON2_PIN 2 #define RELAY1_PIN 12 #define RELAY2_PIN 13 #define LED_PIN 16 @@ -102,7 +118,7 @@ #define MANUFACTURER "WORKCHOICE" #define DEVICE "ECOPLUG" - #define BUTTON_PIN 13 + #define BUTTON1_PIN 13 #define RELAY_PIN 15 #define LED_PIN 2 #define LED_PIN_INVERSE 1 @@ -115,7 +131,7 @@ #define MANUFACTURER "TINKERMAN" #define DEVICE "ESPURNA" - #define BUTTON_PIN 0 + #define BUTTON1_PIN 0 #define RELAY1_PIN 12 #define LED_PIN 13 #define LED_PIN_INVERSE 0 diff --git a/code/src/config/version.h b/code/src/config/version.h index b11726cc..f49016c7 100644 --- a/code/src/config/version.h +++ b/code/src/config/version.h @@ -1,4 +1,4 @@ #define APP_NAME "ESPurna" -#define APP_VERSION "1.1.0" +#define APP_VERSION "1.2.0" #define APP_AUTHOR "xose.perez@gmail.com" #define APP_WEBSITE "http://tinkerman.cat" diff --git a/code/src/main.ino b/code/src/main.ino index e0dd71e6..c87b5c2b 100644 --- a/code/src/main.ino +++ b/code/src/main.ino @@ -104,9 +104,6 @@ void welcome() { void setup() { hardwareSetup(); - buttonSetup(); - ledSetup(); - welcome(); settingsSetup(); @@ -116,6 +113,8 @@ void setup() { } relaySetup(); + buttonSetup(); + ledSetup(); wifiSetup(); otaSetup(); mqttSetup(); diff --git a/code/src/relay.ino b/code/src/relay.ino index a27a4df2..77b7cb92 100644 --- a/code/src/relay.ino +++ b/code/src/relay.ino @@ -239,4 +239,6 @@ void relaySetup() { mqttRegister(relayMQTTCallback); + DEBUG_MSG("[RELAY] Number of relays: %d\n", _relays.size()); + }