diff --git a/variants/xiao_s3_wio/XiaoS3WIOBoard.h b/variants/xiao_s3_wio/XiaoS3WIOBoard.h index 7ae06a359b..5cd777ba3f 100644 --- a/variants/xiao_s3_wio/XiaoS3WIOBoard.h +++ b/variants/xiao_s3_wio/XiaoS3WIOBoard.h @@ -10,4 +10,24 @@ class XiaoS3WIOBoard : public ESP32Board { const char* getManufacturerName() const override { return "Xiao S3 WIO"; } + #ifdef PIN_VBAT_READ + // battery read support + pinMode(PIN_VBAT_READ, INPUT); + #endif + + #define BATTERY_SAMPLES 8 + + uint16_t getBattMilliVolts() override { + #ifdef PIN_VBAT_READ + analogReadResolution(ADC_RESOLUTION); + uint32_t raw = 0; + for (int i = 0; i < 8; i++) { + raw += analogRead(PIN_VBAT_READ); + } + raw = raw / 8; + return (uint16_t)((float)raw * REAL_VBAT_MV_PER_LSB); + #else + return 0; // not supported + #endif + } }; diff --git a/variants/xiao_s3_wio/platformio.ini b/variants/xiao_s3_wio/platformio.ini index db8c5a9486..aadadfaeb2 100644 --- a/variants/xiao_s3_wio/platformio.ini +++ b/variants/xiao_s3_wio/platformio.ini @@ -42,6 +42,7 @@ build_src_filter = ${Xiao_S3_WIO.build_src_filter} +<../examples/simple_repeater/*.cpp> build_flags = ${Xiao_S3_WIO.build_flags} + -D PIN_VBAT_READ=D1 ; optionnal voltage divider VBAT -D ADVERT_NAME='"XiaoS3 Repeater"' -D ADVERT_LAT=0.0 -D ADVERT_LON=0.0 diff --git a/variants/xiao_s3_wio/variant.h b/variants/xiao_s3_wio/variant.h new file mode 100644 index 0000000000..258e6396fb --- /dev/null +++ b/variants/xiao_s3_wio/variant.h @@ -0,0 +1,26 @@ +#ifndef _VARIANT_Xiao_S3_WIO_ +#define _VARIANT_Xiao_S3_WIO_ + +#include "WVariant.h" + +// Number of pins defined in PinDescription array +#define PINS_COUNT (48) +#define NUM_DIGITAL_PINS (48) +#define NUM_ANALOG_INPUTS (1) +#define NUM_ANALOG_OUTPUTS (0) + +// Setup for the voltage divider measurement : +// Label: D1, Analog, GPIO2 +// 20k resistor wired from battery to D1 +// and 20k resistor wired from D1 to ground +#define ADC_RESOLUTION 14 + +// built-ins +#define VBAT_MV_PER_LSB (0.73242188F) // 3.0V ADC range and 12-bit ADC resolution = 3000mV/4096 + +#define VBAT_DIVIDER (0.5F) // 200K + 200K voltage divider on VBAT +#define VBAT_DIVIDER_COMP (2.0F) // Compensation factor for the VBAT divider + +#define REAL_VBAT_MV_PER_LSB (VBAT_DIVIDER_COMP * VBAT_MV_PER_LSB) + +#endif \ No newline at end of file