From 83cd7806a1dcfce9ef8bbf6ce73ecf1f8140d17a Mon Sep 17 00:00:00 2001 From: lewisxhe Date: Tue, 26 Jan 2021 18:15:55 +0800 Subject: [PATCH] Added T3_v1.6.1 sleep test --- examples/SleepTest/SleepTest.ino | 55 ++++++++++ examples/SleepTest/boards.h | 171 +++++++++++++++++++++++++++++++ examples/SleepTest/utilities.h | 156 ++++++++++++++++++++++++++++ 3 files changed, 382 insertions(+) create mode 100644 examples/SleepTest/SleepTest.ino create mode 100644 examples/SleepTest/boards.h create mode 100644 examples/SleepTest/utilities.h diff --git a/examples/SleepTest/SleepTest.ino b/examples/SleepTest/SleepTest.ino new file mode 100644 index 0000000..6d009cc --- /dev/null +++ b/examples/SleepTest/SleepTest.ino @@ -0,0 +1,55 @@ + +//This program only tests T3_V1.6.1 +#include +#include "boards.h" + +void setup() +{ + initBoard(); + // When the power is turned on, a delay is required. + delay(1500); + + Serial.println("sleep test"); + + LoRa.setPins(RADIO_CS_PIN, RADIO_RST_PIN, RADIO_DI0_PIN); + if (!LoRa.begin(LoRa_frequency)) { + Serial.println("Starting LoRa failed!"); + while (1); + } + + delay(2000); + + u8g2->sleepOn(); + LoRa.sleep(); + + SPI.end(); + SDSPI.end(); + + pinMode(RADIO_CS_PIN, INPUT); + pinMode(RADIO_RST_PIN, INPUT); + pinMode(RADIO_DI0_PIN, INPUT); + pinMode(RADIO_CS_PIN, INPUT); + pinMode(I2C_SDA, INPUT); + pinMode(I2C_SDA, INPUT); + pinMode(I2C_SCL, INPUT); + pinMode(OLED_RST, INPUT); + pinMode(RADIO_SCLK_PIN, INPUT); + pinMode(RADIO_MISO_PIN, INPUT); + pinMode(RADIO_MOSI_PIN, INPUT); + pinMode(SDCARD_MOSI, INPUT); + pinMode(SDCARD_MISO, INPUT); + pinMode(SDCARD_SCLK, INPUT); + pinMode(SDCARD_CS, INPUT); + pinMode(BOARD_LED, INPUT); + pinMode(ADC_PIN, INPUT); + + delay(2000); + + esp_sleep_enable_timer_wakeup(30 * 1000 * 1000); + esp_deep_sleep_start(); + +} + +void loop() +{ +} diff --git a/examples/SleepTest/boards.h b/examples/SleepTest/boards.h new file mode 100644 index 0000000..c2c4d48 --- /dev/null +++ b/examples/SleepTest/boards.h @@ -0,0 +1,171 @@ +#include +#include +#include +#include "utilities.h" + +#ifdef HAS_SDCARD +#include +#include +#endif + +#ifdef HAS_DISPLAY +#include +U8G2_SSD1306_128X64_NONAME_F_HW_I2C *u8g2 = nullptr; +#endif + +#if defined(LILYGO_TBeam_V1_0) || defined(LILYGO_TBeam_V1_1) +#include +AXP20X_Class PMU; + +bool initPMU() +{ + if (PMU.begin(Wire, AXP192_SLAVE_ADDRESS) == AXP_FAIL) { + return false; + } + /* + * The charging indicator can be turned on or off + * * * */ + // PMU.setChgLEDMode(LED_BLINK_4HZ); + + /* + * The default ESP32 power supply has been turned on, + * no need to set, please do not set it, if it is turned off, + * it will not be able to program + * + * PMU.setDCDC3Voltage(3300); + * PMU.setPowerOutPut(AXP192_DCDC3, AXP202_ON); + * + * * * */ + + /* + * Turn off unused power sources to save power + * **/ + + PMU.setPowerOutPut(AXP192_DCDC1, AXP202_OFF); + PMU.setPowerOutPut(AXP192_DCDC2, AXP202_OFF); + PMU.setPowerOutPut(AXP192_LDO2, AXP202_OFF); + PMU.setPowerOutPut(AXP192_LDO3, AXP202_OFF); + PMU.setPowerOutPut(AXP192_EXTEN, AXP202_OFF); + + /* + * Set the power of LoRa and GPS module to 3.3V + **/ + PMU.setLDO2Voltage(3300); //LoRa VDD + PMU.setLDO3Voltage(3300); //GPS VDD + PMU.setDCDC1Voltage(3300); //3.3V Pin next to 21 and 22 is controlled by DCDC1 + + PMU.setPowerOutPut(AXP192_DCDC1, AXP202_ON); + PMU.setPowerOutPut(AXP192_LDO2, AXP202_ON); + PMU.setPowerOutPut(AXP192_LDO3, AXP202_ON); + + pinMode(PMU_IRQ, INPUT_PULLUP); + attachInterrupt(PMU_IRQ, [] { + // pmu_irq = true; + }, FALLING); + + PMU.adc1Enable(AXP202_VBUS_VOL_ADC1 | + AXP202_VBUS_CUR_ADC1 | + AXP202_BATT_CUR_ADC1 | + AXP202_BATT_VOL_ADC1, + AXP202_ON); + + PMU.enableIRQ(AXP202_VBUS_REMOVED_IRQ | + AXP202_VBUS_CONNECT_IRQ | + AXP202_BATT_REMOVED_IRQ | + AXP202_BATT_CONNECT_IRQ, + AXP202_ON); + PMU.clearIRQ(); + + return true; +} + +void disablePeripherals() +{ + PMU.setPowerOutPut(AXP192_DCDC1, AXP202_OFF); + PMU.setPowerOutPut(AXP192_LDO2, AXP202_OFF); + PMU.setPowerOutPut(AXP192_LDO3, AXP202_OFF); +} +#else +#define initPMU() +#define disablePeripherals() +#endif + +SPIClass SDSPI(HSPI); + + +void initBoard() +{ + Serial.begin(115200); + Serial.println("initBoard"); + SPI.begin(RADIO_SCLK_PIN, RADIO_MISO_PIN, RADIO_MOSI_PIN); + Wire.begin(I2C_SDA, I2C_SCL); + +#ifdef HAS_GPS + Serial1.begin(GPS_BAUD_RATE, SERIAL_8N1, GPS_RX_PIN, GPS_TX_PIN); +#endif + +#if OLED_RST + pinMode(OLED_RST, OUTPUT); + digitalWrite(OLED_RST, HIGH); delay(20); + digitalWrite(OLED_RST, LOW); delay(20); + digitalWrite(OLED_RST, HIGH); delay(20); +#endif + + initPMU(); + +#ifdef HAS_SDCARD + SDSPI.begin(SDCARD_SCLK, SDCARD_MISO, SDCARD_MOSI, SDCARD_CS); + if (!SD.begin(SDCARD_CS, SDSPI)) { + Serial.println("setupSDCard FAIL"); + } else { + uint32_t cardSize = SD.cardSize() / (1024 * 1024); + Serial.print("setupSDCard PASS . SIZE = "); + Serial.print(cardSize); + Serial.println(" MB"); + } +#endif + +#ifdef BOARD_LED + /* + * T-BeamV1.0, V1.1 LED defaults to low level as trun on, + * so it needs to be forced to pull up + * * * * */ +#if LED_ON == LOW + gpio_hold_dis(GPIO_NUM_4); +#endif + pinMode(BOARD_LED, OUTPUT); + digitalWrite(BOARD_LED, LED_ON); +#endif + + +#ifdef HAS_DISPLAY + Wire.beginTransmission(0x3C); + if (Wire.endTransmission() == 0) { + Serial.println("Started OLED"); + u8g2 = new U8G2_SSD1306_128X64_NONAME_F_HW_I2C(U8G2_R0, U8X8_PIN_NONE); + u8g2->begin(); + u8g2->clearBuffer(); + u8g2->setFlipMode(0); + u8g2->setFontMode(1); // Transparent + u8g2->setDrawColor(1); + u8g2->setFontDirection(0); + u8g2->firstPage(); + do { + u8g2->setFont(u8g2_font_inb19_mr); + u8g2->drawStr(0, 30, "LilyGo"); + u8g2->drawHLine(2, 35, 47); + u8g2->drawHLine(3, 36, 47); + u8g2->drawVLine(45, 32, 12); + u8g2->drawVLine(46, 33, 12); + u8g2->setFont(u8g2_font_inb19_mf); + u8g2->drawStr(58, 60, "LoRa"); + } while ( u8g2->nextPage() ); + u8g2->sendBuffer(); + u8g2->setFont(u8g2_font_fur11_tf); + delay(5000); + } +#endif + +} + + diff --git a/examples/SleepTest/utilities.h b/examples/SleepTest/utilities.h new file mode 100644 index 0000000..f28ff82 --- /dev/null +++ b/examples/SleepTest/utilities.h @@ -0,0 +1,156 @@ + +#pragma once + +/* +* arduinoLoRa Library just only support SX1276/Sx1278,Not support SX1262 +* */ +// #define LILYGO_TBeam_V0_7 +// #define LILYGO_TBeam_V1_0 +// #define LILYGO_TBeam_V1_1 +// #define LILYGO_T3_V1_0 +#define LILYGO_T3_V1_6 +// #define LILYGO_T3_V2_0 + +/* +* if you need to change it, +* please open this note and change to the frequency you need to test +* Option: 433E6,470E6,868E6,915E6 +* */ + +#define LoRa_frequency 868E6 + + +#define UNUSE_PIN (0) + +#if defined(LILYGO_TBeam_V0_7) +#define GPS_RX_PIN 12 +#define GPS_TX_PIN 15 +#define BUTTON_PIN 39 +#define BUTTON_PIN_MASK GPIO_SEL_39 +#define I2C_SDA 21 +#define I2C_SCL 22 + +#define RADIO_SCLK_PIN 5 +#define RADIO_MISO_PIN 19 +#define RADIO_MOSI_PIN 27 +#define RADIO_CS_PIN 18 +#define RADIO_DI0_PIN 26 +#define RADIO_RST_PIN 23 +#define RADIO_DIO1_PIN 33 +#define RADIO_BUSY_PIN 32 + +#define BOARD_LED 14 +#define LED_ON HIGH +#define LED_OFF LOW + +#define GPS_BAUD_RATE 9600 +#define HAS_GPS +#define HAS_DISPLAY //Optional, bring your own board, no OLED !! + +#elif defined(LILYGO_TBeam_V1_0) || defined(LILYGO_TBeam_V1_1) + +#define GPS_RX_PIN 34 +#define GPS_TX_PIN 12 +#define BUTTON_PIN 38 +#define BUTTON_PIN_MASK GPIO_SEL_38 +#define I2C_SDA 21 +#define I2C_SCL 22 +#define PMU_IRQ 35 + +#define RADIO_SCLK_PIN 5 +#define RADIO_MISO_PIN 19 +#define RADIO_MOSI_PIN 27 +#define RADIO_CS_PIN 18 +#define RADIO_DI0_PIN 26 +#define RADIO_RST_PIN 23 +#define RADIO_DIO1_PIN 33 +#define RADIO_BUSY_PIN 32 + +#define BOARD_LED 4 +#define LED_ON LOW +#define LED_OFF HIGH + +#define GPS_BAUD_RATE 9600 +#define HAS_GPS +#define HAS_DISPLAY //Optional, bring your own board, no OLED !! + +#elif defined(LILYGO_T3_V1_0) +#define I2C_SDA 4 +#define I2C_SCL 15 +#define OLED_RST 16 + +#define RADIO_SCLK_PIN 5 +#define RADIO_MISO_PIN 19 +#define RADIO_MOSI_PIN 27 +#define RADIO_CS_PIN 18 +#define RADIO_DI0_PIN 26 +#define RADIO_RST_PIN 14 +#define RADIO_DIO1_PIN 33 +#define RADIO_BUSY_PIN 32 + +#define HAS_DISPLAY + +#elif defined(LILYGO_T3_V1_6) +#define I2C_SDA 21 +#define I2C_SCL 22 +#define OLED_RST UNUSE_PIN + +#define RADIO_SCLK_PIN 5 +#define RADIO_MISO_PIN 19 +#define RADIO_MOSI_PIN 27 +#define RADIO_CS_PIN 18 +#define RADIO_DI0_PIN 26 +#define RADIO_RST_PIN 23 +#define RADIO_DIO1_PIN 33 +#define RADIO_BUSY_PIN 32 + +#define SDCARD_MOSI 15 +#define SDCARD_MISO 2 +#define SDCARD_SCLK 14 +#define SDCARD_CS 13 + +#define BOARD_LED 25 +#define LED_ON HIGH + +#define ADC_PIN 35 + +#define HAS_SDCARD +#define HAS_DISPLAY + +#elif defined(LILYGO_T3_V2_0) +#define I2C_SDA 21 +#define I2C_SCL 22 +#define OLED_RST UNUSE_PIN + +#define RADIO_SCLK_PIN 5 +#define RADIO_MISO_PIN 19 +#define RADIO_MOSI_PIN 27 +#define RADIO_CS_PIN 18 +#define RADIO_DI0_PIN 26 +#define RADIO_RST_PIN 14 +#define RADIO_DIO1_PIN UNUSE_PIN +#define RADIO_BUSY_PIN UNUSE_PIN + +#define SDCARD_MOSI 15 +#define SDCARD_MISO 2 +#define SDCARD_SCLK 14 +#define SDCARD_CS 13 + +#define BOARD_LED 0 +#define LED_ON LOW + +#define HAS_DISPLAY +#define HAS_SDCARD + +#else +#error "Please select the version you purchased in utilities.h" +#endif + + + + + + + + +