Extended device classes for ESP32 and ESP8266

This commit is contained in:
fvanroie 2021-02-17 03:39:56 +01:00
parent 8156e8ca33
commit 5692bb8b90
13 changed files with 403 additions and 151 deletions

View File

@ -5,5 +5,5 @@
#elif defined(M5STACK)
#warning M5 Stack
#else
dev::BaseDevice haspDevice;
#warning Generic Device
#endif

View File

@ -4,10 +4,19 @@
#ifndef HASP_DEVICE_H
#define HASP_DEVICE_H
#ifdef ARDUINO
#include "Arduino.h"
#endif
namespace dev {
class BaseDevice {
public:
bool has_battery = false;
bool has_backligth_control = true;
virtual void reboot()
{}
virtual void pre_setup()
{}
virtual void post_setup()
@ -16,19 +25,37 @@ class BaseDevice {
{}
virtual void loop_5s()
{}
virtual void set_backlight_pin(uint8_t pin)
{}
virtual void set_backlight_level(uint8_t level)
{}
virtual uint8_t get_backlight_level()
{
return -1;
}
virtual void set_backlight_power(bool power)
{}
virtual bool get_backlight_power()
{
return true;
}
};
} // namespace dev
#if defined(ESP32)
#warning Building for ESP32 Devices
#include "dev/esp32/esp32.h"
#elif defined(ESP8266)
#warning Building for ESP8266 Devices
#include "dev/esp8266/esp8266.h"
#elif defined(STM32F4)
#warning Building for STM32F4xx Devices
#include "dev/stm32f4.h"
#else
#warning Building for Generic Devices
using dev::BaseDevice;
#if defined(LANBONL8)
#warning Lanbon L8
#include "lanbonl8.h"
#elif defined(M5STACK)
#warning M5 Stack
#include "m5stackcore2.h"
#else
extern dev::BaseDevice haspDevice;
#endif
#endif

84
src/dev/esp32/esp32.cpp Normal file
View File

@ -0,0 +1,84 @@
#if defined(ESP32)
#include "Arduino.h"
#include <Esp.h>
#include "esp_system.h"
#include "dev/device.h"
#include "dev/esp32/esp32.h"
#include "driver/adc.h"
#include "esp_adc_cal.h"
#include "hasp_conf.h"
#include "hasp_debug.h"
#define BACKLIGHT_CHANNEL 0
namespace dev {
void Esp32Device::reboot()
{
ESP.restart();
}
void Esp32Device::set_backlight_pin(uint8_t pin)
{
Esp32Device::backlight_pin = pin;
/* Setup Backlight Control Pin */
if(pin >= 0) {
LOG_VERBOSE(TAG_GUI, F("Backlight : Pin %d"), pin);
ledcSetup(BACKLIGHT_CHANNEL, 20000, 12);
ledcAttachPin(pin, BACKLIGHT_CHANNEL);
update_backlight();
}
}
void Esp32Device::set_backlight_level(uint8_t level)
{
backlight_level = level >= 0 ? level : 0;
backlight_level = backlight_level <= 100 ? backlight_level : 100;
update_backlight();
}
uint8_t Esp32Device::get_backlight_level()
{
return backlight_level;
}
void Esp32Device::set_backlight_power(bool power)
{
backlight_power = power;
update_backlight();
}
bool Esp32Device::get_backlight_power()
{
return backlight_power != 0;
}
void Esp32Device::update_backlight()
{
if(backlight_pin == -1) return;
if(backlight_power) { // The backlight is ON
ledcWrite(BACKLIGHT_CHANNEL, map(backlight_level, 0, 100, 0, 4095)); // ledChannel and value
}
}
} // namespace dev
#if defined(LANBONL8)
#warning Building for Lanbon L8
#include "dev/esp32/lanbonl8.h"
#elif defined(M5STACK)
#warning Building for M5Stack core2
#include "dev/esp32/m5stackcore2.h"
#else
dev::Esp32Device haspDevice;
#endif
#endif // ESP32

51
src/dev/esp32/esp32.h Normal file
View File

@ -0,0 +1,51 @@
/* MIT License - Copyright (c) 2020 Francis Van Roie
For full license information read the LICENSE file in the project folder */
#ifndef HASP_DEVICE_ESP32_H
#define HASP_DEVICE_ESP32_H
#include "dev/device.h"
#if defined(ESP32)
namespace dev {
class Esp32Device : public BaseDevice {
public:
void reboot() override;
void set_backlight_pin(uint8_t pin) override;
void set_backlight_level(uint8_t val) override;
uint8_t get_backlight_level() override;
void set_backlight_power(bool power) override;
bool get_backlight_power() override;
private:
uint8_t backlight_pin;
uint8_t backlight_level;
uint8_t backlight_power;
void update_backlight();
};
} // namespace dev
using dev::Esp32Device;
#if defined(LANBONL8)
#warning Building for Lanbon L8
#include "dev/esp32/lanbonl8.h"
#elif defined(M5STACK)
#warning Building for M5Stack core2
#include "dev/esp32/m5stackcore2.h"
#else
extern dev::Esp32Device haspDevice;
#endif
#endif // ESP32
#endif // HASP_DEVICE_ESP32_H

View File

@ -1,12 +1,18 @@
#include "lanbonl8.h"
#if defined(LANBONL8)
#include "Arduino.h"
#include "../device.h"
#include "dev/esp32/esp32.h"
#include "driver/adc.h"
#include "esp_adc_cal.h"
#include "hasp_conf.h"
#include "hasp_debug.h"
#define BACKLIGHT_CHANNEL 0
#define REF_VOLTAGE 1100
esp_adc_cal_characteristics_t * adc_chars =
new esp_adc_cal_characteristics_t; // adc_chars = calloc(1, sizeof(esp_adc_cal_characteristics_t));
@ -55,19 +61,6 @@ void LanbonL8::pre_setup()
print_char_val_type(val_type);
}
void LanbonL8::post_setup()
{}
void LanbonL8::loop()
{}
void LanbonL8::loop_5s()
{
double voltage = esp_adc_cal_raw_to_voltage(analogRead(39), adc_chars);
Serial.print(adc1_get_raw(ADC1_CHANNEL_3));
Serial.print(" - ");
Serial.println(voltage);
}
} // namespace dev
dev::LanbonL8 haspDevice;

