Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -13,6 +13,8 @@
|
|||||||
#define TINY_GSM_MODEM_SIM800
|
#define TINY_GSM_MODEM_SIM800
|
||||||
// #define TINY_GSM_MODEM_SIM808
|
// #define TINY_GSM_MODEM_SIM808
|
||||||
// #define TINY_GSM_MODEM_SIM900
|
// #define TINY_GSM_MODEM_SIM900
|
||||||
|
// #define TINY_GSM_MODEM_UBLOX
|
||||||
|
// #define TINY_GSM_MODEM_BG96
|
||||||
// #define TINY_GSM_MODEM_A6
|
// #define TINY_GSM_MODEM_A6
|
||||||
// #define TINY_GSM_MODEM_A7
|
// #define TINY_GSM_MODEM_A7
|
||||||
// #define TINY_GSM_MODEM_M590
|
// #define TINY_GSM_MODEM_M590
|
||||||
@@ -97,7 +99,8 @@ void loop() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool res;
|
bool res = modem.isGprsConnected();
|
||||||
|
DBG("GPRS status:", res ? "connected" : "not connected");
|
||||||
|
|
||||||
String ccid = modem.getSimCCID();
|
String ccid = modem.getSimCCID();
|
||||||
DBG("CCID:", ccid);
|
DBG("CCID:", ccid);
|
||||||
|
@@ -32,6 +32,8 @@
|
|||||||
#define TINY_GSM_MODEM_SIM800
|
#define TINY_GSM_MODEM_SIM800
|
||||||
// #define TINY_GSM_MODEM_SIM808
|
// #define TINY_GSM_MODEM_SIM808
|
||||||
// #define TINY_GSM_MODEM_SIM900
|
// #define TINY_GSM_MODEM_SIM900
|
||||||
|
// #define TINY_GSM_MODEM_UBLOX
|
||||||
|
// #define TINY_GSM_MODEM_BG96
|
||||||
// #define TINY_GSM_MODEM_A6
|
// #define TINY_GSM_MODEM_A6
|
||||||
// #define TINY_GSM_MODEM_A7
|
// #define TINY_GSM_MODEM_A7
|
||||||
// #define TINY_GSM_MODEM_M590
|
// #define TINY_GSM_MODEM_M590
|
||||||
|
@@ -17,6 +17,8 @@
|
|||||||
#define TINY_GSM_MODEM_SIM800
|
#define TINY_GSM_MODEM_SIM800
|
||||||
// #define TINY_GSM_MODEM_SIM808
|
// #define TINY_GSM_MODEM_SIM808
|
||||||
// #define TINY_GSM_MODEM_SIM900
|
// #define TINY_GSM_MODEM_SIM900
|
||||||
|
// #define TINY_GSM_MODEM_UBLOX
|
||||||
|
// #define TINY_GSM_MODEM_BG96
|
||||||
// #define TINY_GSM_MODEM_A6
|
// #define TINY_GSM_MODEM_A6
|
||||||
// #define TINY_GSM_MODEM_A7
|
// #define TINY_GSM_MODEM_A7
|
||||||
// #define TINY_GSM_MODEM_M590
|
// #define TINY_GSM_MODEM_M590
|
||||||
|
@@ -18,6 +18,8 @@
|
|||||||
#define TINY_GSM_MODEM_SIM800
|
#define TINY_GSM_MODEM_SIM800
|
||||||
// #define TINY_GSM_MODEM_SIM808
|
// #define TINY_GSM_MODEM_SIM808
|
||||||
// #define TINY_GSM_MODEM_SIM900
|
// #define TINY_GSM_MODEM_SIM900
|
||||||
|
// #define TINY_GSM_MODEM_UBLOX
|
||||||
|
// #define TINY_GSM_MODEM_BG96
|
||||||
// #define TINY_GSM_MODEM_A6
|
// #define TINY_GSM_MODEM_A6
|
||||||
// #define TINY_GSM_MODEM_A7
|
// #define TINY_GSM_MODEM_A7
|
||||||
// #define TINY_GSM_MODEM_M590
|
// #define TINY_GSM_MODEM_M590
|
||||||
|
@@ -10,7 +10,8 @@
|
|||||||
* TinyGSM Getting Started guide:
|
* TinyGSM Getting Started guide:
|
||||||
* http://tiny.cc/tiny-gsm-readme
|
* http://tiny.cc/tiny-gsm-readme
|
||||||
*
|
*
|
||||||
* SSL/TLS is currently supported only with SIM8xx series
|
* SSL/TLS is currently supported only with: SIM8xx, uBlox
|
||||||
|
*
|
||||||
* For more HTTP API examples, see ArduinoHttpClient library
|
* For more HTTP API examples, see ArduinoHttpClient library
|
||||||
*
|
*
|
||||||
**************************************************************/
|
**************************************************************/
|
||||||
@@ -18,6 +19,7 @@
|
|||||||
// Select your modem:
|
// Select your modem:
|
||||||
#define TINY_GSM_MODEM_SIM800
|
#define TINY_GSM_MODEM_SIM800
|
||||||
// #define TINY_GSM_MODEM_SIM808
|
// #define TINY_GSM_MODEM_SIM808
|
||||||
|
// #define TINY_GSM_MODEM_UBLOX
|
||||||
|
|
||||||
// Increase RX buffer if needed
|
// Increase RX buffer if needed
|
||||||
//#define TINY_GSM_RX_BUFFER 512
|
//#define TINY_GSM_RX_BUFFER 512
|
||||||
|
@@ -31,6 +31,8 @@
|
|||||||
#define TINY_GSM_MODEM_SIM800
|
#define TINY_GSM_MODEM_SIM800
|
||||||
// #define TINY_GSM_MODEM_SIM808
|
// #define TINY_GSM_MODEM_SIM808
|
||||||
// #define TINY_GSM_MODEM_SIM900
|
// #define TINY_GSM_MODEM_SIM900
|
||||||
|
// #define TINY_GSM_MODEM_UBLOX
|
||||||
|
// #define TINY_GSM_MODEM_BG96
|
||||||
// #define TINY_GSM_MODEM_A6
|
// #define TINY_GSM_MODEM_A6
|
||||||
// #define TINY_GSM_MODEM_A7
|
// #define TINY_GSM_MODEM_A7
|
||||||
// #define TINY_GSM_MODEM_M590
|
// #define TINY_GSM_MODEM_M590
|
||||||
@@ -119,7 +121,14 @@ void setup() {
|
|||||||
boolean mqttConnect() {
|
boolean mqttConnect() {
|
||||||
SerialMon.print("Connecting to ");
|
SerialMon.print("Connecting to ");
|
||||||
SerialMon.print(broker);
|
SerialMon.print(broker);
|
||||||
if (!mqtt.connect("GsmClientTest")) {
|
|
||||||
|
// Connect to MQTT Broker
|
||||||
|
boolean status = mqtt.connect("GsmClientTest");
|
||||||
|
|
||||||
|
// Or, if you want to authenticate MQTT:
|
||||||
|
//boolean status = mqtt.connect("GsmClientName", "mqtt_user", "mqtt_pass");
|
||||||
|
|
||||||
|
if (status == false) {
|
||||||
SerialMon.println(" fail");
|
SerialMon.println(" fail");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -131,9 +140,8 @@ boolean mqttConnect() {
|
|||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
|
|
||||||
if (mqtt.connected()) {
|
if (!mqtt.connected()) {
|
||||||
mqtt.loop();
|
SerialMon.println("=== MQTT NOT CONNECTED ===");
|
||||||
} else {
|
|
||||||
// Reconnect every 10 seconds
|
// Reconnect every 10 seconds
|
||||||
unsigned long t = millis();
|
unsigned long t = millis();
|
||||||
if (t - lastReconnectAttempt > 10000L) {
|
if (t - lastReconnectAttempt > 10000L) {
|
||||||
@@ -142,8 +150,11 @@ void loop() {
|
|||||||
lastReconnectAttempt = 0;
|
lastReconnectAttempt = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
delay(100);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mqtt.loop();
|
||||||
}
|
}
|
||||||
|
|
||||||
void mqttCallback(char* topic, byte* payload, unsigned int len) {
|
void mqttCallback(char* topic, byte* payload, unsigned int len) {
|
||||||
|
@@ -12,6 +12,8 @@
|
|||||||
#define TINY_GSM_MODEM_SIM800
|
#define TINY_GSM_MODEM_SIM800
|
||||||
// #define TINY_GSM_MODEM_SIM808
|
// #define TINY_GSM_MODEM_SIM808
|
||||||
// #define TINY_GSM_MODEM_SIM900
|
// #define TINY_GSM_MODEM_SIM900
|
||||||
|
// #define TINY_GSM_MODEM_UBLOX
|
||||||
|
// #define TINY_GSM_MODEM_BG96
|
||||||
// #define TINY_GSM_MODEM_A6
|
// #define TINY_GSM_MODEM_A6
|
||||||
// #define TINY_GSM_MODEM_A7
|
// #define TINY_GSM_MODEM_A7
|
||||||
// #define TINY_GSM_MODEM_M590
|
// #define TINY_GSM_MODEM_M590
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "TinyGSM",
|
"name": "TinyGSM",
|
||||||
"version": "0.3.3",
|
"version": "0.3.5",
|
||||||
"description": "A small Arduino library for GPRS modules, that just works. Includes examples for Blynk, MQTT, File Download, and Web Client. Supports GSM modules with AT command interface: SIM800, SIM800A, SIM800C, SIM800L, SIM800H, SIM808, SIM868, SIM900, SIM900A, SIM900D, SIM908, SIM968",
|
"description": "A small Arduino library for GPRS modules, that just works. Includes examples for Blynk, MQTT, File Download, and Web Client. Supports GSM modules with AT command interface: SIM800, SIM800A, SIM800C, SIM800L, SIM800H, SIM808, SIM868, SIM900, SIM900A, SIM900D, SIM908, SIM968",
|
||||||
"keywords": "GSM, AT commands, AT, SIM800, SIM900, A6, A7, M590, ESP8266, SIM800A, SIM800C, SIM800L, SIM800H, SIM808, SIM868, SIM900A, SIM900D, SIM908, SIM968",
|
"keywords": "GSM, AT commands, AT, SIM800, SIM900, A6, A7, M590, ESP8266, SIM800A, SIM800C, SIM800L, SIM800H, SIM808, SIM868, SIM900A, SIM900D, SIM908, SIM968",
|
||||||
"authors":
|
"authors":
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
name=TinyGSM
|
name=TinyGSM
|
||||||
version=0.3.3
|
version=0.3.5
|
||||||
author=Volodymyr Shymanskyy
|
author=Volodymyr Shymanskyy
|
||||||
maintainer=Volodymyr Shymanskyy
|
maintainer=Volodymyr Shymanskyy
|
||||||
sentence=A small Arduino library for GPRS modules, that just works.
|
sentence=A small Arduino library for GPRS modules, that just works.
|
||||||
|
@@ -120,6 +120,11 @@ public:
|
|||||||
return write(&c, 1);
|
return write(&c, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual size_t write(const char *str) {
|
||||||
|
if (str == NULL) return 0;
|
||||||
|
return write((const uint8_t *)str, strlen(str));
|
||||||
|
}
|
||||||
|
|
||||||
virtual int available() {
|
virtual int available() {
|
||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
if (!rx.size() && sock_connected) {
|
if (!rx.size() && sock_connected) {
|
||||||
|
@@ -120,6 +120,11 @@ public:
|
|||||||
return write(&c, 1);
|
return write(&c, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual size_t write(const char *str) {
|
||||||
|
if (str == NULL) return 0;
|
||||||
|
return write((const uint8_t *)str, strlen(str));
|
||||||
|
}
|
||||||
|
|
||||||
virtual int available() {
|
virtual int available() {
|
||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
if (!rx.size()) {
|
if (!rx.size()) {
|
||||||
|
@@ -117,6 +117,11 @@ public:
|
|||||||
return write(&c, 1);
|
return write(&c, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual size_t write(const char *str) {
|
||||||
|
if (str == NULL) return 0;
|
||||||
|
return write((const uint8_t *)str, strlen(str));
|
||||||
|
}
|
||||||
|
|
||||||
virtual int available() {
|
virtual int available() {
|
||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
if (!rx.size() && sock_connected) {
|
if (!rx.size() && sock_connected) {
|
||||||
|
@@ -118,6 +118,11 @@ public:
|
|||||||
return write(&c, 1);
|
return write(&c, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual size_t write(const char *str) {
|
||||||
|
if (str == NULL) return 0;
|
||||||
|
return write((const uint8_t *)str, strlen(str));
|
||||||
|
}
|
||||||
|
|
||||||
virtual int available() {
|
virtual int available() {
|
||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
if (!rx.size() && sock_connected) {
|
if (!rx.size() && sock_connected) {
|
||||||
|
@@ -45,22 +45,9 @@ enum TinyGSMDateTimeFormat {
|
|||||||
DATE_DATE = 2
|
DATE_DATE = 2
|
||||||
};
|
};
|
||||||
|
|
||||||
//============================================================================//
|
|
||||||
//============================================================================//
|
|
||||||
// Declaration of the TinyGsmSim800 Class
|
|
||||||
//============================================================================//
|
|
||||||
//============================================================================//
|
|
||||||
|
|
||||||
class TinyGsmSim800
|
class TinyGsmSim800
|
||||||
{
|
{
|
||||||
|
|
||||||
//============================================================================//
|
|
||||||
//============================================================================//
|
|
||||||
// The Sim800 Internal Client Class
|
|
||||||
//============================================================================//
|
|
||||||
//============================================================================//
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
class GsmClient : public Client
|
class GsmClient : public Client
|
||||||
@@ -127,6 +114,11 @@ public:
|
|||||||
return write(&c, 1);
|
return write(&c, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual size_t write(const char *str) {
|
||||||
|
if (str == NULL) return 0;
|
||||||
|
return write((const uint8_t *)str, strlen(str));
|
||||||
|
}
|
||||||
|
|
||||||
virtual int available() {
|
virtual int available() {
|
||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
if (!rx.size() && sock_connected) {
|
if (!rx.size() && sock_connected) {
|
||||||
@@ -200,13 +192,6 @@ private:
|
|||||||
RxFifo rx;
|
RxFifo rx;
|
||||||
};
|
};
|
||||||
|
|
||||||
//============================================================================//
|
|
||||||
//============================================================================//
|
|
||||||
// The SIM800 Secure Client
|
|
||||||
//============================================================================//
|
|
||||||
//============================================================================//
|
|
||||||
|
|
||||||
|
|
||||||
class GsmClientSecure : public GsmClient
|
class GsmClientSecure : public GsmClient
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -226,19 +211,9 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//============================================================================//
|
|
||||||
//============================================================================//
|
|
||||||
// The SIM800 Modem Functions
|
|
||||||
//============================================================================//
|
|
||||||
//============================================================================//
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
#ifdef GSM_DEFAULT_STREAM
|
|
||||||
TinyGsmSim800(Stream& stream = GSM_DEFAULT_STREAM)
|
|
||||||
#else
|
|
||||||
TinyGsmSim800(Stream& stream)
|
TinyGsmSim800(Stream& stream)
|
||||||
#endif
|
|
||||||
: stream(stream)
|
: stream(stream)
|
||||||
{
|
{
|
||||||
memset(sockets, 0, sizeof(sockets));
|
memset(sockets, 0, sizeof(sockets));
|
||||||
@@ -343,6 +318,7 @@ public:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
//Enable Local Time Stamp for getting network time
|
//Enable Local Time Stamp for getting network time
|
||||||
|
// TODO: Find a better place for this
|
||||||
sendAT(GF("+CLTS=1"));
|
sendAT(GF("+CLTS=1"));
|
||||||
if (waitResponse(10000L) != 1) {
|
if (waitResponse(10000L) != 1) {
|
||||||
return false;
|
return false;
|
||||||
@@ -426,10 +402,10 @@ public:
|
|||||||
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"));
|
||||||
waitResponse();
|
waitResponse();
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case 2:
|
case 2:
|
||||||
case 3: return SIM_LOCKED;
|
case 3: return SIM_LOCKED;
|
||||||
case 1: return SIM_READY;
|
case 1: return SIM_READY;
|
||||||
default: return SIM_ERROR;
|
default: return SIM_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return SIM_ERROR;
|
return SIM_ERROR;
|
||||||
@@ -486,10 +462,6 @@ public:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* WiFi functions
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* GPRS functions
|
* GPRS functions
|
||||||
*/
|
*/
|
||||||
@@ -926,8 +898,7 @@ public:
|
|||||||
streamWrite(tail...);
|
streamWrite(tail...);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool streamSkipUntil(char c) {
|
bool streamSkipUntil(const char c, const unsigned long timeout = 3000L) {
|
||||||
const unsigned long timeout = 1000L;
|
|
||||||
unsigned long startMillis = millis();
|
unsigned long startMillis = millis();
|
||||||
while (millis() - startMillis < timeout) {
|
while (millis() - startMillis < timeout) {
|
||||||
while (millis() - startMillis < timeout && !stream.available()) {
|
while (millis() - startMillis < timeout && !stream.available()) {
|
||||||
@@ -1013,7 +984,6 @@ finish:
|
|||||||
}
|
}
|
||||||
data = "";
|
data = "";
|
||||||
}
|
}
|
||||||
//DBG('<', index, '>');
|
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -118,6 +118,11 @@ public:
|
|||||||
return write(&c, 1);
|
return write(&c, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual size_t write(const char *str) {
|
||||||
|
if (str == NULL) return 0;
|
||||||
|
return write((const uint8_t *)str, strlen(str));
|
||||||
|
}
|
||||||
|
|
||||||
virtual int available() {
|
virtual int available() {
|
||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
if (!rx.size() && sock_connected) {
|
if (!rx.size() && sock_connected) {
|
||||||
|
@@ -136,6 +136,11 @@ public:
|
|||||||
return write(&c, 1);
|
return write(&c, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual size_t write(const char *str) {
|
||||||
|
if (str == NULL) return 0;
|
||||||
|
return write((const uint8_t *)str, strlen(str));
|
||||||
|
}
|
||||||
|
|
||||||
virtual int available() {
|
virtual int available() {
|
||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
return at->stream.available();
|
return at->stream.available();
|
||||||
|
@@ -12,6 +12,8 @@
|
|||||||
#define TINY_GSM_MODEM_SIM800
|
#define TINY_GSM_MODEM_SIM800
|
||||||
// #define TINY_GSM_MODEM_SIM808
|
// #define TINY_GSM_MODEM_SIM808
|
||||||
// #define TINY_GSM_MODEM_SIM900
|
// #define TINY_GSM_MODEM_SIM900
|
||||||
|
// #define TINY_GSM_MODEM_UBLOX
|
||||||
|
// #define TINY_GSM_MODEM_BG96
|
||||||
// #define TINY_GSM_MODEM_A6
|
// #define TINY_GSM_MODEM_A6
|
||||||
// #define TINY_GSM_MODEM_A7
|
// #define TINY_GSM_MODEM_A7
|
||||||
// #define TINY_GSM_MODEM_M590
|
// #define TINY_GSM_MODEM_M590
|
||||||
|
@@ -14,6 +14,7 @@
|
|||||||
// #define TINY_GSM_MODEM_SIM808
|
// #define TINY_GSM_MODEM_SIM808
|
||||||
// #define TINY_GSM_MODEM_SIM900
|
// #define TINY_GSM_MODEM_SIM900
|
||||||
// #define TINY_GSM_MODEM_UBLOX
|
// #define TINY_GSM_MODEM_UBLOX
|
||||||
|
// #define TINY_GSM_MODEM_BG96
|
||||||
// #define TINY_GSM_MODEM_A6
|
// #define TINY_GSM_MODEM_A6
|
||||||
// #define TINY_GSM_MODEM_A7
|
// #define TINY_GSM_MODEM_A7
|
||||||
// #define TINY_GSM_MODEM_M590
|
// #define TINY_GSM_MODEM_M590
|
||||||
@@ -56,6 +57,7 @@ const char resource[] = "/TinyGSM/logo.txt";
|
|||||||
const int port = 80;
|
const int port = 80;
|
||||||
TinyGsmClient client(modem);
|
TinyGsmClient client(modem);
|
||||||
|
|
||||||
|
// For SSL:
|
||||||
//const int port = 443;
|
//const int port = 443;
|
||||||
//TinyGsmClientSecure client(modem);
|
//TinyGsmClientSecure client(modem);
|
||||||
|
|
||||||
@@ -155,7 +157,7 @@ void loop() {
|
|||||||
while (client.connected() && millis() - timeout < 10000L) {
|
while (client.connected() && millis() - timeout < 10000L) {
|
||||||
while (client.available()) {
|
while (client.available()) {
|
||||||
char c = client.read();
|
char c = client.read();
|
||||||
SerialMon.print(c);
|
//SerialMon.print(c);
|
||||||
bytesReceived += 1;
|
bytesReceived += 1;
|
||||||
timeout = millis();
|
timeout = millis();
|
||||||
}
|
}
|
||||||
|
@@ -13,6 +13,8 @@
|
|||||||
#define TINY_GSM_MODEM_SIM800
|
#define TINY_GSM_MODEM_SIM800
|
||||||
// #define TINY_GSM_MODEM_SIM808
|
// #define TINY_GSM_MODEM_SIM808
|
||||||
// #define TINY_GSM_MODEM_SIM900
|
// #define TINY_GSM_MODEM_SIM900
|
||||||
|
// #define TINY_GSM_MODEM_UBLOX
|
||||||
|
// #define TINY_GSM_MODEM_BG96
|
||||||
// #define TINY_GSM_MODEM_A6
|
// #define TINY_GSM_MODEM_A6
|
||||||
// #define TINY_GSM_MODEM_A7
|
// #define TINY_GSM_MODEM_A7
|
||||||
// #define TINY_GSM_MODEM_M590
|
// #define TINY_GSM_MODEM_M590
|
||||||
|
Reference in New Issue
Block a user