This project shows how to connect the TTGO T-Call ESP32 SIM800L board to the Internet using a SIM card data plan and publish data to the cloud without using Wi-Fi. We’ll program this board with Arduino IDE.

Watch the Video Tutorial
You can watch the video tutorial or continue reading for the complete project instructions.
Introducing the TTGO T-Call ESP32 SIM800L
The TTGO T-Call is a new ESP32 development board that combines a SIM800L GSM/GPRS module. You can get if for approximately $11.

Besides Wi-Fi and Bluetooth, you can communicate with this ESP32 board using SMS or phone calls and you can connect it to the internet using your SIM card data plan. This is great for IoT projects that don’t have access to a nearby router.
Important: the SIM800L works on 2G networks, so it will only work in your country, if 2G networks are available. Check if you have 2G network in your country, otherwise it won’t work.
To use the capabilities of this board you need to have a nano SIM card with data plan and a USB-C cable to upload code to the board.

The package includes some header pins, a battery connector, and an external antenna that you should connect to your board.

However, we had some issues with that antenna, so we decided to switch to another type of antenna and all the problems were solved. The following figure shows the new antenna.

Project Overview
The idea of this project is to publish sensor data from anywhere to any cloud service that you want. The ESP32 doesn’t need to have access to a router via Wi-Fi, because we’ll connect to the internet using a SIM card data plan.
In a previous project, we’ve created our own server domain with a database to plot sensor readings in charts that you can access from anywhere in the world.
In this project, we’ll publish sensor readings to that server. You can publish your sensor readings to any other service, like ThingSpeak, IFTTT, etc…
If you want to follow this exact project, you should follow that previous tutorial first to prepare your own server domain. Then, upload the code provided in this project to your ESP32 board.
In summary, here’s how the project works:
- The T-Call ESP32 SIM800L board is in deep sleep mode.
- It wakes up and connects to the internet using your SIM card data plan.
- It publishes the sensor readings to the server and goes back to sleep.
In our example, the sleep time is 60 minutes, but you can easily change it in the code.
We’ll be using a BME280 sensor, but you should be able to use any other sensor that best suits your needs.
Hosting Provider
If you don’t have a hosting account, I recommend signing up for Bluehost, because they can handle all the project requirements. If you don’t have a hosting account, I would appreciate if you sign up for Bluehost using my link. Which doesn’t cost you anything extra and helps support our work.
Get Hosting and Domain Name with Bluehost »
Prerequisites
1. ESP32 add-on Arduino IDE
We’ll program the ESP32 using Arduino IDE. So, you need to have the ESP32 add-on installed in your Arduino IDE. Follow the next tutorial, if you haven’t already.
2. Preparing your Server Domain
In this project we’ll show you how to publish data to any cloud service. We’ll be using our own server domain with a database to publish all the data, but you can use any other service like ThingSpeak, IFTTT, etc…
If you want to follow this exact project, you should follow the next tutorial to prepare your own server domain.
3. SIM Card with data plan
To use the TTGO T-Call ESP32 SIM800L board, you need a nano SIM card with a data plan. We recommend using a SIM card with a prepaid or monthly plan, so that you know exactly how much you’ll spend.
4. APN Details
To connect your SIM card to the internet, you need to have your phone plan provider APN details. You need the domain name, username and a password.
In my case, I’m using vodafone Portugal. If you search for GPRS APN settings followed by your phone plan provider name, (in my case its: “GPRS APN vodafone Portugal”), you can usually find in a forum or in their website all the information that you need.
I’ve found this website that can be very useful to find all the information you need.
It might be a bit tricky to find the details if you don’t use a well known provider. So, you might need to contact them directly.
5. Libraries
You need to install these libraries to proceed with this project: Adafruit_BME280, Adafruit_Sensor and TinyGSM. Follow the next instructions to install these libraries.
Installing the Adafruit BME280 Library
Open your Arduino IDE and go to Sketch > Include Library > Manage Libraries. The Library Manager should open.
Search for “adafruit bme280 ” on the Search box and install the library.

