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 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_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
feature8 |= 0x00000008; // xdrv_52_9_berry.ino
#endif
#ifdef USE_HALLEFFECT
feature8 |= 0x00000010; // xsns_87_esp32_halleffect.ino
#endif
// feature8 |= 0x00000010;
#if defined(USE_ENERGY_SENSOR) && defined(USE_ENERGY_DUMMY)
feature8 |= 0x00000020;
#endif

View File

@ -821,11 +821,6 @@ bool MqttShowSensor(void)
{
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);
for (uint32_t i = 0; i < MAX_SWITCHES; i++) {
#ifdef USE_TM1638

View File

@ -187,7 +187,6 @@
#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_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
@ -18,9 +18,8 @@
*/
#ifdef ESP32
#if CONFIG_IDF_TARGET_ESP32
#ifdef USE_HALLEFFECT
/*********************************************************************************************\
* ESP32 CPU Temperature
* ESP32 internal Hall Effect sensor connected to both GPIO36 and GPIO39
*
* To enable set
@ -30,13 +29,15 @@
#define XSNS_87 87
#if CONFIG_IDF_TARGET_ESP32
#define HALLEFFECT_SAMPLE_COUNT 32 // 32 takes about 12 mS at 80MHz CPU frequency
struct {
bool present = false;
} HEData;
void HallEffectInit(void) {
void Esp32SensorInit(void) {
if (PinUsed(GPIO_HALLEFFECT) && PinUsed(GPIO_HALLEFFECT, 1)) {
if (((36 == Pin(GPIO_HALLEFFECT)) && (39 == 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}";
#endif // USE_WEBSERVER
void HallEffectShow(bool json) {
#endif // CONFIG_IDF_TARGET_ESP32
void Esp32SensorShow(bool json) {
#if CONFIG_IDF_TARGET_ESP32
int value = 0;
for (uint32_t i = 0; i < HALLEFFECT_SAMPLE_COUNT; i++) {
value += hallRead();
if (HEData.present) {
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) {
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
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
#ifdef USE_WEBSERVER
} 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
}
}
@ -78,24 +109,21 @@ void HallEffectShow(bool json) {
bool Xsns87(uint8_t function) {
bool result = false;
if (FUNC_INIT == function) {
HallEffectInit();
}
else if (HEData.present) {
switch (function) {
case FUNC_JSON_APPEND:
HallEffectShow(1);
break;
switch (function) {
case FUNC_JSON_APPEND:
Esp32SensorShow(1);
break;
#ifdef USE_WEBSERVER
case FUNC_WEB_SENSOR:
HallEffectShow(0);
break;
case FUNC_WEB_SENSOR:
Esp32SensorShow(0);
break;
#endif // USE_WEBSERVER
}
case FUNC_INIT:
Esp32SensorInit();
break;
}
return result;
}
#endif // USE_HALLEFFECT
#endif // CONFIG_IDF_TARGET_ESP32
#endif // ESP32