Added CPU temperature measurement and reporting on ESP32S3

This commit is contained in:
Mark Qvist 2025-11-10 16:39:09 +01:00
parent 8a3db4f0c3
commit 89ea59bbe6
3 changed files with 29 additions and 0 deletions

View file

@ -46,6 +46,7 @@
#define CMD_STAT_PHYPRM 0x26 #define CMD_STAT_PHYPRM 0x26
#define CMD_STAT_BAT 0x27 #define CMD_STAT_BAT 0x27
#define CMD_STAT_CSMA 0x28 #define CMD_STAT_CSMA 0x28
#define CMD_STAT_TEMP 0x29
#define CMD_BLINK 0x30 #define CMD_BLINK 0x30
#define CMD_RANDOM 0x40 #define CMD_RANDOM 0x40

17
Power.h
View file

@ -13,6 +13,12 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>. // along with this program. If not, see <https://www.gnu.org/licenses/>.
#define PMU_TEMP_MIN -30
#define PMU_TEMP_MAX 90
#define PMU_TEMP_OFFSET 120
bool pmu_temp_sensor_ready = false;
float pmu_temperature = PMU_TEMP_MIN-1;
#if BOARD_MODEL == BOARD_TBEAM || BOARD_MODEL == BOARD_TBEAM_S_V1 #if BOARD_MODEL == BOARD_TBEAM || BOARD_MODEL == BOARD_TBEAM_S_V1
#include <XPowersLib.h> #include <XPowersLib.h>
XPowersLibInterface* PMU = NULL; XPowersLibInterface* PMU = NULL;
@ -187,6 +193,11 @@ bool bat_diff_positive = false;
#define PMU_R_INTERVAL 5 #define PMU_R_INTERVAL 5
#define PMU_SCV_RESET_INTERVAL 3 #define PMU_SCV_RESET_INTERVAL 3
void kiss_indicate_battery(); void kiss_indicate_battery();
void kiss_indicate_temperature();
void measure_temperature() {
if (pmu_temp_sensor_ready) { pmu_temperature = temperatureRead(); } else { pmu_temperature = PMU_TEMP_MIN-1; }
}
void measure_battery() { void measure_battery() {
#if BOARD_MODEL == BOARD_RNODE_NG_21 || BOARD_MODEL == BOARD_LORA32_V2_1 || BOARD_MODEL == BOARD_HELTEC32_V3 || BOARD_MODEL == BOARD_HELTEC32_V4 || BOARD_MODEL == BOARD_TDECK || BOARD_MODEL == BOARD_T3S3 || BOARD_MODEL == BOARD_HELTEC_T114 || BOARD_MODEL == BOARD_TECHO #if BOARD_MODEL == BOARD_RNODE_NG_21 || BOARD_MODEL == BOARD_LORA32_V2_1 || BOARD_MODEL == BOARD_HELTEC32_V3 || BOARD_MODEL == BOARD_HELTEC32_V4 || BOARD_MODEL == BOARD_TDECK || BOARD_MODEL == BOARD_T3S3 || BOARD_MODEL == BOARD_HELTEC_T114 || BOARD_MODEL == BOARD_TECHO
@ -380,6 +391,7 @@ void measure_battery() {
pmu_rc++; pmu_rc++;
if (pmu_rc%PMU_R_INTERVAL == 0) { if (pmu_rc%PMU_R_INTERVAL == 0) {
kiss_indicate_battery(); kiss_indicate_battery();
if (pmu_temp_sensor_ready) { kiss_indicate_temperature(); }
} }
} }
} }
@ -387,11 +399,16 @@ void measure_battery() {
void update_pmu() { void update_pmu() {
if (millis()-last_pmu_update >= pmu_update_interval) { if (millis()-last_pmu_update >= pmu_update_interval) {
measure_battery(); measure_battery();
measure_temperature();
last_pmu_update = millis(); last_pmu_update = millis();
} }
} }
bool init_pmu() { bool init_pmu() {
#if IS_ESP32S3
pmu_temp_sensor_ready = true;
#endif
#if BOARD_MODEL == BOARD_RNODE_NG_21 || BOARD_MODEL == BOARD_LORA32_V2_1 || BOARD_MODEL == BOARD_TDECK || BOARD_MODEL == BOARD_T3S3 || BOARD_MODEL == BOARD_TECHO #if BOARD_MODEL == BOARD_RNODE_NG_21 || BOARD_MODEL == BOARD_LORA32_V2_1 || BOARD_MODEL == BOARD_TDECK || BOARD_MODEL == BOARD_T3S3 || BOARD_MODEL == BOARD_TECHO
pinMode(pin_vbat, INPUT); pinMode(pin_vbat, INPUT);
return true; return true;

View file

@ -1014,6 +1014,17 @@ void kiss_indicate_battery() {
#endif #endif
} }
void kiss_indicate_temperature() {
#if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
float pmu_temp = pmu_temperature+PMU_TEMP_OFFSET;
uint8_t temp = (uint8_t)pmu_temp;
serial_write(FEND);
serial_write(CMD_STAT_TEMP);
escaped_serial_write(pmu_temp);
serial_write(FEND);
#endif
}
void kiss_indicate_btpin() { void kiss_indicate_btpin() {
#if HAS_BLUETOOTH || HAS_BLE == true #if HAS_BLUETOOTH || HAS_BLE == true
serial_write(FEND); serial_write(FEND);