@ -0,0 +1,199 @@ | |||
/************************************************************** | |||
* | |||
* TinyGSM Getting Started guide: | |||
* https://tiny.cc/tinygsm-readme | |||
* | |||
* NOTE: | |||
* Some of the functions may be unavailable for your modem. | |||
* Just comment them out. | |||
* | |||
**************************************************************/ | |||
// Select your modem: | |||
//#define TINY_GSM_MODEM_SIM800 | |||
// #define TINY_GSM_MODEM_SIM808 | |||
// #define TINY_GSM_MODEM_SIM900 | |||
#define TINY_GSM_MODEM_SIM7000 | |||
// #define TINY_GSM_MODEM_UBLOX | |||
// #define TINY_GSM_MODEM_BG96 | |||
// #define TINY_GSM_MODEM_A6 | |||
// #define TINY_GSM_MODEM_A7 | |||
// #define TINY_GSM_MODEM_M590 | |||
// Set serial for debug console (to the Serial Monitor, speed 115200) | |||
#define SerialMon Serial | |||
// Set serial for AT commands (to the module) | |||
// Use Hardware Serial on Mega, Leonardo, Micro, ESP32 | |||
#include "HardwareSerial.h" | |||
#define SerialAT Serial2 | |||
// or Software Serial on Uno, Nano | |||
//#include <SoftwareSerial.h> | |||
//SoftwareSerial SerialAT(2, 3); // RX, TX | |||
#define MODEM_PWRKEY 18 | |||
//#define DUMP_AT_COMMANDS | |||
#define TINY_GSM_DEBUG SerialMon | |||
// Set phone numbers, if you want to test SMS and Calls | |||
//#define SMS_TARGET "+4366066033403" | |||
//#define CALL_TARGET "+43xxxxxx" | |||
// Your GPRS credentials | |||
// Leave empty, if missing user or pass | |||
const char apn[] = "drei.at"; | |||
const char user[] = ""; | |||
const char pass[] = ""; | |||
#include <TinyGsmClient.h> | |||
#ifdef DUMP_AT_COMMANDS | |||
#include <StreamDebugger.h> | |||
StreamDebugger debugger(SerialAT, SerialMon); | |||
TinyGsm modem(debugger); | |||
#else | |||
TinyGsm modem(SerialAT); | |||
TinyGsmClient client(modem); | |||
#endif | |||
void setup() { | |||
// Set pwr pin 18 (ESP32) --> shield's PWRKEY | |||
pinMode(MODEM_PWRKEY, OUTPUT); | |||
powerOn(); //function for powering on SIM7000 | |||
// Set console baud rate | |||
SerialMon.begin(115200); | |||
delay(1000); | |||
SerialAT.begin(9600); | |||
delay(1000); | |||
// Set GSM module baud rate | |||
//TinyGsmAutoBaud(SerialAT); | |||
} | |||
void loop() { | |||
// Restart takes quite some time | |||
// To skip it, call init() instead of restart() | |||
DBG("Initializing modem..."); | |||
if (!modem.restart()) { | |||
delay(15000); | |||
return; | |||
} | |||
//String modemInfo = modem.getModemInfo(); | |||
//DBG("Modem:", modemInfo); | |||
// Unlock your SIM card with a PIN | |||
//modem.simUnlock("1234"); | |||
// Network modes for SIM7000 (2-Automatic),(13-GSM Only),(38-LTE Only),(51-GSM And LTE Only) | |||
String NetworkModes = modem.getNetworkModes(); | |||
DBG("Network Modes:", NetworkModes); | |||
String NetworkMode = modem.setNetworkMode(0); | |||
DBG("Changed Network Mode:", NetworkMode); | |||
// Preferred LTE mode selection (1-Cat-M),(2-NB-IoT),(3-Cat-M And NB-IoT) | |||
String PreferredModes = modem.getPreferredModes(); | |||
DBG("Preferred Modes:", PreferredModes); | |||
String PreferredMode = modem.setPreferredMode(3); | |||
DBG("Changed Preferred Mode:", PreferredMode); | |||
/* DBG("Waiting for network..."); | |||
if (!modem.waitForNetwork()) { | |||
delay(10000); | |||
return; | |||
} | |||
if (modem.isNetworkConnected()) { | |||
DBG("Network connected"); | |||
}*/ | |||
/* | |||
DBG("Connecting to", apn); | |||
if (!modem.gprsConnect(apn, user, pass)) { | |||
delay(10000); | |||
return; | |||
} | |||
bool res = modem.isGprsConnected(); | |||
DBG("GPRS status:", res ? "connected" : "not connected"); | |||
String ccid = modem.getSimCCID(); | |||
DBG("CCID:", ccid); | |||
String imei = modem.getIMEI(); | |||
DBG("IMEI:", imei); | |||
String cop = modem.getOperator(); | |||
DBG("Operator:", cop); | |||
IPAddress local = modem.localIP(); | |||
DBG("Local IP:", local); | |||
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); | |||
// This is only supported on SIMxxx series | |||
String gsmTime = modem.getGSMDateTime(DATE_TIME); | |||
DBG("GSM Time:", gsmTime); | |||
String gsmDate = modem.getGSMDateTime(DATE_DATE); | |||
DBG("GSM Date:", gsmDate); | |||
modem.enableGPS(); | |||
String gps_raw = modem.getGPSraw(); | |||
modem.disableGPS(); | |||
DBG("GPS raw data:", gps_raw); | |||
#if defined(SMS_TARGET) | |||
res = modem.sendSMS(SMS_TARGET, String("Hello from ") + imei); | |||
DBG("SMS:", res ? "OK" : "fail"); | |||
// This is only supported on SIMxxx series | |||
res = modem.sendSMS_UTF16(SMS_TARGET, u"Привіііт!", 9); | |||
DBG("UTF16 SMS:", res ? "OK" : "fail"); | |||
#endif | |||
modem.gprsDisconnect(); | |||
if (!modem.isGprsConnected()) { | |||
DBG("GPRS disconnected"); | |||
} else { | |||
DBG("GPRS disconnect: Failed."); | |||
} | |||
*/ | |||
// Try to power-off (modem may decide to restart automatically) | |||
// To turn off modem completely, please use Reset/Enable pins | |||
modem.poweroff(); | |||
DBG("Poweroff."); | |||
// Do nothing forevermore | |||
while (true) { | |||
modem.maintain(); | |||
} | |||
} | |||
void powerOn() { | |||
digitalWrite(MODEM_PWRKEY, LOW); | |||
delay(100); | |||
digitalWrite(MODEM_PWRKEY, HIGH); | |||
} |
@ -0,0 +1,187 @@ | |||
/************************************************************** | |||
* | |||
* To run this tool you need StreamDebugger library: | |||
* https://github.com/vshymanskyy/StreamDebugger | |||
* or from http://librarymanager/all#StreamDebugger | |||
* | |||
* TinyGSM Getting Started guide: | |||
* https://tiny.cc/tinygsm-readme | |||
* | |||
**************************************************************/ | |||
// Select your modem: | |||
//#define TINY_GSM_MODEM_SIM800 | |||
// #define TINY_GSM_MODEM_SIM808 | |||
// #define TINY_GSM_MODEM_SIM900 | |||
#define TINY_GSM_MODEM_SIM7000 | |||
// #define TINY_GSM_MODEM_UBLOX | |||
// #define TINY_GSM_MODEM_BG96 | |||
// #define TINY_GSM_MODEM_A6 | |||
// #define TINY_GSM_MODEM_A7 | |||
// #define TINY_GSM_MODEM_M590 | |||
// #define TINY_GSM_MODEM_ESP8266 | |||
// #define TINY_GSM_MODEM_XBEE | |||
// Increase the buffer | |||
#define TINY_GSM_RX_BUFFER 512 | |||
// Define the serial console for debug prints, if needed | |||
//#define TINY_GSM_DEBUG Serial | |||
#include <TinyGsmClient.h> | |||
// Your GPRS credentials | |||
// Leave empty, if missing user or pass | |||
const char apn[] = "drei.at"; | |||
const char user[] = ""; | |||
const char pass[] = ""; | |||
// Set serial for debug console (to the Serial Monitor, speed 115200) | |||
#define SerialMon Serial | |||
// Set serial for AT commands (to the module) | |||
// Use Hardware Serial on Mega, Leonardo, Micro, Esp32 | |||
#include "HardwareSerial.h" | |||
#define SerialAT Serial2 | |||
// or Software Serial on Uno, Nano | |||
//#include <SoftwareSerial.h> | |||
//SoftwareSerial SerialAT(2, 3); // RX, TX | |||
#include <StreamDebugger.h> | |||
StreamDebugger debugger(SerialAT, SerialMon); | |||
TinyGsm modem(debugger); | |||
const char server[] = "vsh.pp.ua"; | |||
const char resource[] = "/TinyGSM/logo.txt"; | |||
const int port = 80; | |||
TinyGsmClient client(modem); | |||
// For SSL: | |||
//const int port = 443; | |||
//TinyGsmClientSecure client(modem); | |||
void setup() { | |||
// Set console baud rate | |||
Serial.println("Starting Serial"); | |||
SerialMon.begin(115200); | |||
delay(10); | |||
// Set GSM module baud rate | |||
SerialAT.begin(9600); | |||
delay(3000); | |||
} | |||
void loop() { | |||
// Restart takes quite some time | |||
// To skip it, call init() instead of restart() | |||
SerialMon.print("Initializing modem..."); | |||
if (!modem.restart()) { | |||
SerialMon.println(F(" [fail]")); | |||
SerialMon.println(F("************************")); | |||
SerialMon.println(F(" Is your modem connected properly?")); | |||
SerialMon.println(F(" Is your serial speed (baud rate) correct?")); | |||
SerialMon.println(F(" Is your modem powered on?")); | |||
SerialMon.println(F(" Do you use a good, stable power source?")); | |||
SerialMon.println(F(" Try useing File -> Examples -> TinyGSM -> tools -> AT_Debug to find correct configuration")); | |||
SerialMon.println(F("************************")); | |||
delay(10000); | |||
return; | |||
} | |||
SerialMon.println(F(" [OK]")); | |||
String modemInfo = modem.getModemInfo(); | |||
SerialMon.print("Modem: "); | |||
SerialMon.println(modemInfo); | |||
// Unlock your SIM card with a PIN | |||
//modem.simUnlock("1234"); | |||
SerialMon.print("Waiting for network..."); | |||
if (!modem.waitForNetwork()) { | |||
SerialMon.println(F(" [fail]")); | |||
SerialMon.println(F("************************")); | |||
SerialMon.println(F(" Is your sim card locked?")); | |||
SerialMon.println(F(" Do you have a good signal?")); | |||
SerialMon.println(F(" Is antenna attached?")); | |||
SerialMon.println(F(" Does the SIM card work with your phone?")); | |||
SerialMon.println(F("************************")); | |||
delay(10000); | |||
return; | |||
} | |||
SerialMon.println(F(" [OK]")); | |||
SerialMon.print("Connecting to "); | |||
SerialMon.print(apn); | |||
if (!modem.gprsConnect(apn, user, pass)) { | |||
SerialMon.println(F(" [fail]")); | |||
SerialMon.println(F("************************")); | |||
SerialMon.println(F(" Is GPRS enabled by network provider?")); | |||
SerialMon.println(F(" Try checking your card balance.")); | |||
SerialMon.println(F("************************")); | |||
delay(10000); | |||
return; | |||
} | |||
SerialMon.println(F(" [OK]")); | |||
IPAddress local = modem.localIP(); | |||
SerialMon.print("Local IP: "); | |||
SerialMon.println(local); | |||
SerialMon.print(F("Connecting to ")); | |||
SerialMon.print(server); | |||
if (!client.connect(server, port)) { | |||
SerialMon.println(F(" [fail]")); | |||
delay(10000); | |||
return; | |||
} | |||
SerialMon.println(F(" [OK]")); | |||
// Make a HTTP GET request: | |||
client.print(String("GET ") + resource + " HTTP/1.0\r\n"); | |||
client.print(String("Host: ") + server + "\r\n"); | |||
client.print("Connection: close\r\n\r\n"); | |||
// Wait for data to arrive | |||
while (client.connected() && !client.available()) { | |||
delay(100); | |||
SerialMon.print('.'); | |||
}; | |||
SerialMon.println(); | |||
// Skip all headers | |||
client.find("\r\n\r\n"); | |||
// Read data | |||
unsigned long timeout = millis(); | |||
unsigned long bytesReceived = 0; | |||
while (client.connected() && millis() - timeout < 10000L) { | |||
while (client.available()) { | |||
char c = client.read(); | |||
//SerialMon.print(c); | |||
bytesReceived += 1; | |||
timeout = millis(); | |||
} | |||
} | |||
client.stop(); | |||
SerialMon.println(F("Server disconnected")); | |||
modem.gprsDisconnect(); | |||
SerialMon.println(F("GPRS disconnected")); | |||
SerialMon.println(); | |||
SerialMon.println(F("************************")); | |||
SerialMon.print (F(" Received: ")); | |||
SerialMon.print(bytesReceived); | |||
SerialMon.println(F(" bytes")); | |||
SerialMon.print (F(" Test: ")); | |||
SerialMon.println((bytesReceived == 121) ? "PASSED" : "FAILED"); | |||
SerialMon.println(F("************************")); | |||
// Do nothing forevermore | |||
while (true) { | |||
delay(1000); | |||
} | |||
} |