Installing the Adafruit Sensor Library
To use the BME280 library, you also need to install the Adafruit_Sensor library. Follow the next steps to install the library in your Arduino IDE:
Go to Sketch > Include Library > Manage Libraries and type “Adafruit Unified Sensor” in the search box. Scroll all the way down to find the library and install it.

Installing the TinyGSM Library
In the Arduino IDE Library Manager search for TinyGSM. Select the TinyGSM library by Volodymyr Shymanskyy.

After installing the libraries, restart your Arduino IDE.
Parts Required
To build this project, you need the following parts:
- TTGO T-Call ESP32 SIM800L
- USB-C cable
- Antenna (optional)
- BME280 sensor module (Guide for BME280 with ESP32)
- Breadboard
- Jumper wires
You can use the preceding links or go directly to MakerAdvisor.com/tools to find all the parts for your projects at the best price!
Schematic Diagram
Wire the BME280 to the T-Call ESP32 SIM800L board as shown in the following schematic diagram.

We’re connecting the SDA pin to GPIO 18 and the SCL pin to GPIO 19. We’re not using the default I2C GPIOs because they are being used by the battery power management IC of the T-Call ESP32 SIM800L board.
Code
Copy the following code to your Arduino IDE but don’t upload it yet. First, you need to make some modifications to make it work.
/*
Rui Santos
Complete project details at https://RandomNerdTutorials.com/esp32-sim800l-publish-data-to-cloud/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
*/
// Your GPRS credentials (leave empty, if not needed)
const char apn[] = ""; // APN (example: internet.vodafone.pt) use https://wiki.apnchanger.org
const char gprsUser[] = ""; // GPRS User
const char gprsPass[] = ""; // GPRS Password
// SIM card PIN (leave empty, if not defined)
const char simPIN[] = "";
// Server details
// The server variable can be just a domain name or it can have a subdomain. It depends on the service you are using
const char server[] = "example.com"; // domain name: example.com, maker.ifttt.com, etc
const char resource[] = "/post-data.php"; // resource path, for example: /post-data.php
const int port = 80; // server port number
// Keep this API Key value to be compatible with the PHP code provided in the project page.
// If you change the apiKeyValue value, the PHP file /post-data.php also needs to have the same key
String apiKeyValue = "tPmAT5Ab3j7F9";
// TTGO T-Call pins
#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
// BME280 pins
#define I2C_SDA_2 18
#define I2C_SCL_2 19
// Set serial for debug console (to Serial Monitor, default speed 115200)
#define SerialMon Serial
// Set serial for AT commands (to SIM800 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
// Define the serial console for debug prints, if needed
//#define DUMP_AT_COMMANDS
#include <Wire.h>
#include <TinyGsmClient.h>
#ifdef DUMP_AT_COMMANDS
#include <StreamDebugger.h>
StreamDebugger debugger(SerialAT, SerialMon);
TinyGsm modem(debugger);
#else
TinyGsm modem(SerialAT);
#endif
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
// I2C for SIM800 (to keep it running when powered from battery)
TwoWire I2CPower = TwoWire(0);
// I2C for BME280 sensor
TwoWire I2CBME = TwoWire(1);
Adafruit_BME280 bme;
// TinyGSM Client for Internet connection
TinyGsmClient client(modem);
#define uS_TO_S_FACTOR 1000000 /* Conversion factor for micro seconds to seconds */
#define TIME_TO_SLEEP 3600 /* Time ESP32 will go to sleep (in seconds) 3600 seconds = 1 hour */
#define IP5306_ADDR 0x75
#define IP5306_REG_SYS_CTL0 0x00
bool setPowerBoostKeepOn(int en){
I2CPower.beginTransmission(IP5306_ADDR);
I2CPower.write(IP5306_REG_SYS_CTL0);
if (en) {
I2CPower.write(0x37); // Set bit1: 1 enable 0 disable boost keep on
} else {
I2CPower.write(0x35); // 0x37 is default reg value
}
return I2CPower.endTransmission() == 0;
}
void setup() {
// Set serial monitor debugging window baud rate to 115200
SerialMon.begin(115200);
// Start I2C communication
I2CPower.begin(I2C_SDA, I2C_SCL, 400000);
I2CBME.begin(I2C_SDA_2, I2C_SCL_2, 400000);
// Keep power when running from battery
bool isOk = setPowerBoostKeepOn(1);
SerialMon.println(String("IP5306 KeepOn ") + (isOk ? "OK" : "FAIL"));
// Set 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);
// Set GSM module baud rate and UART pins
SerialAT.begin(115200, SERIAL_8N1, MODEM_RX, MODEM_TX);
delay(3000);
// Restart SIM800 module, it takes quite some time
// To skip it, call init() instead of restart()
SerialMon.println("Initializing modem...");
modem.restart();
// use modem.init() if you don't need the complete restart
// Unlock your SIM card with a PIN if needed
if (strlen(simPIN) && modem.getSimStatus() != 3 ) {
modem.simUnlock(simPIN);
}
// You might need to change the BME280 I2C address, in our case it's 0x76
if (!bme.begin(0x76, &I2CBME)) {
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1);
}
// Configure the wake up source as timer wake up
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
}
void loop() {
SerialMon.print("Connecting to APN: ");
SerialMon.print(apn);
if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {
SerialMon.println(" fail");
}
else {
SerialMon.println(" OK");
SerialMon.print("Connecting to ");
SerialMon.print(server);
if (!client.connect(server, port)) {
SerialMon.println(" fail");
}
else {
SerialMon.println(" OK");
// Making an HTTP POST request
SerialMon.println("Performing HTTP POST request...");
// Prepare your HTTP POST request data (Temperature in Celsius degrees)
String httpRequestData = "api_key=" + apiKeyValue + "&value1=" + String(bme.readTemperature())
+ "&value2=" + String(bme.readHumidity()) + "&value3=" + String(bme.readPressure()/100.0F) + "";
// Prepare your HTTP POST request data (Temperature in Fahrenheit degrees)
//String httpRequestData = "api_key=" + apiKeyValue + "&value1=" + String(1.8 * bme.readTemperature() + 32)
// + "&value2=" + String(bme.readHumidity()) + "&value3=" + String(bme.readPressure()/100.0F) + "";
// You can comment the httpRequestData variable above
// then, use the httpRequestData variable below (for testing purposes without the BME280 sensor)
//String httpRequestData = "api_key=tPmAT5Ab3j7F9&value1=24.75&value2=49.54&value3=1005.14";
client.print(String("POST ") + resource + " HTTP/1.1\r\n");
client.print(String("Host: ") + server + "\r\n");
client.println("Connection: close");
client.println("Content-Type: application/x-www-form-urlencoded");
client.print("Content-Length: ");
client.println(httpRequestData.length());
client.println();
client.println(httpRequestData);
unsigned long timeout = millis();
while (client.connected() && millis() - timeout < 10000L) {
// Print available data (HTTP response from server)
while (client.available()) {
char c = client.read();
SerialMon.print(c);
timeout = millis();
}
}
SerialMon.println();
// Close client and disconnect
client.stop();
SerialMon.println(F("Server disconnected"));
modem.gprsDisconnect();
SerialMon.println(F("GPRS disconnected"));
}
}
// Put ESP32 into deep sleep mode (with timer wake up)
esp_deep_sleep_start();
}
Before uploading the code, you need to insert your APN details, SIM card PIN (if applicable) and your server domain.
How the Code Works
Insert your GPRS APN credentials in the following variables:
const char apn[] = ""; // APN (example: internet.vodafone.pt) use https://wiki.apnchanger.org
const char gprsUser[] = ""; // GPRS User
const char gprsPass[] = ""; // GPRS Password
In our case, the APN is internet.vodafone.pt. Yours should be different. We’ve explained previous in this tutorial how to get your APN details.
Enter your SIM card PIN if applicable:
const char simPIN[] = "";
You also need to type the server details in the following variables. It can be your own server domain or any other server that you want to publish data to.
const char server[] = "example.com"; // domain name: example.com, maker.ifttt.com, etc
const char resource[] = "/post-data.php"; // resource path, for example: /post-data.php
const int port = 80; // server port number
If you’re using your own server domain as we’re doing in this tutorial, you also need an API key. In this case, the apiKeyValue is just a random string that you can modify. It’s used for security reasons, so only anyone that knows your API key can publish data to your database.
The code is heavily commented so that you understand the purpose of each line of code.
The following lines define the pins used by the SIM800L module:
#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
Define the BME280 I2C pins. In this example we’re not using the default pins because they are already being used by the battery power management IC of the T-Call ESP32 SIM800L board. So, we’re using GPIO 18 and GPIO 19.
#define I2C_SDA_2 18
#define I2C_SCL_2 19
Define a serial communication for the Serial Monitor and another to communicate with the SIM800L module:
// Set serial for debug console (to Serial Monitor, default speed 115200)
#define SerialMon Serial
// Set serial for AT commands (to SIM800 module)
#define SerialAT Serial1
Configure the TinyGSM library to work with the SIM800L module.
// Configure TinyGSM library
#define TINY_GSM_MODEM_SIM800 // Modem is SIM800
#define TINY_GSM_RX_BUFFER 1024 // Set RX buffer to 1Kb
Include the following libraries to communicate with the SIM800L.
#include <Wire.h>
#include <TinyGsmClient.h>
And these libraries to use the BME280 sensor:
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
Instantiate an I2C communication for the SIM800L.
TwoWire I2CPower = TwoWire(0);
And another I2C communication for the BME280 sensor.
TwoWire I2CBME = TwoWire(1);
Adafruit_BME280 bme;
Initialize a TinyGSMClient for internet connection.
TinyGsmClient client(modem);
Define the deep sleep time in the TIME_TO_SLEEP variable in seconds.
#define uS_TO_S_FACTOR 1000000 /* Conversion factor for micro seconds to seconds */
#define TIME_TO_SLEEP 3600 /* Time ESP32 will go to sleep (in seconds) 3600 seconds = 1 hour */
In the setup(), initialize the Serial Monitor at a baud rate of 115200:
SerialMon.begin(115200);
Start the I2C communication for the SIM800L module and for the BME280 sensor module:
I2CPower.begin(I2C_SDA, I2C_SCL, 400000);
I2CBME.begin(I2C_SDA_2, I2C_SCL_2, 400000);
Setup the SIM800L pins in a proper state to operate:
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);
Initialize a serial communication with the SIM800L module
SerialAT.begin(115200, SERIAL_8N1, MODEM_RX, MODEM_TX);
Initialize the SIM800L module and unlock the SIM card PIN if needed
SerialMon.println("Initializing modem...");
modem.restart();
// use modem.init() if you don't need the complete restart
// Unlock your SIM card with a PIN if needed
if (strlen(simPIN) && modem.getSimStatus() != 3 ) {
modem.simUnlock(simPIN);
}
Initialize the BME280 sensor module:
if (!bme.begin(0x76, &I2CBME)) {
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1);
}
Configure deep sleep as a wake up source:
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
Recommended reading: ESP32 Deep Sleep and Wake Up Sources
In the loop() is where we’ll actually connect to the internet and make the HTTP POST request to publish sensor data. Because the ESP32 will go into deep sleep mode at the end of the loop(), it will only run once.
The following lines connect the module to the internet:
SerialMon.print("Connecting to APN: ");
SerialMon.print(apn);
if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {
SerialMon.println(" fail");
}
else {
SerialMon.println(" OK");
SerialMon.print("Connecting to ");
SerialMon.print(server);
if (!client.connect(server, port)) {
SerialMon.println(" fail");
}
else {
SerialMon.println(" OK");
Prepare the message data to be sent by HTTP POST Request
String httpRequestData = "api_key=" + apiKeyValue + "&value1=" + String(bme.readTemperature())
+ "&value2=" + String(bme.readHumidity()) + "&value3=" + String(bme.readPressure()/100.0F) + "";
Basically, we create a string with the API key value and all the sensor readings. You should modify this string depending on the data you want to send.
The following lines make the POST request.
client.print(String("POST ") + resource + " HTTP/1.1\r\n");
client.print(String("Host: ") + server + "\r\n");
client.println("Connection: close");
client.println("Content-Type: application/x-www-form-urlencoded");
client.print("Content-Length: ");
client.println(httpRequestData.length());
client.println();
client.println(httpRequestData);
unsigned long timeout = millis();
while (client.connected() && millis() - timeout < 10000L) {
// Print available data (HTTP response from server)
while (client.available()) {
char c = client.read();
SerialMon.print(c);
timeout = millis();
}
}
Finally, close the connection, and disconnect from the internet.
client.stop();
SerialMon.println(F("Server disconnected"));
modem.gprsDisconnect();
SerialMon.println(F("GPRS disconnected"));
In the end, put the ESP32 in deep sleep mode.
esp_deep_sleep_start();
Upload the Code
After inserting all the necessary details, you can upload the code to your board.
To upload code to your board, go to Tools > Board and select ESP32 Dev module. Go to Tools > Port and select the COM port your board is connected to. Finally, press the upload button to upload the code to your board.

Note: at the moment, there isn’t a board for the T-Call ESP32 SIM800L, but we’ve selected the ESP32 Dev Module and it’s been working fine.
Demonstration
Open the Serial Monitor at baud rate of 115200 and press the board RST button.
First, the module initializes and then it tries to connect to the internet. Please note that this can take some time (in some cases it took almost 1 minute to complete the request).
After connecting to the internet, it will connect to your server to make the HTTP POST request.
Finally, it disconnects from the server, disconnects the internet and goes to sleep.

In this example, it publishes new sensor readings every 60 minutes, but for testing purposes you can use a shorter delay.
Then, open a browser and type your server domain on the /esp-chart.php URL. You should see the charts with the latest sensor readings.

Troubleshooting
If at this point, you can’t make your module connect to the internet, it can be caused by one of the following reasons:
- The APN credentials might not be correct;
- The antenna might not be working properly. In our case, we had to replace the antenna;
- You might need to go outside to get a better signal coverage;
- Or you might not be supplying enough current to the module. If you’re connecting the module to your computer using a USB hub without external power supply, it might not provide enough current to operate.
Wrapping Up
We hope you liked this project. In our opinion, the T-Call SIM800 ESP32 board can be very useful for IoT projects that don’t have access to a nearby router via Wi-Fi. You can connect your board to the internet quite easily using a SIM card data plan.
We’ll be publishing more projects about this board soon (like sending SMS notifications, request data via SMS, etc.) so, stay tuned!
You may also like:
- $11 TTGO T-Call ESP32 with SIM800L GSM/GPRS (in-depth review)
- ESP32/ESP8266 Insert Data into MySQL Database using PHP and Arduino IDE
- ESP32/ESP8266 Plot Sensor Readings in Real Time Charts – Web Server
- ESP32 Web Server with BME280 – Advanced Weather Station
Learn more about the ESP32 with our resources:
- Learn ESP32 with Arduino IDE (Course)
- MicroPython Programming with ESP32 and ESP8266 (eBook)
- More ESP32 Projects and Tutorials
Thanks for reading.
Muito Obligado Rui, thanks very much, can we see in a video how do you insert the SIM card in the board?
Also an idea, what about a simple app using app.inventor to send an SMS to this board and according to the SMS it checks a specific sensor and then it sends an SMS back, so the board gets the message and the phone number that sends the request to know the status of a sensor, for example someone wants to know the humidity or the temperature of a far away garden, or send a command to open a valve for 5 seconds for water, and with this we can send commands without the need of a router, which is GREAT !!!! THANKS AGAIN
Hi Tomas.
We’ll post more tutorials about this board: show how to make things happen by sending SMS and request data via SMS.
So, stay tuned.
Thank you for following our work.
Regads,
Sara
Make tutorial about Biometric Attendance System using Fingerprint Sensor and this board.
Thanks for the suggestion!
Excellent as usual
Congratulations.
I was thinking on doing something very similar but with yur tutorial, things will be much easier and fast.
Great saved me hours and hours.
carlos Frondizi
Hi Carlos.
That’s great! Thank you for following our work 😀
Regards,
Sara
Thanks for the very good tutorial. I recently purchased a t-call and was a bit fazed by the documentation. This has spelled it out perfectly. One thought I have had is, if it takes up to one minute to connect to the internet, the esp32 could be awake for up to 50% of the time. Depending on the currency of the data required, it could simply take a reading once a minute, for say 10 minutes and then connect to upload all 10 data points.
This would require keeping a counter of where in the cycle of 10 readings it is. EEPROM I guess would be the best place to keep that variable.
This way uptime would be reduced to about 12%.
Thanks for the great resource.
Do you have a source for the improved antenna?
Hi Paul.
I’ve just added a link to the antenna in the parts required.
Regards,
Sara
Thanks, Sara……Paul
Ótimo tutorial Sara e Rui,
Voces podem nos informar qual o tamanho do pacote de dados, em bytes, enviado em um dia ?
———————————————————————————————
Great Tutorial Sara and Rui,
Can you tell us the data packet size send in one day ?
Hi, the SIM800L only support 2G right? Any possibilities we can the same code for GSM module with 3G/4G connection for improve speed. Thanks.
By the way, great tutorial as always!!
Hi Umar.
That’s right.
The code should be compatible with other modules with just a few changes for proper initialization.
See the TinyGSM library documentation: github.com/vshymanskyy/TinyGSM
Regards,
Sara
Hello Sara and Rui!
A big thanks for your very informative and well organised instruction videos!
At present I am working with the TTGO T-Call unit, and sending data works perfect. I am very interested to know how data can be sent using JSON; do you plan an introductory video on that in the (hopefully near) future?
Regards, Hans
As per other comments, this device and the variants of the Sim 900 are 2G devices and this service is no longer available in my country (Australia) and several others so please also include projects that use 3G or 4G as well
Regards
Phil
Hi Phill.
I’ve added a big note at the beginning of the post about that.
This board is 2G, that’s why it is so cheap compared with other 3G and 4G modules (tha cost between 25$ and 50$ just the module without ESP32).
Unfortunately, 2G is not supported in all countries.t
But, if you want to use a 3G and 4G module, most of the code should be compatible. The TinyGSM library is compatible with a wide variety of modules. You just need to initialize the module with the proper configurations.
We’ll take a look at some 3G and 4G modules and probably create some tutorials in the future.
Regards,
Sara
When the ESP is in deep sleep, are the ancillary devices unit powered down on this device (GSM module, Serial to USB module etc)? Thinking about optimum battery life for in the field devices… Thanks.
To be honest we still need to do more power consumption tests with this board, but you should be able to lower quite significantly with deep sleep as used in this project
Olá, acabou de chegar minha TTGO T-Call ESP32 SIM800L, carregar este firmware o ESP32 fica eternamente dando a seguinte mensagem de erro, em que essa mensagem vai se repetindo sem parar:
Rebooting…
ets Jun 8 2016 00:22:57
rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:956
load:0x40078000,len:0
load:0x40078000,len:13076
entry 0x40078a58
assertion “false && “item should have been present in cache”” failed: file “/Users/ficeto/Desktop/ESP32/ESP32/esp-idf-public/components/nvs_flash/src/nvs_item_hash_list.cpp”, line 85, function: void nvs::HashList::erase(size_t)
abort() was called at PC 0x400d1283 on core 0
Backtrace: 0x4008704c:0x3ffc62c0 0x4008714b:0x3ffc62e0 0x400d1283:0x3ffc6300 0x400e3b20:0x3ffc6330 0x400e3e8e:0x3ffc6350 0x400e41bd:0x3ffc63a0 0x400e3934:0x3ffc6400 0x400e3776:0x3ffc6450 0x400e380f:0x3ffc6470 0x400e385a:0x3ffc6490 0x400e1054:0x3ffc64b0 0x400e1003:0x3ffc64d0 0x400d1b6e:0x3ffc6500
Você sabe como eu poderia solucionar esse problema?
Desculpe pelo post no outro tutorial que não era este
Hi Eduardo.
Those kind of errors are very difficult to troubleshoot.
Sometimes the ESP32 keeps rebooting when we don’t provide enough power.
For example, if you’re using a USB hub, it may not provide enough current. Or try another USB port.
At the moment, I don’t know what exactly can cause that problem.
Regards,
Sara
Hi Sara and Rui!
Congratulations for your tuto.
Im asking about make a mesh network using this module as root node, avoiding to use a router.
It would be posible?
Thanks for your Job.👌
Muito Obligado, I am from El Salvador, and I have a couple of ideas, I found today this “GSM Module SIM800L With MIC & 3.5mm Headphone Jack” is it possible to integrate with the ESP32 to create a very simple mobile?
Here are the ideas:
– voice to text. Sends a verbal instruction from a mobile to an ESP32
– text to voice. An ESP32 sends a SMS to another ESP32, like a temperature warning, but you don’t need to check incoming SMS because you will use speakers.
Hi Sara & Paul,
Great project, and well explained.
Im thinking of using this for my (snail) mailbox , so i can a notification when i receive my newspaper or letters. (my mailbox is far away from my home)
So i will use a small switch to trigger when the mailbox receives mail
Question : how do i set it up that it triggers IFTTT, or will you do a tutorial on that ?
I use Domoticz and that can receive triggers from IFTTT
keep up the good work
Hi Charles.
You can take a look at these tutorials and see if they help.
https://randomnerdtutorials.com/esp32-esp8266-publish-sensor-readings-to-google-sheets/
https://randomnerdtutorials.com/door-status-monitor-using-the-esp8266/
You just need to make an HTTP post request on the right webhooks URL.
Instead of searching for google sheets in the first tutorial, search for “email”
In both cases, I recommend searching for email as people were reporting some problems with the “gmail” option.
Regards,
Sara
P.S. It’s Sara and Rui (not Paul) 😀
Hi,
The SIM800L module is very power hungry and needs up to 2A (Amperes) when transmitting. The module will reboot and blink 7-8 times when the voltage is dropping due to insuffient Power. This is well described in the datasheet for the SIM800L. Use a Lipo battery charger and Lipo battery to Power this Board. A fully charged Lipo will give 4.1 Volts which is optimal for the SIM800.Max voltage is around 4.3-4.4 volts and it will send out a Message if the voltage is to high.
I also put a 1000 micro Farad capacitor between + and – Close to the module. Datasheets can be very useful for practical use of all kinds of modules and parts.
how i can connect this module with lora module plz ?
Many thanks Rui and Sara for another great tutorial, you have taught me a lot about the TTGO T-Call in an easy and understandable manner. My first remote air quality system using this module has been running well and collecting data.
With my new knowledge I have now successfully migrated over to using a SIM7000G module with NB IoT and an ESP32.
Eagerly awaiting another project!
Hi Richard.
Rui show me your project and it looks great!
Congratulations!
It’s very rewarding see what our readers can build with our tutorials.
Best wishes.
Sara 😀
Nice tutorial!
Can anyone help me out and tell me can the TTgo T-call be powered by the 5 v pin, or that pin is for 5 v input! I’m asking because i ordered an USB C converter from Banggood and my bag was empty, the support was rude, and i lost my money ! So now no usb connection, i must use the rx tx onboard and i must power it somehow! Thanks
Hi Zoli.
Yes, you can use the 5V pin for power.
Regards,
Sara