Refactor ESP32 Temperature and Hall Effect sensor

This commit is contained in:
Theo Arends 2021-04-12 16:21:33 +02:00
parent 0318f630ac
commit 7457d0b03c
5 changed files with 54 additions and 35 deletions

View File

@ -900,7 +900,6 @@
// #define ETH_CLKMODE 0 // [EthClockMode] 0 = ETH_CLOCK_GPIO0_IN, 1 = ETH_CLOCK_GPIO0_OUT, 2 = ETH_CLOCK_GPIO16_OUT, 3 = ETH_CLOCK_GPIO17_OUT // #define ETH_CLKMODE 0 // [EthClockMode] 0 = ETH_CLOCK_GPIO0_IN, 1 = ETH_CLOCK_GPIO0_OUT, 2 = ETH_CLOCK_GPIO16_OUT, 3 = ETH_CLOCK_GPIO17_OUT
#define USE_ADC // Add support for ADC on GPIO32 to GPIO39 #define USE_ADC // Add support for ADC on GPIO32 to GPIO39
#define USE_HALLEFFECT // Add support for internal Hall Effcet sensor connected to GPIO36 and GPIO39
//#define USE_SPI // Add support for hardware SPI //#define USE_SPI // Add support for hardware SPI
//#define USE_MI_ESP32 // Add support for ESP32 as a BLE-bridge (+9k2 mem, +292k flash) //#define USE_MI_ESP32 // Add support for ESP32 as a BLE-bridge (+9k2 mem, +292k flash)

View File

@ -737,9 +737,7 @@ void ResponseAppendFeatures(void)
#ifdef USE_BERRY #ifdef USE_BERRY
feature8 |= 0x00000008; // xdrv_52_9_berry.ino feature8 |= 0x00000008; // xdrv_52_9_berry.ino
#endif #endif
#ifdef USE_HALLEFFECT // feature8 |= 0x00000010;
feature8 |= 0x00000010; // xsns_87_esp32_halleffect.ino
#endif
#if defined(USE_ENERGY_SENSOR) && defined(USE_ENERGY_DUMMY) #if defined(USE_ENERGY_SENSOR) && defined(USE_ENERGY_DUMMY)
feature8 |= 0x00000020; feature8 |= 0x00000020;
#endif #endif

View File

