Comments (3)
That's a lot of code to look through, but the first thing that comes to mind is to delete this line:
while(1); // Don't proceed if it couldn't find the device
in the moduleSetup()
function.
from sim7000-lte-shield.
from sim7000-lte-shield.
Thanks for the help, I did what you did by doing the following
// Turn on GPRS
while (!fona.enableGPRS(true) &&(millis() < 30000)) {
Serial.println(F("Failed to enable GPRS, retrying..."));
delay(2000); // Retry every 2s
}
Serial.println(F("Enabled GPRS!"));
#endif
#endif
I added this same millis delay to the following functions
void FullSMS () {
char message3[20];
strcpy(message3, volBuff);
strcat(message3, text_message1);
pinMode(FONA_RST, OUTPUT);
digitalWrite(FONA_RST, HIGH); // Default state
pinMode(FONA_PWRKEY, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
powerOn(true); // Power on the module
moduleSetup(); // Establish first-time serial comm and print IMEI
fona.setNetworkSettings(F("hologram")); // For Hologram SIM card, change appropriately
while (!netStatus()&&(millis() < 30000)) {
Serial.println(F("Failed to connect to cell network, retrying..."));
delay(2000); // Retry every 2s
}
Serial.println(F("Connected to cell network!"));
// Send a text to your phone!
if (!fona.sendSMS(phone_number, message3)) {
Serial.println(F("Failed to send text!"));
}
else {
Serial.println(F("Sent text alert!"));
}
}
void ColdSMS () {
char message[20];
strcpy(message, tempBuff);
strcat(message, text_message2);
pinMode(FONA_RST, OUTPUT);
digitalWrite(FONA_RST, HIGH); // Default state
pinMode(FONA_PWRKEY, OUTPUT);
powerOn(true); // Power on the module
moduleSetup(); // Establish first-time serial comm and print IMEI
fona.setNetworkSettings(F("hologram")); // For Hologram SIM card, change appropriately
while (!netStatus()&&(millis() < 30000)) {
Serial.println(F("Failed to connect to cell network, retrying..."));
delay(2000); // Retry every 2s
}
Serial.println(F("Connected to cell network!"));
// Send a text to your phone!
if (!fona.sendSMS(phone_number, message)) {
Serial.println(F("Failed to send text!"));
}
else {
Serial.println(F("Sent text alert!"));
}
}
void batSMS () {
char message2[25];
strcpy(message2, batBuff);
strcat(message2, text_message3);
pinMode(FONA_RST, OUTPUT);
digitalWrite(FONA_RST, HIGH); // Default state
pinMode(FONA_PWRKEY, OUTPUT);
powerOn(true); // Power on the module
moduleSetup(); // Establish first-time serial comm and print IMEI
fona.setNetworkSettings(F("hologram")); // For Hologram SIM card, change appropriately
while (!netStatus()&&(millis() < 30000)) {
Serial.println(F("Failed to connect to cell network, retrying..."));
delay(2000); // Retry every 2s
}
Serial.println(F("Connected to cell network!"));
// Send a text to your phone!
if (!fona.sendSMS(phone_number, message2)) {
Serial.println(F("Failed to send text!"));
}
else {
Serial.println(F("Sent text alert!"));
}
}
void PostData ()
{
// If the shield was already on, no need to re-enable
#if defined(turnOffShield) && !defined(SIMCOM_3G) && !defined(SIMCOM_7500) && !defined(SIMCOM_7600)
// Disable GPRS just to make sure it was actually off so that we can turn it on
if (!fona.enableGPRS(false)) Serial.println(F("Failed to disable GPRS!"));
// Turn on GPRS
while (!fona.enableGPRS(true)&&(millis() < 30000)) {
Serial.println(F("Failed to enable GPRS, retrying..."));
delay(2000); // Retry every 2s
}
Serial.println(F("Enabled GPRS!"));
#endif
// Post something like temperature and battery level to the web API
// Construct URL and post the data to the web API
// Format the floating point numbers
// Also construct a combined, comma-separated location array
// (many platforms require this for dashboards, like Adafruit IO):
//sprintf(locBuff, "%s,%s,%s,%s", speedBuff, latBuff, longBuff, altBuff); // This could look like "10,33.123456,-85.123456,120.5"
// Construct the appropriate URL's and body, depending on request type
// In this example we use the IMEI as device ID
#ifdef PROTOCOL_HTTP_GET
// GET request
counter = 0; // This counts the number of failed attempts tries
#if defined(SIMCOM_3G) || defined(SIMCOM_7500) || defined(SIMCOM_7600)
// You can adjust the contents of the request if you don't need certain things like speed, altitude, etc.
sprintf(URL, "GET /dweet/for/%s?temp=%s&bat=%s&vol=%s HTTP/1.1\r\nHost: dweet.io\r\n\r\n",
imei, tempBuff, batBuff, volBuff);
// Try a total of three times if the post was unsuccessful (try additional 2 times)
while (counter < 3 && !fona.postData("www.dweet.io", 443, "HTTPS", URL)) { // Server, port, connection type, URL
Serial.println(F("Failed to complete HTTP/HTTPS request..."));
counter++; // Increment counter
delay(1000);
}
#else
sprintf(URL, "http://dweet.io/dweet/for/%s?temp=%s&bat=%s&vol=%s", imei, tempBuff, batBuff, volBuff);
while (counter < 3 && !fona.postData("GET", URL)) {
Serial.println(F("Failed to post data, retrying..."));
counter++; // Increment counter
delay(1000);
}
#endif
#elif defined(PROTOCOL_HTTP_POST)
// You can also do a POST request instead
counter = 0; // This counts the number of failed attempts tries
#if defined(SIMCOM_3G) || defined(SIMCOM_7500) || defined(SIMCOM_7600)
sprintf(body, "{\"lat\":%s,\"long\":%s}\r\n", latBuff, longBuff); // Terminate with CR+NL
sprintf(URL, "POST /dweet/for/%s HTTP/1.1\r\nHost: dweet.io\r\nContent-Length: %i\r\n\r\n", imei, strlen(body));
while (counter < 3 && !fona.postData("www.dweet.io", 443, "HTTPS", URL, body)) { // Server, port, connection type, URL
Serial.println(F("Failed to complete HTTP/HTTPS request..."));
counter++; // Increment counter
delay(1000);
}
#else
sprintf(URL, "http://dweet.io/dweet/for/%s", imei);
sprintf(body, "{\"lat\":%s,\"long\":%s}", latBuff, longBuff);
// Let's try a POST request to thingsboard.io
// Please note this can me memory-intensive for the Arduino Uno
// and may not work. You might have to split it up into a couple requests
// and send part of the data in one request, and the rest in the other, etc.
// Perhaps an easier solution is to swap out the Uno with an Arduino Mega.
/*
const char * token = "qFeFpQIC9C69GDFLWdAv"; // From thingsboard.io device
sprintf(URL, "http://demo.thingsboard.io/api/v1/%s/telemetry", token);
sprintf(body, "{\"lat\":%s,\"long\":%s,\"speed\":%s,\"head\":%s,\"alt\":%s,\"temp\":%s,\"batt\":%s}", latBuff, longBuff,
speedBuff, headBuff, altBuff, tempBuff, battBuff);
// sprintf(body, "{\"lat\":%s,\"long\":%s}", latBuff, longBuff); // If all you want is lat/long
*/
while (counter < 3 && !fona.postData("POST", URL, body)) {
Serial.println(F("Failed to complete HTTP POST..."));
counter++;
delay(1000);
}
#endif
#endif
//Only run the code below if you want to turn off the shield after posting data
#ifdef turnOffShield
// Disable GPRS
// Note that you might not want to check if this was successful, but just run it
// since the next command is to turn off the module anyway
if (!fona.enableGPRS(false)) Serial.println(F("Failed to disable GPRS!"));
// Turn off GPS
if (!fona.enableGPS(false)) Serial.println(F("Failed to turn off GPS!"));
// Power off the module. Note that you could instead put it in minimum functionality mode
// instead of completely turning it off. Experiment different ways depending on your application!
// You should see the "PWR" LED turn off after this command
// if (!fona.powerDown()) Serial.println(F("Failed to power down FONA!")); // No retries
counter = 0;
while (counter < 3 && !fona.powerDown()) { // Try shutting down
Serial.println(F("Failed to power down FONA!"));
counter++; // Increment counter
delay(1000);
}
#endif
// Alternative to the AT command method above:
// If your FONA has a PWRKEY pin connected to your MCU, you can pulse PWRKEY
// LOW for a little bit, then pull it back HIGH, like this:
// digitalWrite(PWRKEY, LOW);
// delay(600); // Minimum of 64ms to turn on and 500ms to turn off for FONA 3G. Check spec sheet for other types
// delay(1300); // Minimum of 1.2s for SIM7000
// digitalWrite(PWRKEY, HIGH);
// Shut down the MCU to save power
#ifndef samplingRate
Serial.println(F("Shutting down..."));
delay(5); // This is just to read the response of the last AT command before shutting down
MCU_powerDown(); // You could also write your own function to make it sleep for a certain duration instead
#else
// // The following lines are for if you want to periodically post data (like GPS tracker)
// Serial.print(F("Waiting for ")); Serial.print(samplingRate); Serial.println(F(" seconds\r\n"));
// delay(samplingRate * 1000UL); // Delay
// Only run the initialization again if the module was powered off
// since it resets back to 115200 baud instead of 4800.
#ifdef turnOffShield
fona.powerOn(FONA_PWRKEY); // Powers on the module if it was off previously
moduleSetup();
#endif
#endif
}
and I also did what botletics recommended by commenting out the line of code he mentions. Now the program runs without being stuck, but there functions which use the FONA are causing small issues. While they dont necessarily block the program, when the functions are triggered it freezes all other functions until the 30 seconds have passed. is there a way to modify the code to where if the SIM7000 is not found, the ESP32 will not do the functions that depend on the SIM7000? I'm thinking something like
if fona is not found, dont do this
/***************************SMS ALERTS***************************************************/
if (buttonState == HIGH && lastButtonState == LOW || vol > 3100 && vol - flowMilliLitres <= 3100) {
opened = false;
ThresholdLimit = true;
lastButtonState = buttonState;
FullSMS ();
pumpOff();
lcd.setCursor(0, 0);
lcd.print("FULL ");
}
if (tempF < tLimit && cold == false) {
ColdSMS ();
cold = true;
}
else if (tempF > tLimit + 2.0 && cold == true) {
cold = false;
}
if (percent < bLimit && bat == false) {
batSMS ();
bat = true;
}
/***************************SMS ALERTS END***************************************************/
/**************************** DATA POST TO DWEET *********************************************/
if (millis() - counter > samplingRate) {
PostData ();
counter = millis ();
}
}
please advise
from sim7000-lte-shield.
Related Issues (20)
- Dweet.io not displaying the content that I am sending HOT 2
- has anyone used sim7070g ? HOT 1
- Lilygo ESP32 board with SIM7000G - Core 1 panic'ed HOT 1
- Sim7000 HTTPS HOT 3
- Can change IMEI numbers. HOT 2
- Json Formatting issue sending over http post request
- MQTT dosent publish corektly
- latest botletics sim7000 demo compilation/ uno/mega esp32 boards i guess its only hours old !!!!! HOT 2
- AT+SMSTATUS and SMCONF throws ERROR- SIM7000C MQTT
- SIM7070G Firmware updates and changelogs
- SIM7070G AT+SHCONN problem HOT 1
- "Download Failed!,Partition diff!" Error Updating to 1351B04SIM7000A_20200824
- SIM7000G DTR crash
- Couldn't find fona HOT 2
- MQTT stops working after 12 days or so
- HTTP-601 - Arduino Nano HOT 4
- HTTPS AT+SHCONN Issue (SIM7000A with ESP32-S2) HOT 1
- SIM7000E new firmware 1351B09SIM7000E.zip
- Amazon AWS MQTTs Connection Issue HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from sim7000-lte-shield.