mirror of
https://github.com/Xinyuan-LilyGO/LilyGo-T-Call-SIM800.git
synced 2026-07-27 19:56:23 +00:00
Added Arduino_KeepActive example
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
// 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 <TinyGsmClient.h>
|
||||
|
||||
#ifdef DUMP_AT_COMMANDS
|
||||
#include <StreamDebugger.h>
|
||||
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();
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
|
||||
#include <Wire.h>
|
||||
|
||||
#if defined(SIM800L_IP5306_VERSION_20190610)
|
||||
|
||||
#define MODEM_RST 5
|
||||
#define MODEM_PWRKEY 4
|
||||
#define MODEM_POWER_ON 23
|
||||
#define MODEM_TX 27
|
||||
#define MODEM_RX 26
|
||||
|
||||
#define I2C_SDA 21
|
||||
#define I2C_SCL 22
|
||||
#define LED_GPIO 13
|
||||
#define LED_ON HIGH
|
||||
#define LED_OFF LOW
|
||||
|
||||
#define IP5306_ADDR 0x75
|
||||
#define IP5306_REG_SYS_CTL0 0x00
|
||||
|
||||
// setPowerBoostKeepOn
|
||||
bool setupPMU()
|
||||
{
|
||||
bool en = true;
|
||||
Wire.beginTransmission(IP5306_ADDR);
|
||||
Wire.write(IP5306_REG_SYS_CTL0);
|
||||
if (en) {
|
||||
Wire.write(0x37); // Set bit1: 1 enable 0 disable boost keep on
|
||||
} else {
|
||||
Wire.write(0x35); // 0x37 is default reg value
|
||||
}
|
||||
return Wire.endTransmission() == 0;
|
||||
}
|
||||
|
||||
|
||||
#elif defined(SIM800L_AXP192_VERSION_20200327)
|
||||
|
||||
#define MODEM_RST 5
|
||||
#define MODEM_PWRKEY 4
|
||||
#define MODEM_POWER_ON 23
|
||||
#define MODEM_TX 27
|
||||
#define MODEM_RX 26
|
||||
#define MODEM_DTR 32
|
||||
#define MODEM_RI 33
|
||||
|
||||
#define I2C_SDA 21
|
||||
#define I2C_SCL 22
|
||||
#define LED_GPIO 13
|
||||
#define LED_ON HIGH
|
||||
#define LED_OFF LOW
|
||||
|
||||
|
||||
#elif defined(SIM800C_AXP192_VERSION_20200609)
|
||||
// pin definitions
|
||||
#define MODEM_PWRKEY 4
|
||||
#define MODEM_POWER_ON 25
|
||||
#define MODEM_TX 27
|
||||
#define MODEM_RX 26
|
||||
#define MODEM_DTR 32
|
||||
#define MODEM_RI 33
|
||||
|
||||
#define I2C_SDA 21
|
||||
#define I2C_SCL 22
|
||||
#define LED_GPIO 12
|
||||
#define LED_ON LOW
|
||||
#define LED_OFF HIGH
|
||||
|
||||
#else
|
||||
#error "Please select the corresponding model"
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(SIM800L_AXP192_VERSION_20200327) || defined(SIM800C_AXP192_VERSION_20200609)
|
||||
#include <axp20x.h> //https://github.com/lewisxhe/AXP202X_Library
|
||||
|
||||
AXP20X_Class axp;
|
||||
|
||||
bool setupPMU()
|
||||
{
|
||||
// For more information about the use of AXP192, please refer to AXP202X_Library https://github.com/lewisxhe/AXP202X_Library
|
||||
Wire.begin(I2C_SDA, I2C_SCL);
|
||||
int ret = axp.begin(Wire, AXP192_SLAVE_ADDRESS);
|
||||
|
||||
if (ret == AXP_FAIL) {
|
||||
Serial.println("AXP Power begin failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
//! Turn off unused power
|
||||
axp.setPowerOutPut(AXP192_DCDC1, AXP202_OFF);
|
||||
axp.setPowerOutPut(AXP192_LDO2, AXP202_OFF);
|
||||
axp.setPowerOutPut(AXP192_LDO3, AXP202_OFF);
|
||||
axp.setPowerOutPut(AXP192_DCDC2, AXP202_OFF);
|
||||
axp.setPowerOutPut(AXP192_EXTEN, AXP202_OFF);
|
||||
|
||||
//! Do not turn off DC3, it is powered by esp32
|
||||
// axp.setPowerOutPut(AXP192_DCDC3, AXP202_ON);
|
||||
|
||||
// Set the charging indicator to turn off
|
||||
// Turn it off to save current consumption
|
||||
// axp.setChgLEDMode(AXP20X_LED_OFF);
|
||||
|
||||
// Set the charging indicator to flash once per second
|
||||
// axp.setChgLEDMode(AXP20X_LED_BLINK_1HZ);
|
||||
|
||||
|
||||
//! Use axp192 adc get voltage info
|
||||
axp.adc1Enable(AXP202_VBUS_VOL_ADC1 | AXP202_VBUS_CUR_ADC1 | AXP202_BATT_CUR_ADC1 | AXP202_BATT_VOL_ADC1, true);
|
||||
|
||||
float vbus_v = axp.getVbusVoltage();
|
||||
float vbus_c = axp.getVbusCurrent();
|
||||
float batt_v = axp.getBattVoltage();
|
||||
// axp.getBattPercentage(); // axp192 is not support percentage
|
||||
Serial.printf("VBUS:%.2f mV %.2f mA ,BATTERY: %.2f\n", vbus_v, vbus_c, batt_v);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user