TBeamS3SupremeBoard.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #pragma once
  2. #include "ESP32Board.h"
  3. #include <driver/rtc_io.h>
  4. #include <Wire.h>
  5. #include <Arduino.h>
  6. #include "XPowersLib.h"
  7. // LoRa radio module pins for TBeam S3 Supreme
  8. #define P_LORA_DIO_1 1 //SX1262 IRQ pin
  9. #define P_LORA_NSS 10 //SX1262 SS pin
  10. #define P_LORA_RESET 5 //SX1262 Rest pin
  11. #define P_LORA_BUSY 4 //SX1262 Busy pin
  12. #define P_LORA_SCLK 12 //SX1262 SCLK pin
  13. #define P_LORA_MISO 13 //SX1262 MISO pin
  14. #define P_LORA_MOSI 11 //SX1262 MOSI pin
  15. #define PIN_BOARD_SDA 17 //SDA for OLED, BME280, and QMC6310U (0x1C)
  16. #define PIN_BOARD_SCL 18 //SCL for OLED, BME280, and QMC6310U (0x1C)
  17. #define PIN_BOARD_SDA1 42 //SDA for PMU and PFC8563 (RTC)
  18. #define PIN_BOARD_SCL1 41 //SCL for PMU and PFC8563 (RTC)
  19. #define PIN_PMU_IRQ 40 //IRQ pin for PMU
  20. #define PIN_USER_BTN 0
  21. #define P_BOARD_SPI_MOSI 35 //SPI for SD Card and QMI8653 (IMU)
  22. #define P_BOARD_SPI_MISO 37 //SPI for SD Card and QMI8653 (IMU)
  23. #define P_BOARD_SPI_SCK 36 //SPI for SD Card and QMI8653 (IMU)
  24. #define P_BPARD_SPI_CS 47 //Pin for SD Card CS
  25. #define P_BOARD_IMU_CS 34 //Pin for QMI8653 (IMU) CS
  26. #define P_BOARD_IMU_INT 33 //IMU Int pin
  27. #define P_BOARD_RTC_INT 14 //RTC Int pin
  28. #define P_GPS_RX 9 //GPS RX pin
  29. #define P_GPS_TX 8 //GPS TX pin
  30. #define P_GPS_WAKE 7 //GPS Wakeup pin
  31. #define P_GPS_1PPS 6 //GPS 1PPS pin
  32. #define GPS_BAUD_RATE 9600
  33. //I2C Wire addresses
  34. #define I2C_BME280_ADD 0x76 //BME280 sensor I2C address on Wire
  35. #define I2C_OLED_ADD 0x3C //SH1106 OLED I2C address on Wire
  36. #define I2C_QMC6310U_ADD 0x1C //QMC6310U mag sensor I2C address on Wire
  37. //I2C Wire1 addresses
  38. #define I2C_RTC_ADD 0x51 //RTC I2C address on Wire1
  39. #define I2C_PMU_ADD 0x34 //AXP2101 I2C address on Wire1
  40. #define PMU_WIRE_PORT Wire1
  41. #define XPOWERS_CHIP_AXP2101
  42. class TBeamS3SupremeBoard : public ESP32Board {
  43. XPowersAXP2101 PMU;
  44. public:
  45. #ifdef MESH_DEBUG
  46. void printPMU();
  47. #endif
  48. bool power_init();
  49. void begin() {
  50. ESP32Board::begin();
  51. esp_reset_reason_t reason = esp_reset_reason();
  52. if (reason == ESP_RST_DEEPSLEEP) {
  53. long wakeup_source = esp_sleep_get_ext1_wakeup_status();
  54. if (wakeup_source & (1 << P_LORA_DIO_1)) { // received a LoRa packet (while in deep sleep)
  55. startup_reason = BD_STARTUP_RX_PACKET;
  56. }
  57. rtc_gpio_hold_dis((gpio_num_t)P_LORA_NSS);
  58. rtc_gpio_deinit((gpio_num_t)P_LORA_DIO_1);
  59. }
  60. power_init();
  61. }
  62. void enterDeepSleep(uint32_t secs, int pin_wake_btn = -1) {
  63. esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON);
  64. // Make sure the DIO1 and NSS GPIOs are hold on required levels during deep sleep
  65. rtc_gpio_set_direction((gpio_num_t)P_LORA_DIO_1, RTC_GPIO_MODE_INPUT_ONLY);
  66. rtc_gpio_pulldown_en((gpio_num_t)P_LORA_DIO_1);
  67. rtc_gpio_hold_en((gpio_num_t)P_LORA_NSS);
  68. if (pin_wake_btn < 0) {
  69. esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet
  70. } else {
  71. esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1) | (1L << pin_wake_btn), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet OR wake btn
  72. }
  73. if (secs > 0) {
  74. esp_sleep_enable_timer_wakeup(secs * 1000000);
  75. }
  76. // Finally set ESP32 into sleep
  77. esp_deep_sleep_start(); // CPU halts here and never returns!
  78. }
  79. uint16_t getBattMilliVolts() override {
  80. return PMU.getBattVoltage();
  81. }
  82. uint16_t getBattPercent() {
  83. //Read the PMU fuel guage for battery %
  84. uint16_t battPercent = PMU.getBatteryPercent();
  85. return battPercent;
  86. }
  87. const char* getManufacturerName() const override {
  88. return "LilyGo T-Beam S3 Supreme SX1262";
  89. }
  90. };