Add 1 second heartbeat GPIO

This commit is contained in:
Theo Arends 2021-11-03 11:58:05 +01:00
parent 72f9c36b10
commit 5243b17a1a
33 changed files with 54 additions and 1 deletions

View File

@ -6,6 +6,7 @@ All notable changes to this project will be documented in this file.
## [10.0.0.1]
### Added
- Berry add module ``python_compat`` to be closer to Python syntax (#13428)
- 1 second heartbeat GPIO
### Changed
- File editor no-wrap (#13427)

View File

@ -102,6 +102,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo
## Changelog v10.0.0.1
### Added
- 1 second heartbeat GPIO
- ESP32 Berry add module ``python_compat`` to be closer to Python syntax [#13428](https://github.com/arendst/Tasmota/issues/13428)
### Breaking Changed

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 - RX"
#define D_SENSOR_HRG15_TX "HRG15 - TX"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "А"

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "А"

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "A"

View File

@ -842,6 +842,7 @@
#define D_SENSOR_HRG15_RX "HRG15 Rx"
#define D_SENSOR_HRG15_TX "HRG15 Tx"
#define D_SENSOR_VINDRIKTNING_RX "VINDRIKTNING"
#define D_SENSOR_HEARTBEAT "Heartbeat"
// Units
#define D_UNIT_AMPERE "安培"

View File

@ -377,6 +377,12 @@ void RtcSecond(void)
static uint32_t last_sync = 0;
static bool mutex = false;
if ((TasmotaGlobal.init_state >= INIT_GPIOS) && PinUsed(GPIO_HEARTBEAT)) {
digitalWrite(Pin(GPIO_HEARTBEAT), ~TasmotaGlobal.heartbeat_inverted &1);
delayMicroseconds(50);
digitalWrite(Pin(GPIO_HEARTBEAT), TasmotaGlobal.heartbeat_inverted);
}
if (mutex) { return; }
if (Rtc.time_synced) {

View File

@ -1766,6 +1766,10 @@ void GpioInit(void)
TasmotaGlobal.ledlnk_inverted = 1;
mpin -= (AGPIO(GPIO_LEDLNK_INV) - AGPIO(GPIO_LEDLNK));
}
else if (mpin == AGPIO(GPIO_HEARTBEAT_INV)) {
TasmotaGlobal.heartbeat_inverted = 1;
mpin -= (AGPIO(GPIO_HEARTBEAT_INV) - AGPIO(GPIO_HEARTBEAT));
}
else if ((mpin >= AGPIO(GPIO_PWM1_INV)) && (mpin < (AGPIO(GPIO_PWM1_INV) + MAX_PWMS))) {
bitSet(TasmotaGlobal.pwm_inverted, mpin - AGPIO(GPIO_PWM1_INV));
mpin -= (AGPIO(GPIO_PWM1_INV) - AGPIO(GPIO_PWM1));
@ -1891,6 +1895,11 @@ void GpioInit(void)
#endif // ESP8266
}
if (PinUsed(GPIO_HEARTBEAT)) {
pinMode(Pin(GPIO_HEARTBEAT), OUTPUT);
digitalWrite(Pin(GPIO_HEARTBEAT), TasmotaGlobal.heartbeat_inverted);
}
// Digital input
for (uint32_t i = 0; i < MAX_SWITCHES; i++) {
if (PinUsed(GPIO_INPUT, i)) {

View File

@ -278,6 +278,8 @@ enum GetDateAndTimeOptions { DT_LOCAL, DT_UTC, DT_LOCALNOTZ, DT_DST, DT_STD, DT_
enum LoggingLevels {LOG_LEVEL_NONE, LOG_LEVEL_ERROR, LOG_LEVEL_INFO, LOG_LEVEL_DEBUG, LOG_LEVEL_DEBUG_MORE};
enum InitStates {INIT_NONE, INIT_GPIOS, INIT_DONE};
enum WifiConfigOptions {WIFI_RESTART, EX_WIFI_SMARTCONFIG, WIFI_MANAGER, EX_WIFI_WPSCONFIG, WIFI_RETRY, WIFI_WAIT, WIFI_SERIAL, WIFI_MANAGER_RESET_ONLY, MAX_WIFI_OPTION};
enum SwitchModeOptions {TOGGLE, FOLLOW, FOLLOW_INV, PUSHBUTTON, PUSHBUTTON_INV, PUSHBUTTONHOLD, PUSHBUTTONHOLD_INV, PUSHBUTTON_TOGGLE, TOGGLEMULTI,

View File

@ -148,6 +148,8 @@ struct TasmotaGlobal_t {
bool enable_logging; // Enable logging
StateBitfield global_state; // Global states (currently Wifi and Mqtt) (8 bits)
uint8_t init_state; // Tasmota init state
uint8_t heartbeat_inverted; // Heartbeat pulse inverted flag
uint8_t spi_enabled; // SPI configured
uint8_t soft_spi_enabled; // Software SPI configured
uint8_t blinks; // Number of LED blinks
@ -430,6 +432,8 @@ void setup(void) {
XdrvCall(FUNC_PRE_INIT);
XsnsCall(FUNC_PRE_INIT);
TasmotaGlobal.init_state = INIT_GPIOS;
SetPowerOnState();
WifiConnect();

View File

@ -175,6 +175,7 @@ enum UserSelectablePins {
GPIO_BL0939_RX, // BL0939 Serial interface (Dual R3 v2)
GPIO_BL0942_RX, // BL0942 Serial interface
GPIO_HM330X_SET, // HM330X SET pin (sleep when low)
GPIO_HEARTBEAT, GPIO_HEARTBEAT_INV,
GPIO_SENSOR_END };
enum ProgramSelectablePins {
@ -369,7 +370,8 @@ const char kSensorNames[] PROGMEM =
D_SENSOR_VINDRIKTNING_RX "|"
D_SENSOR_BL0939_RX "|"
D_SENSOR_BL0942_RX "|"
D_SENSOR_HM330X_SET
D_SENSOR_HM330X_SET "|"
D_SENSOR_HEARTBEAT "|" D_SENSOR_HEARTBEAT "_i|"
;
const char kSensorNamesFixed[] PROGMEM =
@ -428,6 +430,8 @@ const uint16_t kGpioNiceList[] PROGMEM = {
#endif
AGPIO(GPIO_OUTPUT_HI), // Fixed output high
AGPIO(GPIO_OUTPUT_LO), // Fixed output low
AGPIO(GPIO_HEARTBEAT), // Every second pulsed high
AGPIO(GPIO_HEARTBEAT_INV), // Every second pulsed low
#ifdef USE_FTC532
AGPIO(GPIO_FTC532), // FTC532 touch input
#endif