// Please select the corresponding model // #define SIM800L_IP5306_VERSION_20190610 // #define SIM800L_AXP192_VERSION_20200327 // #define SIM800C_AXP192_VERSION_20200609 // #define SIM800L_IP5306_VERSION_20200811 // Define the serial console for debug prints, if needed // #define DUMP_AT_COMMANDS #define TINY_GSM_DEBUG SerialMon #include "utilities.h" // Set serial for debug console (to the Serial Monitor, default speed 115200) #define SerialMon Serial // Set serial for AT commands (to the module) #define SerialAT Serial1 // Configure TinyGSM library #define TINY_GSM_MODEM_SIM800 // Modem is SIM800 #define TINY_GSM_RX_BUFFER 1024 // Set RX buffer to 1Kb #include #ifdef DUMP_AT_COMMANDS #include StreamDebugger debugger(SerialAT, SerialMon); TinyGsm modem(debugger); #else TinyGsm modem(SerialAT); #endif #define uS_TO_S_FACTOR 1000000ULL /* Conversion factor for micro seconds to seconds */ #define TIME_TO_SLEEP 300 /* Time ESP32 will go to sleep (in seconds) */ bool reply = false; TinyGsmClient client(modem); void setupModem() { #ifdef MODEM_RST // Keep reset high pinMode(MODEM_RST, OUTPUT); digitalWrite(MODEM_RST, HIGH); #endif pinMode(MODEM_PWRKEY, OUTPUT); pinMode(MODEM_POWER_ON, OUTPUT); // Turn on the Modem power first digitalWrite(MODEM_POWER_ON, HIGH); // Pull down PWRKEY for more than 1 second according to manual requirements digitalWrite(MODEM_PWRKEY, HIGH); delay(100); digitalWrite(MODEM_PWRKEY, LOW); delay(1000); digitalWrite(MODEM_PWRKEY, HIGH); // Initialize the indicator as an output pinMode(LED_GPIO, OUTPUT); digitalWrite(LED_GPIO, LED_OFF); } void setup() { // Set console baud rate SerialMon.begin(115200); delay(10); // Start power management if (setupPMU() == false) { Serial.println("Setting power error"); } // Some start operations setupModem(); // Set GSM module baud rate and UART pins SerialAT.begin(115200, SERIAL_8N1, MODEM_RX, MODEM_TX); } void loop() { bool ret = modem.restart(); if (ret == false) { Serial.println("restart .."); return; } Serial.println("Set SIM800X keep active on"); // Set IO25 to sleep hold, so that when ESP32 sleeps, SIM800X will keep power and running gpio_hold_en(GPIO_NUM_25); //MODEM_POWER_ON esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR); esp_deep_sleep_start(); }