From 184da877beddba2e1f21fec8e078d32489363063 Mon Sep 17 00:00:00 2001 From: gn0st1c Date: Tue, 8 May 2018 23:27:19 +0300 Subject: [PATCH] tonbux mosquito killer support tonbux mosquito killer support --- code/espurna/config/arduino.h | 1 + code/espurna/config/hardware.h | 35 ++++++++++++++++++++++ code/espurna/migrate.ino | 16 ++++++++++ code/platformio.ini | 24 +++++++++++++++ images/devices/tonbux-mosquito-killer.jpg | Bin 0 -> 16679 bytes 5 files changed, 76 insertions(+) create mode 100644 images/devices/tonbux-mosquito-killer.jpg diff --git a/code/espurna/config/arduino.h b/code/espurna/config/arduino.h index 07e33612..649dfa87 100644 --- a/code/espurna/config/arduino.h +++ b/code/espurna/config/arduino.h @@ -81,6 +81,7 @@ //#define ZHILDE_EU44_W //#define LUANI_HVIO //#define ALLNET_4DUINO_IOT_WLAN_RELAIS +//#define TONBUX_MOSQUITO_KILLER //-------------------------------------------------------------------------------- // Features (values below are non-default values) diff --git a/code/espurna/config/hardware.h b/code/espurna/config/hardware.h index e29d0be4..19255635 100644 --- a/code/espurna/config/hardware.h +++ b/code/espurna/config/hardware.h @@ -2072,6 +2072,41 @@ #define LED1_PIN 15 #define LED1_PIN_INVERSE 0 +// ----------------------------------------------------------------------------- +// Tonbux 50-100M Smart Mosquito Killer USB +// https://www.aliexpress.com/item/Original-Tonbux-50-100M-Smart-Mosquito-Killer-USB-Plug-No-Noise-Repellent-App-Smart-Module/32859330820.html +// ----------------------------------------------------------------------------- + +#elif defined(TONBUX_MOSQUITO_KILLER) + + // Info + #define MANUFACTURER "TONBUX" + #define DEVICE "MOSQUITO_KILLER" + + // Buttons + #define BUTTON1_PIN 2 + #define BUTTON1_MODE BUTTON_PUSHBUTTON | BUTTON_DEFAULT_HIGH + #define BUTTON1_RELAY 1 + + // Relays + #define RELAY1_PIN 5 // not a relay, fan + #define RELAY1_TYPE RELAY_TYPE_NORMAL + + // LEDs + #define LED1_PIN 15 // blue led + #define LED1_PIN_INVERSE 1 + #define LED1_MODE LED_MODE_WIFI + #define LED2_PIN 14 // red led + #define LED2_PIN_INVERSE 1 + #define LED2_MODE LED_MODE_RELAY + + #define LED3_PIN 12 // UV leds (1-2-3-4-5-6-7-8) + #define LED3_PIN_INVERSE 0 + #define LED3_RELAY 1 + #define LED4_PIN 16 // UV leds (9-10-11) + #define LED4_PIN_INVERSE 0 + #define LED4_RELAY 1 + // ----------------------------------------------------------------------------- // TEST boards (do not use!!) // ----------------------------------------------------------------------------- diff --git a/code/espurna/migrate.ino b/code/espurna/migrate.ino index ab4ef36b..67d97c1f 100644 --- a/code/espurna/migrate.ino +++ b/code/espurna/migrate.ino @@ -937,6 +937,22 @@ void migrate() { setSetting("relayResetGPIO", 0, 12); setSetting("relayType", 0, RELAY_TYPE_LATCHED); + #elif defined(TONBUX_MOSQUITO_KILLER) + + setSetting("board", 74); + setSetting("ledGPIO", 0, 15); + setSetting("ledLogic", 0, 1); + setSetting("ledGPIO", 1, 14); + setSetting("ledLogic", 1, 1); + setSetting("ledGPIO", 2, 12); + setSetting("ledLogic", 2, 0); + setSetting("ledGPIO", 3, 16); + setSetting("ledLogic", 3, 0); + setSetting("btnGPIO", 0, 2); + setSetting("btnRelay", 0, 0); + setSetting("relayGPIO", 0, 5); + setSetting("relayType", 0, RELAY_TYPE_NORMAL); + #else // Allow users to define new settings without migration config diff --git a/code/platformio.ini b/code/platformio.ini index a5a58e9e..b8c6e6d1 100644 --- a/code/platformio.ini +++ b/code/platformio.ini @@ -2128,3 +2128,27 @@ upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 extra_scripts = ${common.extra_scripts} + +[env:tonbux-mosquito-killer] +platform = ${common.platform} +framework = arduino +board = esp01_1m +board_flash_mode = dout +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m} -DTONBUX_MOSQUITO_KILLER +monitor_baud = 115200 +extra_scripts = ${common.extra_scripts} + +[env:tonbux-mosquito-killer-ota] +platform = ${common.platform} +framework = arduino +board = esp01_1m +board_flash_mode = dout +lib_deps = ${common.lib_deps} +lib_ignore = ${common.lib_ignore} +build_flags = ${common.build_flags_1m} -DTONBUX_MOSQUITO_KILLER +upload_speed = 115200 +upload_port = "${env.ESPURNA_IP}" +upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 +extra_scripts = ${common.extra_scripts} \ No newline at end of file diff --git a/images/devices/tonbux-mosquito-killer.jpg b/images/devices/tonbux-mosquito-killer.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dfed5f3c518ea0ce0b535f3e5c5665e0c01f1be4 GIT binary patch literal 16679 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 Wp35qPPPIoV|GS=}>fPr1^8Wy-261r! literal 0 HcmV?d00001