This BlynkGSM_Manager has just been modified to create the new Blynk_Async_GSM_Manager in order to use the better and more efficient ESPAsyncWebServer Library, instead of the (ESP8266)WebServer library.
The new Blynk_Async_GSM_Manager is based on and sync'ed with BlynkGSM_Manager. Therefore, all the features currently supported by this BlynkGSM_Manager will be available to the new library. The code change is to port to the new library is also very negligible, mostly just changing the include file from BlynkSimpleEsp32_GSM_xyz.h
to BlynkSimpleEsp32_GSM_Async_xyz.h
.
By design, Blynk user can run ESP32/ESP8266 boards with either WiFi or GSM/GPRS by using different sketches, and have to upload / update firmware to change. This library enables user to include both Blynk GSM/GPRS and WiFi libraries in one sketch, run both WiFi and GSM/GPRS simultaneously, or select one to use at runtime after reboot.
This is also a Blynk and WiFiManager Library for configuring/auto(re)connecting ESP8266/ESP32 modules to the available MultiWiFi APs and MultiBlynk servers at runtime. Connection is with or without SSL. Configuration data to be saved in either LittleFS / SPIFFS or EEPROM. Default Credentials as well as Dynamic custom parameters can be added and modified easily without coding knowledge. DoubleResetDetector is used to force Config Portal opening even if the Credentials are still valid.
This is the new library, designed to help you eliminate hardcoding
your Blynk credentials in ESP32 and ESP8266
boards using GSM shield (SIM800, SIM900, etc).
You can update GSM Modem and Blynk Credentials any time you need to change via Configure Portal. Data are saved in LittleFS / SPIFFS or configurable locations in EEPROM.
New recent features:
Multiple WiFi Credentials (SSID, Password) and system will autoconnect to the best and available WiFi SSID.
Multiple Blynk Credentials (Server, Token) and system will autoconnect to the available Blynk Servers.
This BlynkGSM_Manager library currently supports these following boards:
More modems may be supported later:
Arduino IDE 1.8.19+
for Arduino. ESP32 Core 2.0.2+
for ESP32-based boards. ESP8266 core 3.0.2+
for ES82662 (Use Arduino Board Manager). Check Blynk library 1.0.1+
. To install, check TinyGSM library 0.11.5+
. To install, check ESP_DoubleResetDetector library 1.2.1+
to use DRD feature. To install, check .ESP_MultiResetDetector library 1.2.1+
to use MRD feature. To install, check .The best and easiest way is to use Arduino Library Manager
. Search for BlynkGSM_Manager
, then select / install the latest version. You can also use this link for more detailed instructions.
BlynkGSM_Manager-master.zip
.BlynkGSM_Manager-master
directory BlynkGSM_Manager-master
folder to Arduino libraries' directory such as ~/Arduino/libraries/
.In Platform IO, to fix the error when using LittleFS_esp32 v1.0
for ESP32-based boards with ESP32 core v1.0.4- (ESP-IDF v3.2-), uncomment the following line
from
//#define CONFIG_LITTLEFS_FOR_IDF_3_2 /* For old IDF - like in release 1.0.4 */
to
#define CONFIG_LITTLEFS_FOR_IDF_3_2 /* For old IDF - like in release 1.0.4 */
It's advisable to use the latest LittleFS_esp32 v1.0.5+
to avoid the issue.
Thanks to Roshan to report the issue in Error esp_littlefs.c 'utime_p'
Please have a look at ESP_WiFiManager Issue 39: Not able to read analog port when using the autoconnect example to have more detailed description and solution of the issue.
Look in file adc_common.c
In ADC2, there're two locks used for different cases:
lock shared with app and Wi-Fi: ESP32: When Wi-Fi using the ADC2, we assume it will never stop, so app checks the lock and returns immediately if failed. ESP32S2: The controller's control over the ADC is determined by the arbiter. There is no need to control by lock.
lock shared between tasks: when several tasks sharing the ADC2, we want to guarantee all the requests will be handled. Since conversions are short (about 31us), app returns the lock very soon, we use a spinlock to stand there waiting to do conversions one by one.
adc2_spinlock should be acquired first, then adc2_wifi_lock or rtc_spinlock.
Please read more information in TinyGSM Library
For ESP32 and ESP8266, in your code :
Replace
BlynkSimpleTinyGSM.h
with BlynkSimpleTinyGSM_M.h
Then replace
Blynk.begin(wifi_blynk_tok, ssid, pass, blynk_server, BLYNK_HARDWARE_PORT)
with Blynk_WF.begin("TTGO-TCALL-GSM")
for WiFiBlynk.xxx()
with Blynk_WF.xxx()
for WiFiBlynk.xxx()
with Blynk_GSM.xxx()
for GSM/GPRSAdd
#if USE_BLYNK_WM
#include <BlynkSimpleEsp32_GSM_WFM.h>
#else
#include <BlynkSimpleEsp32_GSM_WF.h>
#endif
// Only for ESP8266
#define USE_LITTLEFS true
#define USE_SPIFFS false
to use LittleFS (for ESP8266), or
#define USE_LITTLEFS false
#define USE_SPIFFS true
to use SPIFFS or
#define USE_LITTLEFS false
#define USE_SPIFFS false
to use EEPROM. Currently, data size in v1.0.9, with DRD and not including dynamic params, is 556 bytes from address EEPROM_START ) to save your configuration data. EEPROM_SIZE can be specified from 1024 to 4096 (2048 for ESP32) bytes.
// Force some params in Blynk, only valid for library version 1.0.1 and later
#define TIMEOUT_RECONNECT_WIFI 10000L
#define RESET_IF_CONFIG_TIMEOUT true
#define CONFIG_TIMEOUT_RETRYTIMES_BEFORE_RESET 5
// Set config portal SSID and Password
Blynk.setConfigPortal("TestPortal-ESP32", "TestPortalPass");
// Use configurable AP IP, instead of default IP 192.168.4.1
Blynk.setConfigPortalIP(IPAddress(192, 168, 232, 1));
// Set config portal channel, default = 1. Use 0 => random channel from 1-12 to avoid conflict
Blynk_WF.setConfigPortalChannel(0);
// Select either one of these to set static IP + DNS
Blynk.setSTAStaticIPConfig(IPAddress(192, 168, 2, 232), IPAddress(192, 168, 2, 1), IPAddress(255, 255, 255, 0));
//Blynk.setSTAStaticIPConfig(IPAddress(192, 168, 2, 232), IPAddress(192, 168, 2, 1), IPAddress(255, 255, 255, 0),
// IPAddress(192, 168, 2, 1), IPAddress(8, 8, 8, 8));
//Blynk.setSTAStaticIPConfig(IPAddress(192, 168, 2, 232), IPAddress(192, 168, 2, 1), IPAddress(255, 255, 255, 0),
// IPAddress(4, 4, 4, 4), IPAddress(8, 8, 8, 8));
Change Blynk.run()
for WiFi to Blynk_WF.run()
.
Change Blynk.run()
for GSM/GPRS to Blynk_GSM.run()
.
That's it.
See this example and modify as necessary
bool LOAD_DEFAULT_CONFIG_DATA = true;
bool LOAD_DEFAULT_CONFIG_DATA = false;
#if USE_BLYNK_WM
/// Start Default Config Data //////////////////
/*
// Defined in <BlynkSimpleESP8266_GSM_WFM.h>
#define SSID_MAX_LEN 32
//From v1.0.10, WPA2 passwords can be up to 63 characters long.
#define PASS_MAX_LEN 64
typedef struct
{
char wifi_ssid[SSID_MAX_LEN];
char wifi_pw [PASS_MAX_LEN];
} WiFi_Credentials;
#define BLYNK_SERVER_MAX_LEN 32
#define BLYNK_TOKEN_MAX_LEN 36
typedef struct
{
char blynk_server [BLYNK_SERVER_MAX_LEN];
char wifi_blynk_token [BLYNK_TOKEN_MAX_LEN];
char gsm_blynk_token [BLYNK_TOKEN_MAX_LEN];
} Blynk_Credentials;
#define NUM_WIFI_CREDENTIALS 2
#define NUM_BLYNK_CREDENTIALS 2
// Configurable items besides fixed Header
#define NUM_CONFIGURABLE_ITEMS ( 6 + (2 * NUM_WIFI_CREDENTIALS) + (3 * NUM_BLYNK_CREDENTIALS) )
#define DEFAULT_GPRS_PIN "1234"
typedef struct Configuration
{
char header [16];
WiFi_Credentials WiFi_Creds [NUM_WIFI_CREDENTIALS];
Blynk_Credentials Blynk_Creds [NUM_BLYNK_CREDENTIALS];
int blynk_port;
// YOUR GSM / GPRS RELATED
char apn [32];
char gprsUser [32];
char gprsPass [32];
char gprsPin [12]; // A PIN (Personal Identification Number) is a 4-8 digit passcode
// END OF YOUR GSM / GPRS RELATED
char board_name [24];
int checkSum;
} Blynk_WF_Configuration;
*/
//bool LOAD_DEFAULT_CONFIG_DATA = true;
bool LOAD_DEFAULT_CONFIG_DATA = false;
Blynk_WF_Configuration defaultConfig =
{
//char header[16], dummy, not used
"GSM",
//WiFi_Credentials WiFi_Creds [NUM_WIFI_CREDENTIALS]
//WiFi_Creds.wifi_ssid and WiFi_Creds.wifi_pw
"SSID1", "password1",
"SSID2", "password2",
// Blynk_Credentials Blynk_Creds [NUM_BLYNK_CREDENTIALS];
// Blynk_Creds.blynk_server, Blynk_Creds.wifi_blynk_token and Blynk_Creds.gsm_blynk_token
"account.ddns.net", "wifi_token", "gsm_token",
"account.duckdns.org", "wifi_token1", "gsm_token1",
//int blynk_port;
8080,
// YOUR GSM / GPRS RELATED
//char apn [32];
"rogers-core-appl1.apn",
//char gprsUser [32];
"wapuser1",
//char gprsPass [32];
"wap",
//char gprsPin [12]; // A PIN (Personal Identification Number) is a 4-8 digit passcode
"1245678",
// END OF YOUR GSM / GPRS RELATED
//char board_name [24];
"ESP32-GSM-WiFi",
//int checkSum, dummy, not used
0
};
/////////// End Default Config Data /////////////
#endif // #if USE_BLYNK_WM
#if USE_BLYNK_WM
#define USE_DYNAMIC_PARAMETERS true
/////////////// Start dynamic Credentials ///////////////
//Defined in <BlynkSimpleEsp32_GSM_WFM.h>
/**************************************
#define MAX_ID_LEN 5
#define MAX_DISPLAY_NAME_LEN 16
typedef struct
{
char id [MAX_ID_LEN + 1];
char displayName [MAX_DISPLAY_NAME_LEN + 1];
char *pdata;
uint8_t maxlen;
} MenuItem;
**************************************/
#if USE_DYNAMIC_PARAMETERS
#define MAX_MQTT_SERVER_LEN 34
char MQTT_Server [MAX_MQTT_SERVER_LEN + 1] = "mqtt.ddns.net";
#define MAX_MQTT_PORT_LEN 6
char MQTT_Port [MAX_MQTT_PORT_LEN + 1] = "1883";
#define MAX_MQTT_USERNAME_LEN 34
char MQTT_UserName [MAX_MQTT_USERNAME_LEN + 1] = "mqtt-user";
#define MAX_MQTT_PW_LEN 34
char MQTT_PW [MAX_MQTT_PW_LEN + 1] = "mqtt-pass";
#define MAX_MQTT_SUBS_TOPIC_LEN 34
char MQTT_SubsTopic [MAX_MQTT_SUBS_TOPIC_LEN + 1] = "SubTopic_ESP32_GSM";
#define MAX_MQTT_PUB_TOPIC_LEN 34
char MQTT_PubTopic [MAX_MQTT_PUB_TOPIC_LEN + 1] = "PubTopic_ESP32_GSM";
MenuItem myMenuItems [] =
{
{ "mqtt", "MQTT Server", MQTT_Server, MAX_MQTT_SERVER_LEN },
{ "mqpt", "Port", MQTT_Port, MAX_MQTT_PORT_LEN },
{ "user", "MQTT UserName", MQTT_UserName, MAX_MQTT_USERNAME_LEN },
{ "mqpw", "MQTT PWD", MQTT_PW, MAX_MQTT_PW_LEN },
{ "subs", "Subs Topics", MQTT_SubsTopic, MAX_MQTT_SUBS_TOPIC_LEN },
{ "pubs", "Pubs Topics", MQTT_PubTopic, MAX_MQTT_PUB_TOPIC_LEN },
};
uint16_t NUM_MENU_ITEMS = sizeof(myMenuItems) / sizeof(MenuItem); //MenuItemSize;
#else
MenuItem myMenuItems [] = {};
uint16_t NUM_MENU_ITEMS = 0;
#endif
/////// // End dynamic Credentials ///////////
#endif // #if USE_BLYNK_WM
Use the following code snippet in sketch
#define USE_DYNAMIC_PARAMETERS false
or
/////////////// Start dynamic Credentials ///////////////
MenuItem myMenuItems [] = {};
uint16_t NUM_MENU_ITEMS = 0;
/////// // End dynamic Credentials ///////////
Please be noted that the following reserved names are already used in library:
"id" for WiFi SSID
"pw" for WiFi PW
"id1" for WiFi1 SSID
"pw1" for WiFi1 PW
"apn" for GPRS/GSM apn
"usr" for GPRS/GSM user
"pwd" for GPRS/GSM password
"pin" for GPRS/GSM pin
"sv" for Blynk Server
"wtk" for Blynk WiFi Token
"gtk" for Blynk GPRS/GSM Token
"sv1" for Blynk Server1
"wtk1" for Blynk WiFi Token1
"gtk1" for Blynk GPRS/GSM Token1
"pt" for Blynk Port
"nm" for Board Name
// Set config portal channel, default = 1. Use 0 => random channel from 1-13 to avoid conflict
Blynk_WF.setConfigPortalChannel(0);
You can see that the system automatically detects and connects to the best or avaiable WiFi APs and/or Blynk Servers, whenever interruption happens. This feature is very useful for systems requiring high degree of reliability.
Moreover, this Blynk_WF.begin()
is not a blocking call, so you can use it for critical functions requiring in loop().
Anyway, this is better for projects using Blynk just for GUI (graphical user interface).
In operation, if WiFi or Blynk connection is lost, Blynk_WF.run()
will try reconnecting automatically. Therefore, Blynk_WF.run()
must be called in the loop()
function. Don't use:
void loop()
{
if (Blynk.connected())
Blynk_WF.run();
...
}
just
void loop()
{
Blynk_WF.run();
...
}
If it detects no valid stored Credentials or it cannot connect to the Blynk server in 30 seconds, it will switch to Configuration Mode. You will see your built-in LED turned ON. In Configuration Mode
, it starts a WiFi access point called ESP_xxxxxx. Connect to it using password MyESP_xxxxxx.
You can set:
Blynk_WF.setConfigPortalIP(IPAddress(xxx, xxx, xxx, xxx))
Blynk_WF.setConfigPortalChannel(0)
Blynk_WF.setConfigPortalChannel(channel)
Blynk_WF.setConfigPortal("PortalSSID", "PortalPass")
After you connected, go to http://192.168.4.1., the Browser will display the following page:
Enter your credentials (WiFi SSID/Password/WiFi-Token, GPRS APN/User/Pass/PIN, Blynk Server/Port/GSM-Token).
Then click Save. After the board auto-restarted, you will see if it's connected to your Blynk server successfully.
This Blynk.begin()
is not a blocking call, so you can use it for critical functions requiring in loop().
Anyway, this is better for projects using Blynk just for GUI (graphical user interface).
In operation, if GSM/GPRS or Blynk connection is lost, Blynk_WF.run()
or Blynk_GSM.run()
will try reconnecting automatically. Therefore, Blynk_WF.run()
Blynk_GSM.run()
and must be called in the loop()
function. Don't use:
void loop()
{
if (Blynk.connected())
Blynk_WF.run();
...
}
just
void loop()
{
Blynk_WF.run();
...
}
#include "defines.h"
#if USE_BLYNK_WM
#include "Credentials.h"
#include "dynamicParams.h"
#define BLYNK_PIN_FORCED_CONFIG V10
#define BLYNK_PIN_FORCED_PERS_CONFIG V20
// Use button V10 (BLYNK_PIN_FORCED_CONFIG) to forced Config Portal
BLYNK_WRITE(BLYNK_PIN_FORCED_CONFIG)
{
if (param.asInt())
{
Serial.println( F("\nCP Button Hit. Rebooting") );
// This will keep CP once, clear after reset, even you didn't enter CP at all.
Blynk.resetAndEnterConfigPortal();
}
}
// Use button V20 (BLYNK_PIN_FORCED_PERS_CONFIG) to forced Persistent Config Portal
BLYNK_WRITE(BLYNK_PIN_FORCED_PERS_CONFIG)
{
if (param.asInt())
{
Serial.println( F("\nPersistent CP Button Hit. Rebooting") );
// This will keep CP forever, until you successfully enter CP, and Save data to clear the flag.
Blynk.resetAndEnterConfigPortalPersistent();
}
}
#endif
void heartBeatPrint()
{
static int num = 1;
if (Blynk_WF.connected())
{
Serial.print(F("B"));
}
else
{
Serial.print(F("F"));
}
if (Blynk_GSM.connected())
{
Serial.print(F("G"));
}
else
{
Serial.print(F("F"));
}
if (num == 40)
{
Serial.println();
num = 1;
}
else if (num++ % 10 == 0)
{
Serial.print(F(" "));
}
}
void check_status()
{
static unsigned long checkstatus_timeout = 0;
#define STATUS_CHECK_INTERVAL 60000L
// Send status report every STATUS_REPORT_INTERVAL (60) seconds: we don't need to send updates frequently if there is no status change.
if ((millis() > checkstatus_timeout) || (checkstatus_timeout == 0))
{
// report status to Blynk
heartBeatPrint();
checkstatus_timeout = millis() + STATUS_CHECK_INTERVAL;
}
}
bool valid_apn = false;
bool GSM_CONNECT_OK = false;
void setup()
{
// Set console baud rate
SerialMon.begin(115200);
while (!SerialMon);
delay(200);
SerialMon.print(F("\nStart TTGO_TCALL_GSM (Simultaneous WiFi+GSM) using "));
SerialMon.print(CurrentFileFS);
SerialMon.print(F(" on ")); SerialMon.println(ARDUINO_BOARD);
SerialMon.println(BLYNK_GSM_MANAGER_VERSION);
#if USE_BLYNK_WM
Serial.println(ESP_DOUBLE_RESET_DETECTOR_VERSION);
#endif
// Set-up modem reset, enable, power pins
pinMode(MODEM_PWKEY, OUTPUT);
pinMode(MODEM_RST, OUTPUT);
pinMode(MODEM_POWER_ON, OUTPUT);
digitalWrite(MODEM_PWKEY, LOW);
digitalWrite(MODEM_RST, HIGH);
digitalWrite(MODEM_POWER_ON, HIGH);
SerialMon.println(F("Set GSM module baud rate"));
// Set GSM module baud rate
SerialAT.begin(115200, SERIAL_8N1, MODEM_RX, MODEM_TX);
delay(3000);
Serial.println(F("Use WiFi to connect Blynk"));
#if USE_BLYNK_WM
// Set config portal SSID and Password
Blynk_WF.setConfigPortal("TestPortal-ESP32", "TestPortalPass");
// Use configurable AP IP, instead of default IP 192.168.4.1
//Blynk_WF.setConfigPortalIP(IPAddress(192, 168, 232, 1));
// Set config portal channel, default = 1. Use 0 => random channel from 1-12 to avoid conflict
Blynk_WF.setConfigPortalChannel(0);
// Select either one of these to set static IP + DNS
Blynk_WF.setSTAStaticIPConfig(IPAddress(192, 168, 2, 232), IPAddress(192, 168, 2, 1), IPAddress(255, 255, 255, 0));
//Blynk_WF.setSTAStaticIPConfig(IPAddress(192, 168, 2, 232), IPAddress(192, 168, 2, 1), IPAddress(255, 255, 255, 0),
// IPAddress(192, 168, 2, 1), IPAddress(8, 8, 8, 8));
//Blynk_WF.setSTAStaticIPConfig(IPAddress(192, 168, 2, 232), IPAddress(192, 168, 2, 1), IPAddress(255, 255, 255, 0),
// IPAddress(4, 4, 4, 4), IPAddress(8, 8, 8, 8));
// Use this to default DHCP hostname to ESP8266-XXXXXX or ESP32-XXXXXX
//Blynk_WF.begin();
// Use this to personalize DHCP hostname (RFC952 conformed)
// 24 chars max,- only a..z A..Z 0..9 '-' and no '-' as last char
Blynk_WF.begin("TTGO-TCALL-GSM");
#else
Blynk_WF.begin(wifi_blynk_tok, ssid, pass, blynk_server, BLYNK_HARDWARE_PORT);
Blynk_GSM.config(modem, gsm_blynk_tok, blynk_server, BLYNK_HARDWARE_PORT);
GSM_CONNECT_OK = Blynk_GSM.connectNetwork(apn, gprsUser, gprsPass);
if (GSM_CONNECT_OK)
Blynk_GSM.connect();
#endif
#if USE_BLYNK_WM
Blynk_WF_Configuration localBlynkGSM_ESP32_config;
Blynk_WF.getFullConfigData(&localBlynkGSM_ESP32_config);
Serial.print(F("gprs apn = "));
Serial.println(localBlynkGSM_ESP32_config.apn);
if ( Blynk.inConfigPortal() || (String(localBlynkGSM_ESP32_config.apn) == NO_CONFIG) )
{
Serial.println(F("DRD/MRD, Forced Config Portal or No valid stored apn. Must run only WiFi to Open config portal"));
valid_apn = false;
}
else
{
valid_apn = true;
for (uint16_t index = 0; index < NUM_BLYNK_CREDENTIALS; index++)
{
Blynk_GSM.config(modem, localBlynkGSM_ESP32_config.Blynk_Creds[index].gsm_blynk_token,
localBlynkGSM_ESP32_config.Blynk_Creds[index].blynk_server, localBlynkGSM_ESP32_config.blynk_port);
GSM_CONNECT_OK = Blynk_GSM.connectNetwork(localBlynkGSM_ESP32_config.apn, localBlynkGSM_ESP32_config.gprsUser,
localBlynkGSM_ESP32_config.gprsPass);
if (GSM_CONNECT_OK)
{
if ( Blynk_GSM.connect() == true )
break;
}
}
}
#endif
}
#if (USE_BLYNK_WM && USE_DYNAMIC_PARAMETERS)
void displayCredentials()
{
Serial.println(F("\nYour stored Credentials :"));
for (uint16_t i = 0; i < NUM_MENU_ITEMS; i++)
{
Serial.print(myMenuItems[i].displayName);
Serial.print(F(" = "));
Serial.println(myMenuItems[i].pdata);
}
}
#endif
void loop()
{
Blynk_WF.run();
#if USE_BLYNK_WM
if (valid_apn)
Blynk_GSM.run();
#else
Blynk_GSM.run();
#endif
check_status();
#if (USE_BLYNK_WM && USE_DYNAMIC_PARAMETERS)
static bool displayedCredentials = false;
if (!displayedCredentials)
{
for (uint16_t i = 0; i < NUM_MENU_ITEMS; i++)
{
if (!strlen(myMenuItems[i].pdata))
{
break;
}
if ( i == (NUM_MENU_ITEMS - 1) )
{
displayedCredentials = true;
displayCredentials();
}
}
}
#endif
}
#ifndef defines_h
#define defines_h
#ifndef ESP32
#error This code is intended to run on the ESP32 platform! Please check your Tools->Board setting.
#endif
#define BLYNK_PRINT Serial
#define BLYNK_HEARTBEAT 60
#define DOUBLERESETDETECTOR_DEBUG true //false
#define BLYNK_WM_DEBUG 1
// Not use #define USE_LITTLEFS and #define USE_SPIFFS => using SPIFFS for configuration data in WiFiManager
// (USE_LITTLEFS == false) and (USE_SPIFFS == false) => using EEPROM for configuration data in WiFiManager
// (USE_LITTLEFS == true) and (USE_SPIFFS == false) => using LITTLEFS for configuration data in WiFiManager
// (USE_LITTLEFS == true) and (USE_SPIFFS == true) => using LITTLEFS for configuration data in WiFiManager
// (USE_LITTLEFS == false) and (USE_SPIFFS == true) => using SPIFFS for configuration data in WiFiManager
// Those above #define's must be placed before #include <BlynkSimpleEsp32_WFM.h>
#define USE_LITTLEFS true
#define USE_SPIFFS false
#if USE_LITTLEFS
#define CurrentFileFS F("LittleFS")
#elif USE_SPIFFS
#define CurrentFileFS F("SPIFFS")
#else
#define CurrentFileFS F("EEPROM")
// EEPROM_SIZE must be <= 2048 and >= CONFIG_DATA_SIZE (currently 172 bytes)
#define EEPROM_SIZE (2 * 1024)
// EEPROM_START + CONFIG_DATA_SIZE must be <= EEPROM_SIZE
#define EEPROM_START 0
#endif
// Force some params in Blynk, only valid for library version 1.0.1 and later
#define TIMEOUT_RECONNECT_WIFI 10000L
#define RESET_IF_CONFIG_TIMEOUT true
#define CONFIG_TIMEOUT_RETRYTIMES_BEFORE_RESET 5
// Config Timeout 120s (default 60s)
#define CONFIG_TIMEOUT 120000L
// Those above #define's must be placed before #include <BlynkSimpleEsp8266_WM.h>
// TTGO T-Call pin definitions
#define MODEM_RST 5
#define MODEM_PWKEY 4
#define MODEM_POWER_ON 23
#define MODEM_TX 27
#define MODEM_RX 26
#define I2C_SDA 21
#define I2C_SCL 22
// Select your modem:
#define TINY_GSM_MODEM_SIM800
//#define TINY_GSM_MODEM_SIM808
//#define TINY_GSM_MODEM_SIM868
//#define TINY_GSM_MODEM_SIM900
//#define TINY_GSM_MODEM_SIM5300
//#define TINY_GSM_MODEM_SIM5320
//#define TINY_GSM_MODEM_SIM5360
//#define TINY_GSM_MODEM_SIM7000
//#define TINY_GSM_MODEM_SIM7100
//#define TINY_GSM_MODEM_SIM7500
//#define TINY_GSM_MODEM_SIM7600
//#define TINY_GSM_MODEM_SIM7800
//#define TINY_GSM_MODEM_UBLOX
//#define TINY_GSM_MODEM_SARAR4
//#define TINY_GSM_MODEM_M95
//#define TINY_GSM_MODEM_BG96
//#define TINY_GSM_MODEM_A6
//#define TINY_GSM_MODEM_A7
//#define TINY_GSM_MODEM_M590
//#define TINY_GSM_MODEM_MC60
//#define TINY_GSM_MODEM_MC60E
//#define TINY_GSM_MODEM_XBEE
//#define TINY_GSM_MODEM_SEQUANS_MONARCH
// Increase RX buffer if needed
#define TINY_GSM_RX_BUFFER 1024
#include <TinyGsmClient.h>
//#define USE_BLYNK_WM false
#define USE_BLYNK_WM true
#include <BlynkSimpleTinyGSM_M.h>
#if USE_BLYNK_WM
#define USE_DYNAMIC_PARAMETERS true
#include <BlynkSimpleEsp32_GSM_WFM.h>
#else
#include <BlynkSimpleEsp32_GSM_WF.h>
// Your WiFi credentials.
#define ssid "****"
#define pass "****"
#define USE_LOCAL_SERVER true
//#define USE_LOCAL_SERVER false
#if USE_LOCAL_SERVER
#define wifi_blynk_tok "****"
#define gsm_blynk_tok "****"
//#define blynk_server "account.duckdns.org"
// Use direct IPAddress in case GPRS can't use DDNS fast enough and can't connect
#define blynk_server "xxx.xxx.xxx.xxx"
#else
#define wifi_blynk_tok "****"
#define gsm_blynk_tok "****"
#define blynk_server "blynk-cloud.com"
#endif
#define apn "rogers-core-appl1.apn"
#define gprsUser "" //"wapuser1"
#define gprsPass "" //"wap"
#endif //USE_BLYNK_WM
#define BLYNK_HARDWARE_PORT 8080
// Set serial for debug console (to the Serial Monitor, default speed 115200)
#define SerialMon Serial
#define RXD2 16
#define TXD2 17
// Use ESP32 Serial2 for GSM, Serial1 for TTGO T-Call
#define SerialAT Serial1
// Uncomment this if you want to see all AT commands
#define DUMP_AT_COMMANDS false
#if DUMP_AT_COMMANDS
#include <StreamDebugger.h>
StreamDebugger debugger(SerialAT, SerialMon);
TinyGsm modem(debugger);
#else
TinyGsm modem(SerialAT);
#endif
#define HOST_NAME "ESP32-GSM-WiFi"
#endif //defines_h
#ifndef Credentials_h
#define Credentials_h
#if USE_BLYNK_WM
/// Start Default Config Data //////////////////
/*
// Defined in <BlynkSimpleESP8266_GSM_WFM.h>
#define SSID_MAX_LEN 32
//From v1.0.10, WPA2 passwords can be up to 63 characters long.
#define PASS_MAX_LEN 64
typedef struct
{
char wifi_ssid[SSID_MAX_LEN];
char wifi_pw [PASS_MAX_LEN];
} WiFi_Credentials;
#define BLYNK_SERVER_MAX_LEN 32
#define BLYNK_TOKEN_MAX_LEN 36
typedef struct
{
char blynk_server [BLYNK_SERVER_MAX_LEN];
char wifi_blynk_token [BLYNK_TOKEN_MAX_LEN];
char gsm_blynk_token [BLYNK_TOKEN_MAX_LEN];
} Blynk_Credentials;
#define NUM_WIFI_CREDENTIALS 2
#define NUM_BLYNK_CREDENTIALS 2
// Configurable items besides fixed Header
#define NUM_CONFIGURABLE_ITEMS ( 6 + (2 * NUM_WIFI_CREDENTIALS) + (3 * NUM_BLYNK_CREDENTIALS) )
#define DEFAULT_GPRS_PIN "1234"
typedef struct Configuration
{
char header [16];
WiFi_Credentials WiFi_Creds [NUM_WIFI_CREDENTIALS];
Blynk_Credentials Blynk_Creds [NUM_BLYNK_CREDENTIALS];
int blynk_port;
// YOUR GSM / GPRS RELATED
char apn [32];
char gprsUser [32];
char gprsPass [32];
char gprsPin [12]; // A PIN (Personal Identification Number) is a 4-8 digit passcode
// END OF YOUR GSM / GPRS RELATED
char board_name [24];
int checkSum;
} Blynk_WF_Configuration;
*/
//bool LOAD_DEFAULT_CONFIG_DATA = true;
bool LOAD_DEFAULT_CONFIG_DATA = false;
Blynk_WF_Configuration defaultConfig =
{
//char header[16], dummy, not used
"GSM",
//WiFi_Credentials WiFi_Creds [NUM_WIFI_CREDENTIALS]
//WiFi_Creds.wifi_ssid and WiFi_Creds.wifi_pw
"SSID1", "password1",
"SSID2", "password2",
// Blynk_Credentials Blynk_Creds [NUM_BLYNK_CREDENTIALS];
// Blynk_Creds.blynk_server, Blynk_Creds.wifi_blynk_token and Blynk_Creds.gsm_blynk_token
"account.ddns.net", "wifi_token", "gsm_token",
"account.duckdns.org", "wifi_token1", "gsm_token1",
//int blynk_port;
8080,
// YOUR GSM / GPRS RELATED
//char apn [32];
"rogers-core-appl1.apn",
//char gprsUser [32];
"wapuser1",
//char gprsPass [32];
"wap",
//char gprsPin [12]; // A PIN (Personal Identification Number) is a 4-8 digit passcode
"1245678",
// END OF YOUR GSM / GPRS RELATED
//char board_name [24];
"ESP32-GSM-WiFi",
//int checkSum, dummy, not used
0
};
/////////// End Default Config Data /////////////
#endif // #if USE_BLYNK_WM
#endif //Credentials_h
#ifndef dynamicParams_h
#define dynamicParams_h
#if USE_BLYNK_WM
#if (USE_DYNAMIC_PARAMETERS)
#warning USE_DYNAMIC_PARAMETERS
#endif
// USE_DYNAMIC_PARAMETERS defined in defined.h
/////////////// Start dynamic Credentials ///////////////
//Defined in <BlynkSimpleEsp32_GSM_WFM.h>
/**************************************
#define MAX_ID_LEN 5
#define MAX_DISPLAY_NAME_LEN 16
typedef struct
{
char id [MAX_ID_LEN + 1];
char displayName [MAX_DISPLAY_NAME_LEN + 1];
char *pdata;
uint8_t maxlen;
} MenuItem;
**************************************/
#if USE_DYNAMIC_PARAMETERS
#define MAX_MQTT_SERVER_LEN 34
char MQTT_Server [MAX_MQTT_SERVER_LEN + 1] = "mqtt.ddns.net";
#define MAX_MQTT_PORT_LEN 6
char MQTT_Port [MAX_MQTT_PORT_LEN + 1] = "1883";
#define MAX_MQTT_USERNAME_LEN 34
char MQTT_UserName [MAX_MQTT_USERNAME_LEN + 1] = "mqtt-user";
#define MAX_MQTT_PW_LEN 34
char MQTT_PW [MAX_MQTT_PW_LEN + 1] = "mqtt-pass";
#define MAX_MQTT_SUBS_TOPIC_LEN 34
char MQTT_SubsTopic [MAX_MQTT_SUBS_TOPIC_LEN + 1] = "SubTopic_ESP32_GSM";
#define MAX_MQTT_PUB_TOPIC_LEN 34
char MQTT_PubTopic [MAX_MQTT_PUB_TOPIC_LEN + 1] = "PubTopic_ESP32_GSM";
MenuItem myMenuItems [] =
{
{ "mqtt", "MQTT Server", MQTT_Server, MAX_MQTT_SERVER_LEN },
{ "mqpt", "Port", MQTT_Port, MAX_MQTT_PORT_LEN },
{ "user", "MQTT UserName", MQTT_UserName, MAX_MQTT_USERNAME_LEN },
{ "mqpw", "MQTT PWD", MQTT_PW, MAX_MQTT_PW_LEN },
{ "subs", "Subs Topics", MQTT_SubsTopic, MAX_MQTT_SUBS_TOPIC_LEN },
{ "pubs", "Pubs Topics", MQTT_PubTopic, MAX_MQTT_PUB_TOPIC_LEN },
};
uint16_t NUM_MENU_ITEMS = sizeof(myMenuItems) / sizeof(MenuItem); //MenuItemSize;
#else
MenuItem myMenuItems [] = {};
uint16_t NUM_MENU_ITEMS = 0;
#endif
/////// // End dynamic Credentials ///////////
#endif // #if USE_BLYNK_WM
#endif //dynamicParams_h
This is the terminal debug output when running both WiFi and GSM/GPRS at the same time using example TTGO_TCALL_GSM_SHT3x
Start TTGO_TCALL_GSM_SHT3x (Simultaneous WiFi+GSM) using SPIFFS on ESP32_DEV
BlynkGSM_Manager v1.2.1
ESP_MultiResetDetector v1.1.1
Set GSM module baud rate
Use WiFi to connect Blynk
SPIFFS Flag read = 0xd0d04321
No doubleResetDetected
Saving config file...
Saving config file OK
[3108] Hostname=TTGO-TCALL-GSM
[3169] LoadCfgFile
[3169] OK
[3169] CCSum=0x5ae8,RCSum=0x5ae8
[3171] LoadCredFile
[3171] OK
[3171] CrCCsum=15b9,CrRCsum=15b9
[3171] Buffer freed
[3173] LoadCredFile
[3173] OK
[3174] CrCCsum=15b9,CrRCsum=15b9
[3177] Hdr=ESP32_GSM_WFM,BrdName=ESP32-GSM-WiFi
[3181] SSID=HueNet1,PW=****
[3184] SSID1=HueNet2,PW1=****
[3187] APN=rogers-core-appl1.apn,User=wapuser1
[3191] PW=wap,PIN=1245678
[3194] Server=account.ddns.net,WiFi_Token=****,GSM_Token=****
[3204] Server1=account.duckdns.org,WiFi_Token1=****,GSM_Token1=****
[3214] Port=8080
[3216] ======= End Config Data =======
[3220] Connecting MultiWifi...
[9463] WiFi connected after time: 1
[9463] SSID=HueNet1,RSSI=-40
[9463] Channel=2,IP=192.168.2.81
[9464] bg: WiFi OK. Try Blynk
[9464]
___ __ __
/ _ )/ /_ _____ / /__
/ _ / / // / _ \/ '_/
/____/_/\_, /_//_/_/\_\
/___/ v0.6.1 on ESP32
[9477] BlynkArduinoClient.connect: Connecting to account.ddns.net:8080
[9609] Ready (ping: 12ms).
[9676] Connected to BlynkServer=account.ddns.net,Token=****
[9677] bg: WiFi+Blynk OK
gprs apn = rogers-core-appl1.apn
[9678]
___ __ __
/ _ )/ /_ _____ / /__
/ _ / / // / _ \/ '_/
/____/_/\_, /_//_/_/\_\
/___/ v0.6.1 on ESP32
[9691] InitModem
[9713] Con2Network
[9724] Network:Rogers Wireless
[9724] Conn2 rogers-core-appl1.apn
[14955] GPRSConOK
[14965] BlynkArduinoClient.connect: Connecting to account.duckdns.org:8080
[15609] Ready (ping: 315ms).
Your stored Credentials :
MQTT Server = mqtt.duckdns.org
Port = 1883
MQTT UserName = yourName
MQTT PWD = yourPWD
Subs Topics = SubsTopic1
Pubs Topics = PubsTopic1
BGBGBGBGBGBGBGBGBGBG BGBGBGBGBGBGBGBGBGBG BGBGBGBGBGBGBGBGBGBG BGBGBGBGBGBGBGBGBGBG
This is the terminal debug output when running both WiFi and GSM/GPRS at the same time using example TTGO_TCALL_MRD_GSM
Start TTGO_TCALL_MRD_GSM (Simultaneous WiFi+GSM) using LittleFS on ESP32_DEV
BlynkGSM_Manager v1.2.1
ESP_MultiResetDetector v1.1.1
Set GSM module baud rate
Use WiFi to connect Blynk
LittleFS Flag read = 0xFFFE0001
multiResetDetectorFlag = 0xFFFE0001
lowerBytes = 0x0001, upperBytes = 0x0001
No multiResetDetected, number of times = 1
LittleFS Flag read = 0xFFFE0001
Saving config file...
Saving config file OK
[3350] Hostname=TTGO-TCALL-GSM
[3361] LoadCfgFile
[3363] OK
[3363] CCSum=0x5a92,RCSum=0x5a92
[3369] LoadCredFile
[3371] OK
[3371] CrCCsum=0x1975,CrRCsum=0x1975
[3371] Hdr=ESP32_GSM_WFM,BrdName=TTGO_TCALL_MRD
[3371] SSID=HueNet1,PW=12345678
[3372] SSID1=HueNet2,PW1=12345678
[3375] APN=rogers-core-appl1.apn,User=wapuser1
[3379] PW=wap,PIN=12345678
[3381] Server=account.duckdns.org,WiFi_Token=token_wifi_1,GSM_Token=token_gsm_1
[3392] Server1=account.ddns.net,WiFi_Token1=token_wifi_2,GSM_Token1=token_gsm_2
[3402] Port=8080
[3404] ======= End Config Data =======
[3407] Connecting MultiWifi...
[9373] WiFi connected after time: 1
[9373] SSID:HueNet1,RSSI=-36
[9373] Channel:2,IP address:192.168.2.40
[9373] bg: WiFi OK. Try Blynk
[9374]
___ __ __
/ _ )/ /_ _____ / /__
/ _ / / // / _ \/ '_/
/____/_/\_, /_//_/_/\_\
/___/ v0.6.1 on ESP32
[9387] BlynkArduinoClient.connect: Connecting to account.duckdns.org:8080
[9538] Ready (ping: 3ms).
[9605] Connected to Blynk Server = account.duckdns.org, Token = token_wifi_1
[9605] bg: WiFi+Blynk OK
gprs apn = rogers-core-appl1.apn
[9608]
___ __ __
/ _ )/ /_ _____ / /__
/ _ / / // / _ \/ '_/
/____/_/\_, /_//_/_/\_\
/___/ v0.6.1 on ESP32
[9621] InitModem
[9650] Con2Network
[9661] Network:Rogers Wireless
[9661] Conn2 rogers-core-appl1.apn
[14885] GPRSConOK
[14895] BlynkArduinoClient.connect: Connecting to account.duckdns.org:8080
[15539] Ready (ping: 315ms).
Stop multiResetDetecting
Saving config file...
Saving config file OK
Your stored Credentials :
MQTT Server = mqtt.ddns.net
Port = 1883
MQTT UserName = mqtt-user
MQTT PWD = mqtt-pass
Subs Topics = SubTopic_ESP32_GSM
Pubs Topics = PubTopic_ESP32_GSM
BGBGBGBGBGBGBGBGBGBG BGBGBGBGBGBGBGBGBGBG BGBGBGBGBGBGBGBGBGBG BGBGBGBGBGBGBGBGBGBG
This is the terminal debug output when running both WiFi and GSM/GPRS at the same time using example ESP32_GSM
Start ESP32_GSM (Simultaneous WiFi+GSM) using LittleFS on ESP32_DEV
BlynkGSM_Manager v1.2.1
ESP_DoubleResetDetector v1.1.1
Set GSM module baud rate
Use WiFi to connect Blynk
LittleFS Flag read = 0xD0D04321
No doubleResetDetected
Saving config file...
Saving config file OK
[3379] Hostname=ESP32-WiFi-GSM
[3413] LoadCfgFile
[3419] OK
[3420] CCSum=0x5869,RCSum=0x5869
[3432] LoadCredFile
[3437] OK
[3437] CrCCsum=0x1975,CrRCsum=0x1975
[3437] Hdr=ESP32_GSM_WFM,BrdName=ESP32_GSM
[3437] SSID=HueNet1,PW=12345678
[3437] SSID1=HueNet2,PW1=12345678
[3440] APN=rogers-core-appl1.apn,User=wapuser1
[3444] PW=wap,PIN=12345678
[3446] Server=account.duckdns.org,WiFi_Token=token_wifi_1,GSM_Token=token_gsm_1
[3457] Server1=account.ddns.net,WiFi_Token1=token_wifi_2,GSM_Token1=token_gsm_2
[3467] Port=8080
[3469] ======= End Config Data =======
[3472] Connecting MultiWifi...
[9374] WiFi connected after time: 1
[9374] SSID:HueNet1,RSSI=-29
[9374] Channel:2,IP address:192.168.2.101
[9374] bg: WiFi OK. Try Blynk
[9375]
___ __ __
/ _ )/ /_ _____ / /__
/ _ / / // / _ \/ '_/
/____/_/\_, /_//_/_/\_\
/___/ v0.6.1 on ESP32
[9388] BlynkArduinoClient.connect: Connecting to account.duckdns.org:8080
[9525] Ready (ping: 6ms).
[9593] Connected to Blynk Server = account.duckdns.org, Token = token_wifi_1
[9593] bg: WiFi+Blynk OK
gprs apn = rogers-core-appl1.apn
[9596]
___ __ __
/ _ )/ /_ _____ / /__
/ _ / / // / _ \/ '_/
/____/_/\_, /_//_/_/\_\
/___/ v0.6.1 on ESP32
[9611] InitModem
[9640] Con2Network
[9651] Network:Rogers Wireless
[9661] Conn2 rogers-core-appl1.apn
[14875] GPRSConOK
[14885] BlynkArduinoClient.connect: Connecting to account.duckdns.org:8080
[15529] Ready (ping: 315ms).
Stop doubleResetDetecting
Saving config file...
Saving config file OK
BF
Your stored Credentials :
MQTT Server = mqtt.ddns.net
Port = 1883
MQTT UserName = mqtt-user
MQTT PWD = mqtt-pass
Subs Topics = SubTopic_ESP32_GSM
Pubs Topics = PubTopic_ESP32_GSM
This is the terminal debug output when running both WiFi and GSM/GPRS at the same time, using example TTGO_TCALL_GSM on ESP32-based TTGO-TCALL
Start TTGO_TCALL_GSM (Simultaneous WiFi+GSM) using LittleFS on TTGO_T1
BlynkGSM_Manager v1.2.1
ESP_DoubleResetDetector v1.1.1
Set GSM module baud rate
Use WiFi to connect Blynk
LittleFS Flag read = 0xD0D04321
No doubleResetDetected
Saving config file...
Saving config file OK
[3378] Hostname=TTGO-TCALL-GSM
[3406] LoadCfgFile
[3410] OK
[3410] CCSum=0x5558,RCSum=0x5558
[3424] LoadCredFile
[3428] OK
[3428] CrCCsum=0x1cda,CrRCsum=0x1cda
[3428] Hdr=ESP32_GSM_WFM,BrdName=TTGO_TCALL
[3428] SSID=HueNet1,PW=12345678
[3428] SSID1=HueNet2,PW1=12345678
[3431] APN=rogers-core-appl1.apn,User=wapuser1
[3435] PW=wap,PIN=12345678
[3438] Server=account.duckdns.org,WiFi_Token=wifi_token,GSM_Token=gsm_token
[3448] Server1=192.168.2.32,WiFi_Token1=wifi_token,GSM_Token1=gsm_token
[3458] Port=8080
[3460] ======= End Config Data =======
[3472] LoadCPFile
[3476] OK
[3476] Connecting MultiWifi...
[9810] WiFi connected after time: 1
[9810] SSID:HueNet1,RSSI=-33
[9810] Channel:2,IP address:192.168.2.164
[9810] bg: WiFi OK. Try Blynk
[9811]
___ __ __
/ _ )/ /_ _____ / /__
/ _ / / // / _ \/ '_/
/____/_/\_, /_//_/_/\_\
/___/ v0.6.1 on ESP32
[9964] Ready (ping: 5ms).
[10032] Connected to Blynk Server = account.duckdns.org, Token = wifi_token
[10032] bg: WiFi+Blynk OK
gprs apn = rogers-core-appl1.apn
[10032]
___ __ __
/ _ )/ /_ _____ / /__
/ _ / / // / _ \/ '_/
/____/_/\_, /_//_/_/\_\
/___/ v0.6.1 on ESP32
[10091] InitModem
[10113] Con2Network
[10124] Network:Rogers Wireless
[10124] Conn2 rogers-core-appl1.apn
[18955] GPRSConOK
[18965] BlynkArduinoClient.connect: Connecting to account.duckdns.org:8080
[19609] Ready (ping: 315ms).
Your stored Credentials :
MQTT Server = mqtt.duckdns.org
Port = 1883
MQTT UserName = yourName
MQTT PWD = yourPWD
Subs Topics = SubsTopic1
Pubs Topics = PubsTopic1
BGBGBGBGBGBGBGBGBGBG BGBGBGBGBGBGBGBGBGBG BGBGBGBGBGBGBGBGBGBG BGBGBGBGBGBGBGBGBGBG
Non-Persistent CP will be removed after first reset or time-out, even you didn't enter the CP. You can optionally enter CP, input and Save
config data.
CP Button Hit. Rebooting
[1459459] SaveCPFile
[1459461] OK
[1459466] SaveBkUpCPFile
[1459468] OK
ets Jun 8 2016 00:22:57
Start TTGO_TCALL_GSM (Simultaneous WiFi+GSM) using LittleFS on TTGO_T1
BlynkGSM_Manager v1.2.1
ESP_DoubleResetDetector v1.1.1
Set GSM module baud rate
Use WiFi to connect Blynk
LittleFS Flag read = 0xD0D04321
No doubleResetDetected
Saving config file...
Saving config file OK
[3340] Hostname=TTGO-TCALL-GSM
[3357] LoadCfgFile
[3360] OK
[3360] CCSum=0x5558,RCSum=0x5558
[3368] LoadCredFile
[3371] OK
[3371] CrCCsum=0x1cda,CrRCsum=0x1cda
[3371] Hdr=ESP32_GSM_WFM,BrdName=TTGO_TCALL
[3371] SSID=HueNet1,PW=12345678
[3372] SSID1=HueNet2,PW1=12345678
[3375] APN=rogers-core-appl1.apn,User=wapuser1
[3380] PW=wap,PIN=12345678
[3382] Server=account.duckdns.org,WiFi_Token=wifi_token,GSM_Token=gsm_token
[3392] Server1=192.168.2.32,WiFi_Token1=wifi_token,GSM_Token1=gsm_token
[3403] Port=8080
[3404] ======= End Config Data =======
[3414] LoadCPFile
[3416] OK
[3416] bg:Stay forever in CP:Forced-non-Persistent
[3422] SaveCPFile
[3425] OK
[3432] SaveBkUpCPFile
[3435] OK
[4280]
stConf:SSID=TestPortal-ESP32,PW=TestPortalPass
[4280] IP=192.168.4.1,ch=8
gprs apn = rogers-core-appl1.apn
DRD/MRD, Forced Config Portal or No valid stored apn. Must run only WiFi to Open config portal
FF
Your stored Credentials :
MQTT Server = mqtt.ddns.net
Port = 1883
MQTT UserName = mqtt-new_user
MQTT PWD = mqtt-password
Subs Topics = SubTopic_ESP32_GSM
Pubs Topics = PubTopic_ESP32_GSM
Stop doubleResetDetecting
Saving config file...
Saving config file OK
Persistent CP will remain even after resets or time-out. The only way to get rid of Config Portal is to enter CP, input (even fake data or none) and Save
config data. So be careful to use this feature.
Persistent CP Button Hit. Rebooting
[130508] SaveCPFile
[130512] OK
[130522] SaveBkUpCPFile
[130526] OK
ets Jun 8 2016 00:22:57
Start TTGO_TCALL_GSM (Simultaneous WiFi+GSM) using LittleFS on TTGO_T1
BlynkGSM_Manager v1.2.1
ESP_DoubleResetDetector v1.1.1
Set GSM module baud rate
Use WiFi to connect Blynk
LittleFS Flag read = 0xD0D04321
No doubleResetDetected
Saving config file...
Saving config file OK
[3352] Hostname=TTGO-TCALL-GSM
[3390] LoadCfgFile
[3396] OK
[3396] CCSum=0x5558,RCSum=0x5558
[3414] LoadCredFile
[3420] OK
[3420] CrCCsum=0x1cda,CrRCsum=0x1cda
[3420] Hdr=ESP32_GSM_WFM,BrdName=TTGO_TCALL
[3420] SSID=HueNet1,PW=12345678
[3421] SSID1=HueNet2,PW1=12345678
[3423] APN=rogers-core-appl1.apn,User=wapuser1
[3427] PW=wap,PIN=12345678
[3430] Server=account.duckdns.org,WiFi_Token=wifi_token,GSM_Token=gsm_token
[3440] Server1=192.168.2.32,WiFi_Token1=wifi_token,GSM_Token1=gsm_token
[3450] Port=8080
[3452] ======= End Config Data =======
[3466] LoadCPFile
[3470] OK
[3470] bg:Stay forever in CP:Forced-Persistent
[4315]
stConf:SSID=TestPortal-ESP32,PW=TestPortalPass
[4315] IP=192.168.4.1,ch=10
gprs apn = rogers-core-appl1.apn
DRD/MRD, Forced Config Portal or No valid stored apn. Must run only WiFi to Open config portal
FF
Your stored Credentials :
MQTT Server = mqtt.ddns.net
Port = 1883
MQTT UserName = mqtt-new_user
MQTT PWD = mqtt-password
Subs Topics = SubTopic_ESP32_GSM
Pubs Topics = PubTopic_ESP32_GSM
Stop doubleResetDetecting
Saving config file...
Saving config file OK
Debug is enabled by default on Serial.
You can also change the debugging level from 0 to 4
#define BLYNK_PRINT Serial
#define BLYNK_WM_DEBUG 3
#define USING_MRD true
#if USING_MRD
#define MULTIRESETDETECTOR_DEBUG true
#else
#define DOUBLERESETDETECTOR_DEBUG false
#endif
If you get compilation errors, more often than not, you may need to install a newer version of the core for Arduino boards.
Sometimes, the library will only work if you update the board core to the latest version because I am using newly added functions.
Submit issues to: BlynkGSM_Manager issues
⭐️ vshymanskyy |
mikekgr |
FRANAIRBUS |
brondolin |
If you want to contribute to this project:
Copyright 2020- Khoi Hoang