@ -821,11 +821,6 @@ bool MqttShowSensor(void)
{ {
ResponseAppendTime(); ResponseAppendTime();
#ifdef ESP32
float t = CpuTemperature();
ResponseAppend_P(PSTR(",\"Cpu" D_JSON_TEMPERATURE "\":%*_f"), Settings.flag2.temperature_resolution, &t);
#endif
int json_data_start = strlen(TasmotaGlobal.mqtt_data); int json_data_start = strlen(TasmotaGlobal.mqtt_data);
for (uint32_t i = 0; i < MAX_SWITCHES; i++) { for (uint32_t i = 0; i < MAX_SWITCHES; i++) {
#ifdef USE_TM1638 #ifdef USE_TM1638

View File

@ -187,7 +187,6 @@
#define USE_LIGHT_PALETTE // Add support for color palette (+0k9 code) #define USE_LIGHT_PALETTE // Add support for color palette (+0k9 code)
#define USE_HALLEFFECT // Add support for internal Hall Effcet sensor connected to GPIO36 and GPIO39
#define USE_DS18x20 // Add support for DS18x20 sensors with id sort, single scan and read retry (+1k3 code) #define USE_DS18x20 // Add support for DS18x20 sensors with id sort, single scan and read retry (+1k3 code)
#define USE_I2C // I2C using library wire (+10k code, 0k2 mem, 124 iram) #define USE_I2C // I2C using library wire (+10k code, 0k2 mem, 124 iram)

View File

@ -1,5 +1,5 @@
/* /*
xsns_87_esp32_halleffect.ino - ESP32 Hall Effect sensor for Tasmota xsns_87_esp32_sensors.ino - ESP32 Temperature and Hall Effect sensor for Tasmota
Copyright (C) 2021 Theo Arends Copyright (C) 2021 Theo Arends
@ -18,9 +18,8 @@
*/ */
#ifdef ESP32 #ifdef ESP32
#if CONFIG_IDF_TARGET_ESP32
#ifdef USE_HALLEFFECT
/*********************************************************************************************\ /*********************************************************************************************\
* ESP32 CPU Temperature
* ESP32 internal Hall Effect sensor connected to both GPIO36 and GPIO39 * ESP32 internal Hall Effect sensor connected to both GPIO36 and GPIO39
* *
* To enable set * To enable set
@ -30,13 +29,15 @@
#define XSNS_87 87 #define XSNS_87 87
#if CONFIG_IDF_TARGET_ESP32
#define HALLEFFECT_SAMPLE_COUNT 32 // 32 takes about 12 mS at 80MHz CPU frequency #define HALLEFFECT_SAMPLE_COUNT 32 // 32 takes about 12 mS at 80MHz CPU frequency
struct { struct {
bool present = false; bool present = false;
} HEData; } HEData;
void HallEffectInit(void) { void Esp32SensorInit(void) {
if (PinUsed(GPIO_HALLEFFECT) && PinUsed(GPIO_HALLEFFECT, 1)) { if (PinUsed(GPIO_HALLEFFECT) && PinUsed(GPIO_HALLEFFECT, 1)) {
if (((36 == Pin(GPIO_HALLEFFECT)) && (39 == Pin(GPIO_HALLEFFECT, 1))) || if (((36 == Pin(GPIO_HALLEFFECT)) && (39 == Pin(GPIO_HALLEFFECT, 1))) ||
((39 == Pin(GPIO_HALLEFFECT)) && (36 == Pin(GPIO_HALLEFFECT, 1)))) { ((39 == Pin(GPIO_HALLEFFECT)) && (36 == Pin(GPIO_HALLEFFECT, 1)))) {
@ -51,22 +52,52 @@ void HallEffectInit(void) {
const char HTTP_SNS_HALL_EFFECT[] PROGMEM = "{s}" D_HALL_EFFECT "{m}%d{e}"; const char HTTP_SNS_HALL_EFFECT[] PROGMEM = "{s}" D_HALL_EFFECT "{m}%d{e}";
#endif // USE_WEBSERVER #endif // USE_WEBSERVER
void HallEffectShow(bool json) { #endif // CONFIG_IDF_TARGET_ESP32
void Esp32SensorShow(bool json) {
#if CONFIG_IDF_TARGET_ESP32
int value = 0; int value = 0;
for (uint32_t i = 0; i < HALLEFFECT_SAMPLE_COUNT; i++) { if (HEData.present) {
value += hallRead(); for (uint32_t i = 0; i < HALLEFFECT_SAMPLE_COUNT; i++) {
value += hallRead();
}
value /= HALLEFFECT_SAMPLE_COUNT;
} }
value /= HALLEFFECT_SAMPLE_COUNT; #endif // CONFIG_IDF_TARGET_ESP32
if (json) { if (json) {
ResponseAppend_P(PSTR(",\"" D_JSON_HALLEFFECT "\":%d"), value); float t = CpuTemperature();
ResponseAppend_P(PSTR(",\"ESP32\":{\"" D_JSON_TEMPERATURE "\":%*_f"), Settings.flag2.temperature_resolution, &t);
#if CONFIG_IDF_TARGET_ESP32
if (HEData.present) {
ResponseAppend_P(PSTR(",\"" D_JSON_HALLEFFECT "\":%d"), value);
}
#endif // CONFIG_IDF_TARGET_ESP32
ResponseJsonEnd();
#ifdef USE_DOMOTICZ #ifdef USE_DOMOTICZ
if (0 == TasmotaGlobal.tele_period) { if (0 == TasmotaGlobal.tele_period) {
DomoticzSensor(DZ_COUNT, value);
#if CONFIG_IDF_TARGET_ESP32
if (HEData.present) {
DomoticzSensor(DZ_COUNT, value);
}
#endif // CONFIG_IDF_TARGET_ESP32
} }
#endif // USE_DOMOTICZ #endif // USE_DOMOTICZ
#ifdef USE_WEBSERVER #ifdef USE_WEBSERVER
} else { } else {
WSContentSend_P(HTTP_SNS_HALL_EFFECT, value);
#if CONFIG_IDF_TARGET_ESP32
if (HEData.present) {
WSContentSend_P(HTTP_SNS_HALL_EFFECT, value);
}
#endif // CONFIG_IDF_TARGET_ESP32
#endif // USE_WEBSERVER #endif // USE_WEBSERVER
} }
} }
@ -78,24 +109,21 @@ void HallEffectShow(bool json) {
bool Xsns87(uint8_t function) { bool Xsns87(uint8_t function) {
bool result = false; bool result = false;
if (FUNC_INIT == function) { switch (function) {
HallEffectInit(); case FUNC_JSON_APPEND:
} Esp32SensorShow(1);
else if (HEData.present) { break;
switch (function) {
case FUNC_JSON_APPEND:
HallEffectShow(1);
break;
#ifdef USE_WEBSERVER #ifdef USE_WEBSERVER
case FUNC_WEB_SENSOR: case FUNC_WEB_SENSOR:
HallEffectShow(0); Esp32SensorShow(0);
break; break;
#endif // USE_WEBSERVER #endif // USE_WEBSERVER
} case FUNC_INIT:
Esp32SensorInit();
break;
} }
return result; return result;
} }
#endif // USE_HALLEFFECT
#endif // CONFIG_IDF_TARGET_ESP32
#endif // ESP32 #endif // ESP32