Merge pull request #287 from EnviroDIY/master
Fix the damage I did to SIM800
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -16,6 +16,7 @@
|
||||
.settings
|
||||
.pioenvs
|
||||
.piolibdeps
|
||||
.pio/*
|
||||
.clang_complete
|
||||
.gcc-flags.json
|
||||
platformio.ini
|
||||
|
@@ -28,6 +28,16 @@
|
||||
// #define TINY_GSM_MODEM_XBEE
|
||||
// #define TINY_GSM_MODEM_SEQUANS_MONARCH
|
||||
|
||||
// See all AT commands, if wanted
|
||||
// #define DUMP_AT_COMMANDS
|
||||
|
||||
// Define the serial console for debug prints, if needed
|
||||
#define TINY_GSM_DEBUG SerialMon
|
||||
|
||||
// Range to attempt to autobaud
|
||||
#define GSM_AUTOBAUD_MIN 9600
|
||||
#define GSM_AUTOBAUD_MAX 38400
|
||||
|
||||
// Set serial for debug console (to the Serial Monitor, default speed 115200)
|
||||
#define SerialMon Serial
|
||||
|
||||
@@ -39,24 +49,15 @@
|
||||
//#include <SoftwareSerial.h>
|
||||
//SoftwareSerial SerialAT(2, 3); // RX, TX
|
||||
|
||||
// See all AT commands, if wanted
|
||||
//#define DUMP_AT_COMMANDS
|
||||
|
||||
// See the debugging, if wanted
|
||||
#define TINY_GSM_DEBUG SerialMon
|
||||
|
||||
// Range to attempt to autobaud
|
||||
#define GSM_AUTOBAUD_MIN 9600
|
||||
#define GSM_AUTOBAUD_MAX 38400
|
||||
|
||||
/*
|
||||
* Test enabled
|
||||
*/
|
||||
#define TINY_GSM_USE_GPRS true
|
||||
#define TINY_GSM_USE_WIFI false
|
||||
#define TINY_GSM_USE_CALL true
|
||||
#define TINY_GSM_USE_SMS true
|
||||
#define TINY_GSM_USE_USSD true
|
||||
#define TINY_GSM_TEST_GPRS true
|
||||
#define TINY_GSM_TEST_WIFI false
|
||||
#define TINY_GSM_TEST_CALL true
|
||||
#define TINY_GSM_TEST_SMS true
|
||||
#define TINY_GSM_TEST_USSD true
|
||||
#define TINY_GSM_TEST_BATTERY true
|
||||
// powerdown modem after tests
|
||||
#define TINY_GSM_POWERDOWN false
|
||||
|
||||
@@ -70,10 +71,10 @@
|
||||
// Your GPRS credentials
|
||||
// Leave empty, if missing user or pass
|
||||
const char apn[] = "YourAPN";
|
||||
const char user[] = "";
|
||||
const char pass[] = "";
|
||||
const char gprsUser[] = "";
|
||||
const char gprsPass[] = "";
|
||||
const char wifiSSID[] = "YourSSID";
|
||||
const char wifiPass[] = "SSIDpw";
|
||||
const char wifiPass[] = "YourWiFiPass";
|
||||
|
||||
#include <TinyGsmClient.h>
|
||||
|
||||
@@ -98,11 +99,11 @@ void setup() {
|
||||
digitalWrite(23, HIGH);
|
||||
|
||||
DBG("Wait...");
|
||||
delay(3000);
|
||||
|
||||
// Set GSM module baud rate
|
||||
TinyGsmAutoBaud(SerialAT,GSM_AUTOBAUD_MIN,GSM_AUTOBAUD_MAX);
|
||||
// SerialAT.begin(9600);
|
||||
//SerialAT.begin(9600);
|
||||
delay(3000);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
@@ -120,26 +121,34 @@ void loop() {
|
||||
return;
|
||||
}
|
||||
|
||||
String modemInfo = modem.getModemInfo();
|
||||
DBG("Modem:", modemInfo);
|
||||
String name = modem.getModemName();
|
||||
DBG("Modem Name:", name);
|
||||
|
||||
#if TINY_GSM_USE_GPRS
|
||||
String modemInfo = modem.getModemInfo();
|
||||
DBG("Modem Info:", modemInfo);
|
||||
|
||||
#if TINY_GSM_TEST_GPRS
|
||||
// Unlock your SIM card with a PIN if needed
|
||||
if ( GSM_PIN && modem.getSimStatus() != 3 ) {
|
||||
modem.simUnlock(GSM_PIN);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TINY_GSM_USE_WIFI
|
||||
SerialMon.print(F("Setting SSID/password..."));
|
||||
#if TINY_GSM_TEST_WIFI
|
||||
DBG("Setting SSID/password...");
|
||||
if (!modem.networkConnect(wifiSSID, wifiPass)) {
|
||||
SerialMon.println(" fail");
|
||||
DBG(" fail");
|
||||
delay(10000);
|
||||
return;
|
||||
}
|
||||
SerialMon.println(" OK");
|
||||
#endif
|
||||
|
||||
#if TINY_GSM_TEST_GPRS && defined TINY_GSM_MODEM_XBEE
|
||||
// The XBee must run the gprsConnect function BEFORE waiting for network!
|
||||
modem.gprsConnect(apn, gprsUser, gprsPass);
|
||||
#endif
|
||||
|
||||
DBG("Waiting for network...");
|
||||
if (!modem.waitForNetwork()) {
|
||||
delay(10000);
|
||||
@@ -150,9 +159,9 @@ void loop() {
|
||||
DBG("Network connected");
|
||||
}
|
||||
|
||||
#if TINY_GSM_USE_GPRS
|
||||
#if TINY_GSM_TEST_GPRS
|
||||
DBG("Connecting to", apn);
|
||||
if (!modem.gprsConnect(apn, user, pass)) {
|
||||
if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {
|
||||
delay(10000);
|
||||
return;
|
||||
}
|
||||
@@ -175,17 +184,9 @@ void loop() {
|
||||
int csq = modem.getSignalQuality();
|
||||
DBG("Signal quality:", csq);
|
||||
|
||||
// This is NOT supported on M590
|
||||
int battLevel = modem.getBattPercent();
|
||||
DBG("Battery lavel:", battLevel);
|
||||
|
||||
// This is only supported on SIMxxx series
|
||||
float battVoltage = modem.getBattVoltage() / 1000.0F;
|
||||
DBG("Battery voltage:", battVoltage);
|
||||
|
||||
// This is only supported on SIMxxx series
|
||||
String gsmLoc = modem.getGsmLocation();
|
||||
DBG("GSM location:", gsmLoc);
|
||||
// String gsmLoc = modem.getGsmLocation();
|
||||
// DBG("GSM location:", gsmLoc);
|
||||
|
||||
// This is only supported on SIMxxx series
|
||||
// String gsmTime = modem.getGSMDateTime(DATE_TIME);
|
||||
@@ -207,7 +208,7 @@ void loop() {
|
||||
DBG("GPS raw data:", gps_raw);
|
||||
#endif
|
||||
|
||||
#if TINY_GSM_USE_SMS && defined(SMS_TARGET)
|
||||
#if TINY_GSM_TEST_SMS && defined(SMS_TARGET)
|
||||
res = modem.sendSMS(SMS_TARGET, String("Hello from ") + imei);
|
||||
DBG("SMS:", res ? "OK" : "fail");
|
||||
|
||||
@@ -216,7 +217,7 @@ void loop() {
|
||||
DBG("UTF16 SMS:", res ? "OK" : "fail");
|
||||
#endif
|
||||
|
||||
#if TINY_GSM_USE_CALL && defined(CALL_TARGET)
|
||||
#if TINY_GSM_TEST_CALL && defined(CALL_TARGET)
|
||||
DBG("Calling:", CALL_TARGET);
|
||||
|
||||
// This is NOT supported on M590
|
||||
@@ -241,7 +242,20 @@ void loop() {
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TINY_GSM_USE_GPRS
|
||||
#if TINY_GSM_TEST_BATTERY
|
||||
uint8_t chargeState = -99;
|
||||
int8_t percent = -99;
|
||||
uint16_t milliVolts = -9999;
|
||||
modem.getBattStats(chargeState, percent, milliVolts)
|
||||
DBG("Battery charge state:", chargeState);
|
||||
DBG("Battery charge 'percent':", percent);
|
||||
DBG("Battery voltage:", milliVolts / 1000.0F);
|
||||
|
||||
float temp = modem.getTemperature();
|
||||
DBG("Chip temperature:", temp);
|
||||
#endif
|
||||
|
||||
#if TINY_GSM_TEST_GPRS
|
||||
modem.gprsDisconnect();
|
||||
if (!modem.isGprsConnected()) {
|
||||
DBG("GPRS disconnected");
|
||||
@@ -250,7 +264,7 @@ void loop() {
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TINY_GSM_USE_WIFI
|
||||
#if TINY_GSM_TEST_WIFI
|
||||
modem.networkDisconnect();
|
||||
DBG("WiFi disconnected");
|
||||
#endif
|
||||
|
@@ -48,7 +48,7 @@
|
||||
// #define TINY_GSM_MODEM_SEQUANS_MONARCH
|
||||
|
||||
#include <TinyGsmClient.h>
|
||||
#include <BlynkSimpleSIM800.h>
|
||||
#include <BlynkSimpleTinyGSM.h>
|
||||
|
||||
// Set serial for debug console (to the Serial Monitor, default speed 115200)
|
||||
#define SerialMon Serial
|
||||
|
@@ -12,9 +12,10 @@
|
||||
*
|
||||
* For more HTTP API examples, see ArduinoHttpClient library
|
||||
*
|
||||
* NOTE: This example does NOT work with the XBee because the
|
||||
* NOTE: This example may NOT work with the XBee because the
|
||||
* HttpClient library does not empty to serial buffer fast enough
|
||||
* and the buffer overflow causes the HttpClient library to stall.
|
||||
* Boards with faster processors may work, 8MHz boards will not.
|
||||
**************************************************************/
|
||||
|
||||
// Select your modem:
|
||||
@@ -45,16 +46,13 @@
|
||||
// See all AT commands, if wanted
|
||||
//#define DUMP_AT_COMMANDS
|
||||
|
||||
// See the debugging, if wanted
|
||||
// Define the serial console for debug prints, if needed
|
||||
//#define TINY_GSM_DEBUG Serial
|
||||
//#define LOGGING
|
||||
//#define LOGGING // <- Logging is for the HTTP library
|
||||
|
||||
// Add a reception delay, if needed
|
||||
//#define TINY_GSM_YIELD() { delay(1); }
|
||||
|
||||
#include <TinyGsmClient.h>
|
||||
#include <ArduinoHttpClient.h>
|
||||
|
||||
// Set serial for debug console (to the Serial Monitor, default speed 115200)
|
||||
#define SerialMon Serial
|
||||
|
||||
@@ -85,6 +83,9 @@ const char server[] = "vsh.pp.ua";
|
||||
const char resource[] = "/TinyGSM/logo.txt";
|
||||
const int port = 80;
|
||||
|
||||
#include <TinyGsmClient.h>
|
||||
#include <ArduinoHttpClient.h>
|
||||
|
||||
#ifdef DUMP_AT_COMMANDS
|
||||
#include <StreamDebugger.h>
|
||||
StreamDebugger debugger(SerialAT, SerialMon);
|
||||
@@ -118,6 +119,7 @@ void setup() {
|
||||
// To skip it, call init() instead of restart()
|
||||
SerialMon.println("Initializing modem...");
|
||||
modem.restart();
|
||||
// modem.init();
|
||||
|
||||
String modemInfo = modem.getModemInfo();
|
||||
SerialMon.print("Modem: ");
|
||||
@@ -129,7 +131,7 @@ void setup() {
|
||||
|
||||
void loop() {
|
||||
|
||||
#if TINY_GSM_USE_WIFI
|
||||
#if defined TINY_GSM_USE_WIFI && defined TINY_GSM_MODEM_HAS_WIFI
|
||||
SerialMon.print(F("Setting SSID/password..."));
|
||||
if (!modem.networkConnect(wifiSSID, wifiPass)) {
|
||||
SerialMon.println(" fail");
|
||||
@@ -139,6 +141,11 @@ void loop() {
|
||||
SerialMon.println(" OK");
|
||||
#endif
|
||||
|
||||
#if TINY_GSM_USE_GPRS && defined TINY_GSM_MODEM_XBEE
|
||||
// The XBee must run the gprsConnect function BEFORE waiting for network!
|
||||
modem.gprsConnect(apn, gprsUser, gprsPass);
|
||||
#endif
|
||||
|
||||
SerialMon.print("Waiting for network...");
|
||||
if (!modem.waitForNetwork()) {
|
||||
SerialMon.println(" fail");
|
||||
@@ -148,10 +155,10 @@ void loop() {
|
||||
SerialMon.println(" OK");
|
||||
|
||||
if (modem.isNetworkConnected()) {
|
||||
SerialMon.print("Network connected");
|
||||
SerialMon.println("Network connected");
|
||||
}
|
||||
|
||||
#if TINY_GSM_USE_GPRS
|
||||
#if TINY_GSM_USE_GPRS && defined TINY_GSM_MODEM_HAS_GPRS
|
||||
SerialMon.print(F("Connecting to "));
|
||||
SerialMon.print(apn);
|
||||
if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {
|
||||
|
@@ -10,22 +10,30 @@
|
||||
* TinyGSM Getting Started guide:
|
||||
* https://tiny.cc/tinygsm-readme
|
||||
*
|
||||
* SSL/TLS is currently supported only with: SIM8xx, uBlox, ESP8266
|
||||
* SSL/TLS is not yet supported on the Quectel modems
|
||||
* The A6/A7/A20 and M590 are not capable of SSL/TLS
|
||||
*
|
||||
* For more HTTP API examples, see ArduinoHttpClient library
|
||||
*
|
||||
* NOTE: This example may NOT work with the XBee because the
|
||||
* HttpClient library does not empty to serial buffer fast enough
|
||||
* and the buffer overflow causes the HttpClient library to stall.
|
||||
* Boards with faster processors may work, 8MHz boards will not.
|
||||
**************************************************************/
|
||||
|
||||
// Select your modem:
|
||||
#define TINY_GSM_MODEM_SIM800
|
||||
// #define TINY_GSM_MODEM_SIM808
|
||||
// #define TINY_GSM_MODEM_SIM868
|
||||
// #define TINY_GSM_MODEM_SIM7000
|
||||
// #define TINY_GSM_MODEM_UBLOX
|
||||
// #define TINY_GSM_MODEM_SARAR4
|
||||
// #define TINY_GSM_MODEM_ESP8266
|
||||
// #define TINY_GSM_MODEM_XBEE
|
||||
// #define TINY_GSM_MODEM_SEQUANS_MONARCH
|
||||
|
||||
// Increase RX buffer to capture the entire response
|
||||
// Chips without internal buffering (ESP8266)
|
||||
// Chips without internal buffering (A6/A7, ESP8266, M590)
|
||||
// need enough space in the buffer for the entire response
|
||||
// else data will be lost (and the http library will fail).
|
||||
#define TINY_GSM_RX_BUFFER 650
|
||||
@@ -33,16 +41,13 @@
|
||||
// See all AT commands, if wanted
|
||||
//#define DUMP_AT_COMMANDS
|
||||
|
||||
// See the debugging, if wanted
|
||||
// Define the serial console for debug prints, if needed
|
||||
//#define TINY_GSM_DEBUG Serial
|
||||
//#define LOGGING
|
||||
//#define LOGGING // <- Logging is for the HTTP library
|
||||
|
||||
// Add a reception delay, if needed
|
||||
//#define TINY_GSM_YIELD() { delay(1); }
|
||||
|
||||
#include <TinyGsmClient.h>
|
||||
#include <ArduinoHttpClient.h>
|
||||
|
||||
// Set serial for debug console (to the Serial Monitor, default speed 115200)
|
||||
#define SerialMon Serial
|
||||
|
||||
@@ -73,6 +78,9 @@ const char server[] = "vsh.pp.ua";
|
||||
const char resource[] = "/TinyGSM/logo.txt";
|
||||
const int port = 443;
|
||||
|
||||
#include <TinyGsmClient.h>
|
||||
#include <ArduinoHttpClient.h>
|
||||
|
||||
#ifdef DUMP_AT_COMMANDS
|
||||
#include <StreamDebugger.h>
|
||||
StreamDebugger debugger(SerialAT, SerialMon);
|
||||
@@ -106,6 +114,7 @@ void setup() {
|
||||
// To skip it, call init() instead of restart()
|
||||
SerialMon.println("Initializing modem...");
|
||||
modem.restart();
|
||||
// modem.init();
|
||||
|
||||
String modemInfo = modem.getModemInfo();
|
||||
SerialMon.print("Modem: ");
|
||||
@@ -122,7 +131,7 @@ void setup() {
|
||||
|
||||
void loop() {
|
||||
|
||||
#if TINY_GSM_USE_WIFI
|
||||
#if defined TINY_GSM_USE_WIFI && defined TINY_GSM_MODEM_HAS_WIFI
|
||||
SerialMon.print(F("Setting SSID/password..."));
|
||||
if (!modem.networkConnect(wifiSSID, wifiPass)) {
|
||||
SerialMon.println(" fail");
|
||||
@@ -132,6 +141,11 @@ void loop() {
|
||||
SerialMon.println(" OK");
|
||||
#endif
|
||||
|
||||
#if TINY_GSM_USE_GPRS && defined TINY_GSM_MODEM_XBEE
|
||||
// The XBee must run the gprsConnect function BEFORE waiting for network!
|
||||
modem.gprsConnect(apn, gprsUser, gprsPass);
|
||||
#endif
|
||||
|
||||
SerialMon.print("Waiting for network...");
|
||||
if (!modem.waitForNetwork()) {
|
||||
SerialMon.println(" fail");
|
||||
@@ -141,10 +155,10 @@ void loop() {
|
||||
SerialMon.println(" OK");
|
||||
|
||||
if (modem.isNetworkConnected()) {
|
||||
SerialMon.print("Network connected");
|
||||
SerialMon.println("Network connected");
|
||||
}
|
||||
|
||||
#if TINY_GSM_USE_GPRS
|
||||
#if TINY_GSM_USE_GPRS && defined TINY_GSM_MODEM_HAS_GPRS
|
||||
SerialMon.print(F("Connecting to "));
|
||||
SerialMon.print(apn);
|
||||
if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {
|
||||
|
@@ -46,12 +46,23 @@
|
||||
// #define TINY_GSM_MODEM_XBEE
|
||||
// #define TINY_GSM_MODEM_SEQUANS_MONARCH
|
||||
|
||||
#include <TinyGsmClient.h>
|
||||
#include <PubSubClient.h>
|
||||
// See all AT commands, if wanted
|
||||
// #define DUMP_AT_COMMANDS
|
||||
|
||||
// Define the serial console for debug prints, if needed
|
||||
#define TINY_GSM_DEBUG SerialMon
|
||||
|
||||
// Range to attempt to autobaud
|
||||
#define GSM_AUTOBAUD_MIN 9600
|
||||
#define GSM_AUTOBAUD_MAX 38400
|
||||
|
||||
// Add a reception delay, if needed
|
||||
#define TINY_GSM_YIELD() { delay(2); }
|
||||
|
||||
// Set serial for debug console (to the Serial Monitor, default speed 115200)
|
||||
#define SerialMon Serial
|
||||
|
||||
// Set serial for AT commands (to the module)
|
||||
// Use Hardware Serial on Mega, Leonardo, Micro
|
||||
#define SerialAT Serial1
|
||||
|
||||
@@ -73,7 +84,17 @@ const char* topicLed = "GsmClientTest/led";
|
||||
const char* topicInit = "GsmClientTest/init";
|
||||
const char* topicLedStatus = "GsmClientTest/ledStatus";
|
||||
|
||||
#include <TinyGsmClient.h>
|
||||
#include <PubSubClient.h>
|
||||
|
||||
#ifdef DUMP_AT_COMMANDS
|
||||
#include <StreamDebugger.h>
|
||||
StreamDebugger debugger(SerialAT, SerialMon);
|
||||
TinyGsm modem(debugger);
|
||||
#else
|
||||
|
||||
TinyGsm modem(SerialAT);
|
||||
#endif
|
||||
TinyGsmClient client(modem);
|
||||
PubSubClient mqtt(client);
|
||||
|
||||
@@ -83,12 +104,22 @@ int ledStatus = LOW;
|
||||
long lastReconnectAttempt = 0;
|
||||
|
||||
void setup() {
|
||||
pinMode(LED_PIN, OUTPUT);
|
||||
|
||||
// Set console baud rate
|
||||
SerialMon.begin(115200);
|
||||
delay(10);
|
||||
|
||||
// Set your reset, enable, power pins here
|
||||
pinMode(LED_PIN, OUTPUT);
|
||||
|
||||
pinMode(20, OUTPUT);
|
||||
digitalWrite(20, HIGH);
|
||||
|
||||
pinMode(23, OUTPUT);
|
||||
digitalWrite(23, LOW);
|
||||
|
||||
SerialMon.println("Wait...");
|
||||
|
||||
// Set GSM module baud rate
|
||||
SerialAT.begin(115200);
|
||||
delay(3000);
|
||||
@@ -97,6 +128,7 @@ void setup() {
|
||||
// To skip it, call init() instead of restart()
|
||||
SerialMon.println("Initializing modem...");
|
||||
modem.restart();
|
||||
// modem.init();
|
||||
|
||||
String modemInfo = modem.getModemInfo();
|
||||
SerialMon.print("Modem: ");
|
||||
@@ -105,20 +137,43 @@ void setup() {
|
||||
// Unlock your SIM card with a PIN
|
||||
//modem.simUnlock("1234");
|
||||
|
||||
SerialMon.print("Waiting for network...");
|
||||
if (!modem.waitForNetwork()) {
|
||||
#if TINY_GSM_USE_WIFI
|
||||
SerialMon.print(F("Setting SSID/password..."));
|
||||
if (!modem.networkConnect(wifiSSID, wifiPass)) {
|
||||
SerialMon.println(" fail");
|
||||
while (true);
|
||||
delay(10000);
|
||||
return;
|
||||
}
|
||||
SerialMon.println(" OK");
|
||||
#endif
|
||||
|
||||
#if TINY_GSM_USE_GPRS && defined TINY_GSM_MODEM_XBEE
|
||||
// The XBee must run the gprsConnect function BEFORE waiting for network!
|
||||
modem.gprsConnect(apn, gprsUser, gprsPass);
|
||||
#endif
|
||||
|
||||
SerialMon.print("Waiting for network...");
|
||||
if (!modem.waitForNetwork(240000L)) {
|
||||
SerialMon.println(" fail");
|
||||
delay(10000);
|
||||
return;
|
||||
}
|
||||
SerialMon.println(" OK");
|
||||
|
||||
SerialMon.print("Connecting to ");
|
||||
if (modem.isNetworkConnected()) {
|
||||
SerialMon.println("Network connected");
|
||||
}
|
||||
|
||||
#if TINY_GSM_USE_GPRS && defined TINY_GSM_MODEM_HAS_GPRS
|
||||
SerialMon.print(F("Connecting to "));
|
||||
SerialMon.print(apn);
|
||||
if (!modem.gprsConnect(apn, user, pass)) {
|
||||
if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {
|
||||
SerialMon.println(" fail");
|
||||
while (true);
|
||||
delay(10000);
|
||||
return;
|
||||
}
|
||||
SerialMon.println(" OK");
|
||||
#endif
|
||||
|
||||
// MQTT Broker setup
|
||||
mqtt.setServer(broker, 1883);
|
||||
|
@@ -30,6 +30,16 @@
|
||||
// Increase RX buffer if needed
|
||||
// #define TINY_GSM_RX_BUFFER 512
|
||||
|
||||
// See all AT commands, if wanted
|
||||
// #define DUMP_AT_COMMANDS
|
||||
|
||||
// Define the serial console for debug prints, if needed
|
||||
#define TINY_GSM_DEBUG SerialMon
|
||||
|
||||
// Range to attempt to autobaud
|
||||
#define GSM_AUTOBAUD_MIN 9600
|
||||
#define GSM_AUTOBAUD_MAX 115200
|
||||
|
||||
// Add a reception delay, if needed
|
||||
// #define TINY_GSM_YIELD() { delay(1); }
|
||||
|
||||
@@ -47,16 +57,6 @@
|
||||
//#include <SoftwareSerial.h>
|
||||
//SoftwareSerial SerialAT(2, 3); // RX, TX
|
||||
|
||||
// See all AT commands, if wanted
|
||||
//#define DUMP_AT_COMMANDS
|
||||
|
||||
// See the debugging, if wanted
|
||||
// #define TINY_GSM_DEBUG SerialMon
|
||||
|
||||
// Range to attempt to autobaud
|
||||
#define GSM_AUTOBAUD_MIN 9600
|
||||
#define GSM_AUTOBAUD_MAX 38400
|
||||
|
||||
#define TINY_GSM_USE_GPRS true
|
||||
#define TINY_GSM_USE_WIFI false
|
||||
|
||||
@@ -122,8 +122,12 @@ void setup() {
|
||||
SerialMon.print("Modem: ");
|
||||
SerialMon.println(modemInfo);
|
||||
|
||||
// Unlock your SIM card with a PIN
|
||||
//modem.simUnlock("1234");
|
||||
#if TINY_GSM_USE_GPRS
|
||||
// Unlock your SIM card with a PIN if needed
|
||||
if ( GSM_PIN && modem.getSimStatus() != 3 ) {
|
||||
modem.simUnlock(GSM_PIN);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void loop() {
|
||||
@@ -138,6 +142,11 @@ void loop() {
|
||||
SerialMon.println(" OK");
|
||||
#endif
|
||||
|
||||
#if TINY_GSM_USE_GPRS && defined TINY_GSM_MODEM_XBEE
|
||||
// The XBee must run the gprsConnect function BEFORE waiting for network!
|
||||
modem.gprsConnect(apn, gprsUser, gprsPass);
|
||||
#endif
|
||||
|
||||
SerialMon.print("Waiting for network...");
|
||||
if (!modem.waitForNetwork(240000L)) {
|
||||
SerialMon.println(" fail");
|
||||
@@ -150,9 +159,9 @@ void loop() {
|
||||
SerialMon.println("Network connected");
|
||||
}
|
||||
|
||||
#if TINY_GSM_USE_GPRS
|
||||
#if TINY_GSM_USE_GPRS && defined TINY_GSM_MODEM_HAS_GPRS
|
||||
SerialMon.print(F("Connecting to "));
|
||||
SerialMon.println(apn);
|
||||
SerialMon.print(apn);
|
||||
if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {
|
||||
SerialMon.println(" fail");
|
||||
delay(10000);
|
||||
@@ -172,9 +181,10 @@ void loop() {
|
||||
|
||||
// Make a HTTP GET request:
|
||||
SerialMon.println("Performing HTTP GET request...");
|
||||
client.print(String("GET ") + resource + " HTTP/1.0\r\n");
|
||||
client.print(String("GET ") + resource + " HTTP/1.1\r\n");
|
||||
client.print(String("Host: ") + server + "\r\n");
|
||||
client.print("Connection: close\r\n\r\n");
|
||||
client.println();
|
||||
|
||||
unsigned long timeout = millis();
|
||||
while (client.connected() && millis() - timeout < 10000L) {
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "TinyGSM",
|
||||
"version": "0.7.4",
|
||||
"version": "0.7.7",
|
||||
"description": "A small Arduino library for GPRS modules, that just works. Includes examples for Blynk, MQTT, File Download, and Web Client. Supports many GSM, LTE, and WiFi modules with AT command interfaces.",
|
||||
"keywords": "GSM, AT commands, AT, SIM800, SIM900, A6, A7, M590, ESP8266, SIM7000, SIM800A, SIM800C, SIM800L, SIM800H, SIM808, SIM868, SIM900A, SIM900D, SIM908, SIM968, M95, MC60, MC60E, BG96, ublox, Quectel, SIMCOM, AI Thinker, LTE, LTE-M",
|
||||
"authors":
|
||||
|
@@ -1,5 +1,5 @@
|
||||
name=TinyGSM
|
||||
version=0.7.4
|
||||
version=0.7.7
|
||||
author=Volodymyr Shymanskyy
|
||||
maintainer=Volodymyr Shymanskyy
|
||||
sentence=A small Arduino library for GPRS modules, that just works.
|
||||
|
@@ -62,6 +62,7 @@ public:
|
||||
this->at = modem;
|
||||
this->mux = mux;
|
||||
sock_available = 0;
|
||||
prev_check = 0;
|
||||
sock_connected = false;
|
||||
got_data = false;
|
||||
|
||||
@@ -102,9 +103,9 @@ TINY_GSM_CLIENT_CONNECT_OVERLOADS()
|
||||
|
||||
TINY_GSM_CLIENT_WRITE()
|
||||
|
||||
TINY_GSM_CLIENT_AVAILABLE_NO_BUFFER_CHECK()
|
||||
TINY_GSM_CLIENT_AVAILABLE_WITH_BUFFER_CHECK()
|
||||
|
||||
TINY_GSM_CLIENT_READ_NO_BUFFER_CHECK()
|
||||
TINY_GSM_CLIENT_READ_WITH_BUFFER_CHECK()
|
||||
|
||||
TINY_GSM_CLIENT_PEEK_FLUSH_CONNECTED()
|
||||
|
||||
@@ -115,9 +116,10 @@ TINY_GSM_CLIENT_PEEK_FLUSH_CONNECTED()
|
||||
String remoteIP() TINY_GSM_ATTR_NOT_IMPLEMENTED;
|
||||
|
||||
private:
|
||||
TinyGsmBG96* at;
|
||||
TinyGsmBG96* at;
|
||||
uint8_t mux;
|
||||
uint16_t sock_available;
|
||||
uint32_t prev_check;
|
||||
bool sock_connected;
|
||||
bool got_data;
|
||||
RxFifo rx;
|
||||
@@ -544,7 +546,6 @@ protected:
|
||||
return 0;
|
||||
}
|
||||
size_t len = stream.readStringUntil('\n').toInt();
|
||||
sockets[mux]->sock_available = len;
|
||||
|
||||
for (size_t i=0; i<len; i++) {
|
||||
TINY_GSM_MODEM_STREAM_TO_MUX_FIFO_WITH_DOUBLE_TIMEOUT
|
||||
|
@@ -186,7 +186,7 @@ TINY_GSM_MODEM_SET_BAUD_IPR()
|
||||
|
||||
TINY_GSM_MODEM_TEST_AT()
|
||||
|
||||
TINY_GSM_MODEM_MAINTAIN_CHECK_SOCKS()
|
||||
TINY_GSM_MODEM_MAINTAIN_LISTEN()
|
||||
|
||||
bool factoryDefault() {
|
||||
sendAT(GF("&FZE0&W")); // Factory + Reset + Echo Off + Write
|
||||
@@ -606,37 +606,33 @@ protected:
|
||||
}
|
||||
|
||||
size_t modemRead(size_t size, uint8_t mux) {
|
||||
sendAT(GF("+QIRD="), mux, ',', size);
|
||||
// TODO: Does this work????
|
||||
// AT+QIRD=<id>,<sc>,<sid>,<len>
|
||||
// id = GPRS context number - 0, set in GPRS connect
|
||||
// sc = roll in connection - 1, client of connection
|
||||
// sid = index of connection - mux
|
||||
// len = maximum length of data to send
|
||||
sendAT(GF("+QIRD=0,1,"), mux, ',', size);
|
||||
// sendAT(GF("+QIRD="), mux, ',', size);
|
||||
if (waitResponse(GF("+QIRD:")) != 1) {
|
||||
return 0;
|
||||
}
|
||||
size_t len = stream.readStringUntil('\n').toInt();
|
||||
streamSkipUntil(':'); // skip IP address
|
||||
streamSkipUntil(','); // skip port
|
||||
streamSkipUntil(','); // skip connection type (TCP/UDP)
|
||||
size_t len = stream.readStringUntil('\n').toInt(); // read length
|
||||
sockets[mux]->sock_available = len;
|
||||
|
||||
for (size_t i=0; i<len; i++) {
|
||||
TINY_GSM_MODEM_STREAM_TO_MUX_FIFO_WITH_DOUBLE_TIMEOUT
|
||||
sockets[mux]->sock_available--;
|
||||
// ^^ One less character available after moving from modem's FIFO to our FIFO
|
||||
}
|
||||
waitResponse();
|
||||
waitResponse(); // ends with an OK
|
||||
DBG("### READ:", len, "from", mux);
|
||||
return len;
|
||||
}
|
||||
|
||||
size_t modemGetAvailable(uint8_t mux) {
|
||||
sendAT(GF("+QIRD="), mux, GF(",0"));
|
||||
size_t result = 0;
|
||||
if (waitResponse(GF("+QIRD:")) == 1) {
|
||||
streamSkipUntil(','); // Skip total received
|
||||
streamSkipUntil(','); // Skip have read
|
||||
result = stream.readStringUntil('\n').toInt();
|
||||
if (result) DBG("### DATA AVAILABLE:", result, "on", mux);
|
||||
waitResponse();
|
||||
}
|
||||
if (!result) {
|
||||
sockets[mux]->sock_connected = modemGetConnected(mux);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
bool modemGetConnected(uint8_t mux) {
|
||||
sendAT(GF("+QISTATE=1,"), mux);
|
||||
//+QISTATE: 0,"TCP","151.139.237.11",80,5087,4,1,0,0,"uart1"
|
||||
@@ -700,7 +696,7 @@ TINY_GSM_MODEM_STREAM_UTILITIES()
|
||||
} else if (r5 && data.endsWith(r5)) {
|
||||
index = 5;
|
||||
goto finish;
|
||||
} else if (data.endsWith(GF(GSM_NL "+QIRD:"))) {
|
||||
} else if (data.endsWith(GF(GSM_NL "+QIRD:"))) { // TODO: QIRD? or QIRDI?
|
||||
streamSkipUntil(','); // Skip the context
|
||||
streamSkipUntil(','); // Skip the role
|
||||
int mux = stream.readStringUntil('\n').toInt();
|
||||
|
@@ -193,7 +193,7 @@ TINY_GSM_MODEM_SET_BAUD_IPR()
|
||||
|
||||
TINY_GSM_MODEM_TEST_AT()
|
||||
|
||||
TINY_GSM_MODEM_MAINTAIN_CHECK_SOCKS()
|
||||
TINY_GSM_MODEM_MAINTAIN_LISTEN()
|
||||
|
||||
bool factoryDefault() {
|
||||
sendAT(GF("&FZE0&W")); // Factory + Reset + Echo Off + Write
|
||||
@@ -613,37 +613,33 @@ protected:
|
||||
}
|
||||
|
||||
size_t modemRead(size_t size, uint8_t mux) {
|
||||
sendAT(GF("+QIRD="), mux, ',', size);
|
||||
// TODO: Does this work????
|
||||
// AT+QIRD=<id>,<sc>,<sid>,<len>
|
||||
// id = GPRS context number - 0, set in GPRS connect
|
||||
// sc = roll in connection - 1, client of connection
|
||||
// sid = index of connection - mux
|
||||
// len = maximum length of data to send
|
||||
sendAT(GF("+QIRD=0,1,"), mux, ',', size);
|
||||
// sendAT(GF("+QIRD="), mux, ',', size);
|
||||
if (waitResponse(GF("+QIRD:")) != 1) {
|
||||
return 0;
|
||||
}
|
||||
size_t len = stream.readStringUntil('\n').toInt();
|
||||
streamSkipUntil(':'); // skip IP address
|
||||
streamSkipUntil(','); // skip port
|
||||
streamSkipUntil(','); // skip connection type (TCP/UDP)
|
||||
size_t len = stream.readStringUntil('\n').toInt(); // read length
|
||||
sockets[mux]->sock_available = len;
|
||||
|
||||
for (size_t i=0; i<len; i++) {
|
||||
TINY_GSM_MODEM_STREAM_TO_MUX_FIFO_WITH_DOUBLE_TIMEOUT
|
||||
sockets[mux]->sock_available--;
|
||||
// ^^ One less character available after moving from modem's FIFO to our FIFO
|
||||
}
|
||||
waitResponse();
|
||||
DBG("### READ:", len, "from", mux);
|
||||
return len;
|
||||
}
|
||||
|
||||
size_t modemGetAvailable(uint8_t mux) {
|
||||
sendAT(GF("+QIRD="), mux, GF(",0"));
|
||||
size_t result = 0;
|
||||
if (waitResponse(GF("+QIRD:")) == 1) {
|
||||
streamSkipUntil(','); // Skip total received
|
||||
streamSkipUntil(','); // Skip have read
|
||||
result = stream.readStringUntil('\n').toInt();
|
||||
if (result) DBG("### DATA AVAILABLE:", result, "on", mux);
|
||||
waitResponse();
|
||||
}
|
||||
if (!result) {
|
||||
sockets[mux]->sock_connected = modemGetConnected(mux);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
bool modemGetConnected(uint8_t mux) {
|
||||
sendAT(GF("+QISTATE=1,"), mux);
|
||||
//+QISTATE: 0,"TCP","151.139.237.11",80,5087,4,1,0,0,"uart1"
|
||||
@@ -711,7 +707,7 @@ TINY_GSM_MODEM_STREAM_UTILITIES()
|
||||
} else if (r6 && data.endsWith(r6)) {
|
||||
index = 6;
|
||||
goto finish;
|
||||
} else if (data.endsWith(GF(GSM_NL "+QIRD:"))) {
|
||||
} else if (data.endsWith(GF(GSM_NL "+QIRD:"))) { // TODO: QIRD? or QIRDI?
|
||||
streamSkipUntil(','); // Skip the context
|
||||
streamSkipUntil(','); // Skip the role
|
||||
int mux = stream.readStringUntil('\n').toInt();
|
||||
|
@@ -481,7 +481,6 @@ TINY_GSM_MODEM_WAIT_FOR_NETWORK()
|
||||
return TinyGsmIpFromString(getLocalIP());
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Phone Call functions
|
||||
*/
|
||||
@@ -726,7 +725,7 @@ TINY_GSM_MODEM_WAIT_FOR_NETWORK()
|
||||
}
|
||||
|
||||
/*
|
||||
* Battery functions
|
||||
* Battery & temperature functions
|
||||
*/
|
||||
|
||||
// Use: float vBatt = modem.getBattVoltage() / 1000.0;
|
||||
@@ -739,6 +738,7 @@ TINY_GSM_MODEM_WAIT_FOR_NETWORK()
|
||||
streamSkipUntil(','); // Skip battery charge level
|
||||
// return voltage in mV
|
||||
uint16_t res = stream.readStringUntil(',').toInt();
|
||||
// Wait for final OK
|
||||
waitResponse();
|
||||
return res;
|
||||
}
|
||||
@@ -751,6 +751,7 @@ TINY_GSM_MODEM_WAIT_FOR_NETWORK()
|
||||
streamSkipUntil(','); // Skip battery charge status
|
||||
// Read battery charge level
|
||||
int res = stream.readStringUntil(',').toInt();
|
||||
// Wait for final OK
|
||||
waitResponse();
|
||||
return res;
|
||||
}
|
||||
@@ -835,14 +836,10 @@ protected:
|
||||
size_t len_requested = stream.readStringUntil(',').toInt();
|
||||
// ^^ Requested number of data bytes (1-1460 bytes)to be read
|
||||
size_t len_confirmed = stream.readStringUntil('\n').toInt();
|
||||
if (len_confirmed < len_requested) {
|
||||
DBG(len_requested - len_confirmed, "fewer bytes confirmed than requested!");
|
||||
}
|
||||
sockets[mux]->sock_available = len_confirmed;
|
||||
// ^^ Confirmed number of data bytes to be read, which may be less than requested.
|
||||
// 0 indicates that no data can be read.
|
||||
|
||||
for (size_t i=0; i<TinyGsmMin(len_confirmed, len_requested) ; i++) {
|
||||
// This is actually be the number of bytes that will be remaining after the read
|
||||
for (size_t i=0; i<len_requested; i++) {
|
||||
uint32_t startMillis = millis();
|
||||
#ifdef TINY_GSM_USE_HEX
|
||||
while (stream.available() < 2 && (millis() - startMillis < sockets[mux]->_timeout)) { TINY_GSM_YIELD(); }
|
||||
@@ -856,9 +853,11 @@ protected:
|
||||
#endif
|
||||
sockets[mux]->rx.put(c);
|
||||
}
|
||||
DBG("### READ:", len_requested, "from", mux);
|
||||
// sockets[mux]->sock_available = modemGetAvailable(mux);
|
||||
sockets[mux]->sock_available = len_confirmed;
|
||||
waitResponse();
|
||||
DBG("### READ:", TinyGsmMin(len_confirmed, len_requested), "from", mux);
|
||||
return TinyGsmMin(len_confirmed, len_requested);
|
||||
return len_requested;
|
||||
}
|
||||
|
||||
size_t modemGetAvailable(uint8_t mux) {
|
||||
@@ -870,6 +869,7 @@ protected:
|
||||
result = stream.readStringUntil('\n').toInt();
|
||||
waitResponse();
|
||||
}
|
||||
DBG("### Available:", result, "on", mux);
|
||||
if (!result) {
|
||||
sockets[mux]->sock_connected = modemGetConnected(mux);
|
||||
}
|
||||
|
@@ -308,7 +308,7 @@ TINY_GSM_MODEM_GET_IMEI_GSN()
|
||||
delay(1000);
|
||||
continue;
|
||||
}
|
||||
int status = waitResponse(GF("READY"), GF("SIM PIN"), GF("SIM PUK"), GF("NOT INSERTED"));
|
||||
int status = waitResponse(GF("READY"), GF("SIM PIN"), GF("SIM PUK"), GF("NOT INSERTED"), GF("NOT READY"));
|
||||
waitResponse();
|
||||
switch (status) {
|
||||
case 2:
|
||||
@@ -459,7 +459,6 @@ TINY_GSM_MODEM_WAIT_FOR_NETWORK()
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* IP Address functions
|
||||
*/
|
||||
@@ -765,14 +764,10 @@ protected:
|
||||
size_t len_requested = stream.readStringUntil(',').toInt();
|
||||
// ^^ Requested number of data bytes (1-1460 bytes)to be read
|
||||
size_t len_confirmed = stream.readStringUntil('\n').toInt();
|
||||
if (len_confirmed < len_requested) {
|
||||
DBG(len_requested - len_confirmed, "fewer bytes confirmed than requested!");
|
||||
}
|
||||
sockets[mux]->sock_available = len_confirmed;
|
||||
// ^^ Confirmed number of data bytes to be read, which may be less than requested.
|
||||
// 0 indicates that no data can be read.
|
||||
|
||||
for (size_t i=0; i<TinyGsmMin(len_confirmed, len_requested) ; i++) {
|
||||
// This is actually be the number of bytes that will be remaining after the read
|
||||
for (size_t i=0; i<len_requested; i++) {
|
||||
uint32_t startMillis = millis();
|
||||
#ifdef TINY_GSM_USE_HEX
|
||||
while (stream.available() < 2 && (millis() - startMillis < sockets[mux]->_timeout)) { TINY_GSM_YIELD(); }
|
||||
@@ -786,9 +781,11 @@ protected:
|
||||
#endif
|
||||
sockets[mux]->rx.put(c);
|
||||
}
|
||||
DBG("### READ:", len_requested, "from", mux);
|
||||
// sockets[mux]->sock_available = modemGetAvailable(mux);
|
||||
sockets[mux]->sock_available = len_confirmed;
|
||||
waitResponse();
|
||||
DBG("### READ:", TinyGsmMin(len_confirmed, len_requested), "from", mux);
|
||||
return TinyGsmMin(len_confirmed, len_requested);
|
||||
return len_requested;
|
||||
}
|
||||
|
||||
size_t modemGetAvailable(uint8_t mux) {
|
||||
@@ -800,6 +797,7 @@ protected:
|
||||
result = stream.readStringUntil('\n').toInt();
|
||||
waitResponse();
|
||||
}
|
||||
DBG("### Available:", result, "on", mux);
|
||||
if (!result) {
|
||||
sockets[mux]->sock_connected = modemGetConnected(mux);
|
||||
}
|
||||
@@ -808,7 +806,9 @@ protected:
|
||||
|
||||
bool modemGetConnected(uint8_t mux) {
|
||||
sendAT(GF("+CIPSTATUS="), mux);
|
||||
int res = waitResponse(GF(",\"CONNECTED\""), GF(",\"CLOSED\""), GF(",\"CLOSING\""), GF(",\"INITIAL\""));
|
||||
waitResponse(GF("+CIPSTATUS"));
|
||||
int res = waitResponse(GF(",\"CONNECTED\""), GF(",\"CLOSED\""), GF(",\"CLOSING\""),
|
||||
GF(",\"REMOTE CLOSING\""), GF(",\"INITIAL\""));
|
||||
waitResponse();
|
||||
return 1 == res;
|
||||
}
|
||||
|
@@ -605,7 +605,6 @@ protected:
|
||||
}
|
||||
streamSkipUntil(','); // Skip mux
|
||||
size_t len = stream.readStringUntil(',').toInt();
|
||||
sockets[mux]->sock_available = len;
|
||||
streamSkipUntil('\"');
|
||||
|
||||
for (size_t i=0; i<len; i++) {
|
||||
|
@@ -622,9 +622,9 @@ protected:
|
||||
char c = stream.read(); \
|
||||
sockets[mux % TINY_GSM_MUX_COUNT]->rx.put(c);
|
||||
}
|
||||
// DBG("### Read:", len, "from", mux);
|
||||
DBG("### Read:", len, "from", mux);
|
||||
waitResponse();
|
||||
sockets[mux % TINY_GSM_MUX_COUNT]->sock_available = modemGetAvailable(mux);
|
||||
// sockets[mux % TINY_GSM_MUX_COUNT]->sock_available = modemGetAvailable(mux);
|
||||
return len;
|
||||
}
|
||||
|
||||
@@ -638,7 +638,7 @@ protected:
|
||||
result = stream.readStringUntil(',').toInt(); // keep data not yet read
|
||||
waitResponse();
|
||||
}
|
||||
// DBG("### Available:", result, "on", mux);
|
||||
DBG("### Available:", result, "on", mux);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@@ -593,7 +593,6 @@ protected:
|
||||
}
|
||||
streamSkipUntil(','); // Skip mux
|
||||
size_t len = stream.readStringUntil(',').toInt();
|
||||
sockets[mux]->sock_available = len;
|
||||
streamSkipUntil('\"');
|
||||
|
||||
for (size_t i=0; i<len; i++) {
|
||||
|
@@ -109,7 +109,7 @@ public:
|
||||
virtual int connect(IPAddress ip, uint16_t port, int timeout_s) {
|
||||
// NOTE: Not caling stop() or yeild() here
|
||||
at->streamClear(); // Empty anything in the buffer before starting
|
||||
sock_connected = at->modemConnect(ip, port, mux, timeout_s);
|
||||
sock_connected = at->modemConnect(ip, port, mux, false, timeout_s);
|
||||
return sock_connected;
|
||||
}
|
||||
virtual int connect(IPAddress ip, uint16_t port) {
|
||||
@@ -247,7 +247,7 @@ public:
|
||||
virtual int connect(IPAddress ip, uint16_t port, int timeout_s) {
|
||||
// NOTE: Not caling stop() or yeild() here
|
||||
at->streamClear(); // Empty anything in the buffer before starting
|
||||
sock_connected = at->modemConnect(ip, port, mux, timeout_s);
|
||||
sock_connected = at->modemConnect(ip, port, mux, true, timeout_s);
|
||||
return sock_connected;
|
||||
}
|
||||
};
|
||||
|
@@ -10,7 +10,7 @@
|
||||
#define TinyGsmCommon_h
|
||||
|
||||
// The current library version number
|
||||
#define TINYGSM_VERSION "0.7.4"
|
||||
#define TINYGSM_VERSION "0.7.7"
|
||||
|
||||
#if defined(SPARK) || defined(PARTICLE)
|
||||
#include "Particle.h"
|
||||
@@ -100,7 +100,7 @@ uint32_t TinyGsmAutoBaud(T& SerialAT, uint32_t minimum = 9600, uint32_t maximum
|
||||
DBG("Trying baud rate", rate, "...");
|
||||
SerialAT.begin(rate);
|
||||
delay(10);
|
||||
for (int i=0; i<3; i++) {
|
||||
for (int i=0; i<10; i++) {
|
||||
SerialAT.print("AT\r\n");
|
||||
String input = SerialAT.readString();
|
||||
if (input.indexOf("OK") >= 0) {
|
||||
@@ -249,7 +249,7 @@ String TinyGsmDecodeHex16bit(String &instr) {
|
||||
/* Workaround: sometimes module forgets to notify about data arrival.
|
||||
TODO: Currently we ping the module periodically,
|
||||
but maybe there's a better indicator that we need to poll */ \
|
||||
if (millis() - prev_check > 250) { \
|
||||
if (millis() - prev_check > 500) { \
|
||||
got_data = true; \
|
||||
prev_check = millis(); \
|
||||
} \
|
||||
@@ -311,7 +311,7 @@ String TinyGsmDecodeHex16bit(String &instr) {
|
||||
/* Workaround: sometimes module forgets to notify about data arrival.
|
||||
TODO: Currently we ping the module periodically,
|
||||
but maybe there's a better indicator that we need to poll */ \
|
||||
if (millis() - prev_check > 250) { \
|
||||
if (millis() - prev_check > 500) { \
|
||||
got_data = true; \
|
||||
prev_check = millis(); \
|
||||
} \
|
||||
|
@@ -14,7 +14,10 @@
|
||||
// #define TINY_GSM_MODEM_SIM900
|
||||
// #define TINY_GSM_MODEM_SIM808
|
||||
// #define TINY_GSM_MODEM_SIM868
|
||||
// #define TINY_GSM_MODEM_SIM900
|
||||
// #define TINY_GSM_MODEM_SIM7000
|
||||
// #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
|
||||
@@ -24,22 +27,28 @@
|
||||
// #define TINY_GSM_MODEM_MC60E
|
||||
// #define TINY_GSM_MODEM_ESP8266
|
||||
// #define TINY_GSM_MODEM_XBEE
|
||||
// #define TINY_GSM_MODEM_SEQUANS_MONARCH
|
||||
|
||||
// Increase the buffer
|
||||
// Increase RX buffer if needed
|
||||
#define TINY_GSM_RX_BUFFER 512
|
||||
|
||||
// See all AT commands, if wanted
|
||||
#define DUMP_AT_COMMANDS
|
||||
|
||||
// Define the serial console for debug prints, if needed
|
||||
//#define TINY_GSM_DEBUG Serial
|
||||
#define TINY_GSM_DEBUG Serial
|
||||
|
||||
#include <TinyGsmClient.h>
|
||||
// Range to attempt to autobaud
|
||||
#define GSM_AUTOBAUD_MIN 9600
|
||||
#define GSM_AUTOBAUD_MAX 115200
|
||||
|
||||
// Your GPRS credentials
|
||||
// Leave empty, if missing user or pass
|
||||
const char apn[] = "YourAPN";
|
||||
const char user[] = "";
|
||||
const char pass[] = "";
|
||||
// Add a reception delay, if needed
|
||||
#define TINY_GSM_YIELD() { delay(2); }
|
||||
|
||||
// Set serial for debug console (to the Serial Monitor, speed 115200)
|
||||
// Uncomment this if you want to use SSL
|
||||
//#define USE_SSL
|
||||
|
||||
// Set serial for debug console (to the Serial Monitor, default speed 115200)
|
||||
#define SerialMon Serial
|
||||
|
||||
// Set serial for AT commands (to the module)
|
||||
@@ -50,28 +59,59 @@ const char pass[] = "";
|
||||
//#include <SoftwareSerial.h>
|
||||
//SoftwareSerial SerialAT(2, 3); // RX, TX
|
||||
|
||||
#define TINY_GSM_USE_GPRS true
|
||||
#define TINY_GSM_USE_WIFI false
|
||||
|
||||
#include <StreamDebugger.h>
|
||||
StreamDebugger debugger(SerialAT, SerialMon);
|
||||
TinyGsm modem(debugger);
|
||||
// set GSM PIN, if any
|
||||
#define GSM_PIN ""
|
||||
|
||||
// Your GPRS credentials
|
||||
// Leave empty, if missing user or pass
|
||||
const char apn[] = "YourAPN";
|
||||
const char gprsUser[] = "";
|
||||
const char gprsPass[] = "";
|
||||
const char wifiSSID[] = "YourSSID";
|
||||
const char wifiPass[] = "YourWiFiPass";
|
||||
|
||||
// Server details
|
||||
const char server[] = "vsh.pp.ua";
|
||||
const char resource[] = "/TinyGSM/logo.txt";
|
||||
|
||||
const int port = 80;
|
||||
TinyGsmClient client(modem);
|
||||
#include <TinyGsmClient.h>
|
||||
|
||||
// For SSL:
|
||||
//const int port = 443;
|
||||
//TinyGsmClientSecure client(modem);
|
||||
#ifdef DUMP_AT_COMMANDS
|
||||
#include <StreamDebugger.h>
|
||||
StreamDebugger debugger(SerialAT, SerialMon);
|
||||
TinyGsm modem(debugger);
|
||||
#else
|
||||
TinyGsm modem(SerialAT);
|
||||
#endif
|
||||
|
||||
#ifdef USE_SSL
|
||||
TinyGsmClientSecure client(modem);
|
||||
const int port = 443;
|
||||
#else
|
||||
TinyGsmClient client(modem);
|
||||
const int port = 80;
|
||||
#endif
|
||||
|
||||
void setup() {
|
||||
// Set console baud rate
|
||||
SerialMon.begin(115200);
|
||||
delay(10);
|
||||
|
||||
// Set your reset, enable, power pins here
|
||||
pinMode(20, OUTPUT);
|
||||
digitalWrite(20, HIGH);
|
||||
|
||||
pinMode(23, OUTPUT);
|
||||
digitalWrite(23, HIGH);
|
||||
|
||||
SerialMon.println("Wait...");
|
||||
|
||||
// Set GSM module baud rate
|
||||
SerialAT.begin(115200);
|
||||
TinyGsmAutoBaud(SerialAT,GSM_AUTOBAUD_MIN,GSM_AUTOBAUD_MAX);
|
||||
// SerialAT.begin(115200);
|
||||
delay(3000);
|
||||
}
|
||||
|
||||
@@ -80,6 +120,7 @@ void loop() {
|
||||
// To skip it, call init() instead of restart()
|
||||
SerialMon.print("Initializing modem...");
|
||||
if (!modem.restart()) {
|
||||
// if (!modem.init()) {
|
||||
SerialMon.println(F(" [fail]"));
|
||||
SerialMon.println(F("************************"));
|
||||
SerialMon.println(F(" Is your modem connected properly?"));
|
||||
@@ -97,11 +138,30 @@ void loop() {
|
||||
SerialMon.print("Modem: ");
|
||||
SerialMon.println(modemInfo);
|
||||
|
||||
// Unlock your SIM card with a PIN
|
||||
//modem.simUnlock("1234");
|
||||
#if TINY_GSM_USE_GPRS
|
||||
// Unlock your SIM card with a PIN if needed
|
||||
if ( GSM_PIN && modem.getSimStatus() != 3 ) {
|
||||
modem.simUnlock(GSM_PIN);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TINY_GSM_USE_WIFI
|
||||
SerialMon.print(F("Setting SSID/password..."));
|
||||
if (!modem.networkConnect(wifiSSID, wifiPass)) {
|
||||
SerialMon.println(" fail");
|
||||
delay(10000);
|
||||
return;
|
||||
}
|
||||
SerialMon.println(" OK");
|
||||
#endif
|
||||
|
||||
#if TINY_GSM_USE_GPRS && defined TINY_GSM_MODEM_XBEE
|
||||
// The XBee must run the gprsConnect function BEFORE waiting for network!
|
||||
modem.gprsConnect(apn, gprsUser, gprsPass);
|
||||
#endif
|
||||
|
||||
SerialMon.print("Waiting for network...");
|
||||
if (!modem.waitForNetwork()) {
|
||||
if (!modem.waitForNetwork(600000L)) { // You may need lengthen this in poor service areas
|
||||
SerialMon.println(F(" [fail]"));
|
||||
SerialMon.println(F("************************"));
|
||||
SerialMon.println(F(" Is your sim card locked?"));
|
||||
@@ -114,9 +174,10 @@ void loop() {
|
||||
}
|
||||
SerialMon.println(F(" [OK]"));
|
||||
|
||||
#if TINY_GSM_USE_GPRS && defined TINY_GSM_MODEM_HAS_GPRS
|
||||
SerialMon.print("Connecting to ");
|
||||
SerialMon.print(apn);
|
||||
if (!modem.gprsConnect(apn, user, pass)) {
|
||||
if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {
|
||||
SerialMon.println(F(" [fail]"));
|
||||
SerialMon.println(F("************************"));
|
||||
SerialMon.println(F(" Is GPRS enabled by network provider?"));
|
||||
@@ -126,6 +187,7 @@ void loop() {
|
||||
return;
|
||||
}
|
||||
SerialMon.println(F(" [OK]"));
|
||||
#endif
|
||||
|
||||
IPAddress local = modem.localIP();
|
||||
SerialMon.print("Local IP: ");
|
||||
|
Reference in New Issue
Block a user