View File

@ -4,22 +4,17 @@
#ifndef HASP_DEVICE_LANBONL8_H
#define HASP_DEVICE_LANBONL8_H
#include "../device.h"
#include "dev/esp32/esp32.h"
#if defined(LANBONL8)
namespace dev {
class LanbonL8 : public BaseDevice {
class LanbonL8 : public Esp32Device {
public:
void pre_setup() override;
void post_setup() override;
void loop() override;
void loop_5s() override;
void pre_setup();
};
} // namespace dev
extern dev::LanbonL8 haspDevice;

View File

@ -1,8 +1,9 @@
#include "m5stackcore2.h"
#if defined(M5STACK)
#include "AXP192.h" // Power Mgmt
#include "../device.h"
#include "dev/esp32/esp32.h"
// AXP192 Axp;
namespace dev {
@ -39,14 +40,6 @@ void M5StackCore2::pre_setup(void)
Axp.SetLed(1);
}
void M5StackCore2::post_setup(void)
{}
void M5StackCore2::loop(void)
{}
void M5StackCore2::loop_5s(void)
{}
} // namespace dev
dev::M5StackCore2 haspDevice;

View File

@ -6,16 +6,13 @@
#if defined(M5STACK)
#include "../device.h"
#include "dev/esp32/esp32.h"
namespace dev {
class M5StackCore2 : public BaseDevice {
class M5StackCore2 : public Esp32Device {
public:
void pre_setup() override;
void post_setup() override;
void loop() override;
void loop_5s() override;
};
} // namespace dev

View File

@ -0,0 +1,66 @@
#if defined(ESP8266)
#include "Arduino.h"
#include <Esp.h>
#include "dev/esp8266/esp8266.h"
#include "hasp_conf.h"
#include "hasp_debug.h"
#define BACKLIGHT_CHANNEL 0
namespace dev {
void Esp8266Device::reboot()
{
ESP.restart();
}
void Esp8266Device::set_backlight_pin(uint8_t pin)
{
Esp8266Device::backlight_pin = pin;
/* Setup Backlight Control Pin */
if(pin >= 0) {
LOG_VERBOSE(TAG_GUI, F("Backlight : Pin %d"), pin);
pinMode(backlight_pin, OUTPUT);
update_backlight();
}
}
void Esp8266Device::set_backlight_level(uint8_t level)
{
backlight_level = level >= 0 ? level : 0;
backlight_level = backlight_level <= 100 ? backlight_level : 100;
update_backlight();
}
uint8_t Esp8266Device::get_backlight_level()
{
return backlight_level;
}
void Esp8266Device::set_backlight_power(bool power)
{
backlight_power = power;
update_backlight();
}
bool Esp8266Device::get_backlight_power()
{
return backlight_power != 0;
}
void Esp8266Device::update_backlight()
{
if(backlight_pin == -1) return;
analogWrite(backlight_pin, backlight_power ? map(backlight_level, 0, 100, 0, 1023) : 0);
}
} // namespace dev
dev::Esp8266Device haspDevice;
#endif // ESP8266

45
src/dev/esp8266/esp8266.h Normal file
View File

@ -0,0 +1,45 @@
/* MIT License - Copyright (c) 2020 Francis Van Roie
For full license information read the LICENSE file in the project folder */
#ifndef HASP_DEVICE_ESP8266_H
#define HASP_DEVICE_ESP8266_H
#include "hasp_conf.h"
#include "dev/device.h"
#if defined(ESP8266)
namespace dev {
class Esp8266Device : public BaseDevice {
public:
void reboot() override;
void set_backlight_pin(uint8_t pin) override;
void set_backlight_level(uint8_t val) override;
uint8_t get_backlight_level() override;
void set_backlight_power(bool power) override;
bool get_backlight_power() override;
private:
uint8_t backlight_pin;
uint8_t backlight_level;
uint8_t backlight_power;
void update_backlight();
};
} // namespace dev
using dev::Esp8266Device;
extern dev::Esp8266Device haspDevice;
#endif // ESP8266
#endif // HASP_DEVICE_ESP8266_H

View File

@ -293,8 +293,6 @@ uint16_t halGetCpuFreqMHz()
#endif
}
String halDisplayDriverName()
{
#if defined(ILI9341_DRIVER)

View File

@ -32,6 +32,7 @@
#include "hasp_attribute.h"
#include "hasp.h"
#include "dev/device.h"
#include "lv_theme_hasp.h"
#if HASP_USE_EEPROM > 0
@ -322,7 +323,7 @@ static void custom_font_apply_cb(lv_theme_t * th, lv_obj_t * obj, lv_theme_style
*/
void haspSetup(void)
{
guiSetDim(haspStartDim);
haspDevice.set_backlight_level(haspStartDim);
/******* File System Test ********************************************************************/
// lv_fs_file_t f;

View File

@ -13,6 +13,8 @@
#include "hasp_parser.h"
#include "hasp_attribute.h"
#include "dev/device.h"
//#include "hasp_gui.h"
#if HASP_USE_DEBUG > 0
@ -774,10 +776,10 @@ void dispatch_clear_page(const char *, const char * page)
void dispatch_dim(const char *, const char * level)
{
// Set the current state
if(strlen(level) != 0) guiSetDim(atoi(level));
if(strlen(level) != 0) haspDevice.set_backlight_level(atoi(level));
char payload[5];
itoa(guiGetDim(), payload, DEC);
itoa(haspDevice.get_backlight_level(), payload, DEC);
dispatch_state_msg(F("dim"), payload);
}
@ -833,11 +835,11 @@ void dispatch_moodlight(const char * topic, const char * payload)
void dispatch_backlight(const char *, const char * payload)
{
// Set the current state
if(strlen(payload) != 0) guiSetBacklight(Utilities::is_true(payload));
if(strlen(payload) != 0) haspDevice.set_backlight_power(Utilities::is_true(payload));
// Return the current state
char buffer[4];
memcpy_P(buffer, guiGetBacklight() ? PSTR("ON") : PSTR("OFF"), sizeof(buffer));
memcpy_P(buffer, haspDevice.get_backlight_power() ? PSTR("ON") : PSTR("OFF"), sizeof(buffer));
dispatch_state_msg(F("light"), buffer);
}