diff --git a/host/esp-t-sim7000g/platformio.ini b/host/esp-t-sim7000g/platformio.ini index 4533a798e0ecedbf08acb2044e5f9709ab7873d8..47649fe47d7ea2b40dc16645ce004a526705bb9a 100644 --- a/host/esp-t-sim7000g/platformio.ini +++ b/host/esp-t-sim7000g/platformio.ini @@ -12,6 +12,9 @@ platform = espressif32 board = esp-wrover-kit framework = arduino +monitor_speed = 115200 +monitor_port = /dev/ttyACM0 +upload_port = /dev/ttyACM0 lib_deps = vshymanskyy/TinyGSM@^0.11.5 vshymanskyy/StreamDebugger@^1.0.1 diff --git a/host/esp-t-sim7000g/src/main.cpp b/host/esp-t-sim7000g/src/main.cpp deleted file mode 100644 index 6585eff6ce6ee4c1b89fac0e3eaa4bb19c51e576..0000000000000000000000000000000000000000 --- a/host/esp-t-sim7000g/src/main.cpp +++ /dev/null @@ -1,393 +0,0 @@ - -/* - FILE: AllFunctions.ino - AUTHOR: Koby Hale - PURPOSE: Test functionality -*/ - -#define TINY_GSM_MODEM_SIM7000 -#define TINY_GSM_RX_BUFFER 1024 // Set RX buffer to 1Kb -#define SerialAT Serial1 - -// See all AT commands, if wanted -#define DUMP_AT_COMMANDS - -/* - Tests enabled -*/ -#define TINY_GSM_TEST_GPRS true -#define TINY_GSM_POWERDOWN true - -// set GSM PIN, if any -#define GSM_PIN "" - -// Your GPRS credentials, if any -const char apn[] = "m2m.public.at"; // SET TO YOUR APN -const char gprsUser[] = ""; -const char gprsPass[] = ""; - -#include <SD.h> -#include <SPI.h> -#include <Ticker.h> -#include <TinyGsmClient.h> - -#ifdef DUMP_AT_COMMANDS // if enabled it requires the streamDebugger lib -#include <StreamDebugger.h> -StreamDebugger debugger(SerialAT, Serial); -TinyGsm modem(debugger); -#else -TinyGsm modem(SerialAT); -#endif - -#define uS_TO_S_FACTOR 1000000ULL // Conversion factor for micro seconds to seconds -#define TIME_TO_SLEEP 60 // Time ESP32 will go to sleep (in seconds) - -#define UART_BAUD 115200 -#define PIN_DTR 25 -#define PIN_TX 27 -#define PIN_RX 26 -#define PWR_PIN 4 - -#define SD_MISO 2 -#define SD_MOSI 15 -#define SD_SCLK 14 -#define SD_CS 13 -#define LED_PIN 12 - -#include <ArduinoJson.h> - -int counter, lastIndex, numberOfPieces = 24; -String pieces[24], input; - - -std::string getResponseBody(const std::string &response) -{ - std::string delimiter = "\r\n\r\n"; - std::string token = response.substr(response.find(delimiter)).replace(0, delimiter.length(), ""); - return token; -} - -std::string getResponse(TinyGsmClient &client) -{ - String status = client.readStringUntil('\r'); - Serial.println(status); - - std::string response; - while (client.connected()) { - if (client.available()) { - char c = client.read(); - response += c; - } - } - return response; -} - -std::string getResponse(std::string server, std::string path, int port) -{ - TinyGsmClient client(modem); - // if you get a connection, report back via serial: - if (client.connect(server.c_str(), port)) { - Serial.println("connected to server"); - // Make a HTTP request: - client.print("GET "); - client.print(path.c_str()); - client.println(" HTTP/1.1"); - client.print("Host: "); - client.println(server.c_str()); - client.println("Connection: close"); - client.println(); - } else { - // if you didn't get a connection to the server: - Serial.println("connection failed"); - } - - std::string response = getResponse(client); - - std::string token = getResponseBody(response); - Serial.println(token.c_str()); - client.stop(); - return token; -} - - -void modemDisconnect(); -bool do_gsm_test() -{ - - SerialAT.println("AT+CGDCONT?"); - delay(500); - if (SerialAT.available()) { - input = SerialAT.readString(); - for (int i = 0; i < input.length(); i++) { - if (input.substring(i, i + 1) == "\n") { - pieces[counter] = input.substring(lastIndex, i); - lastIndex = i + 1; - counter++; - } - if (i == input.length() - 1) { - pieces[counter] = input.substring(lastIndex, i); - } - } - // Reset for reuse - input = ""; - counter = 0; - lastIndex = 0; - - for (int y = 0; y < numberOfPieces; y++) { - for (char c : pieces[y]) { - // gets one byte from buffer - if (c == ',') { - if (input.indexOf(": ") >= 0) { - String data = input.substring((input.indexOf(": ") + 1)); - if (data.toInt() > 0 && data.toInt() < 25) { - modem.sendAT("+CGDCONT=" + String(data.toInt()) + ",\"IP\",\"" + String(apn) - + "\",\"0.0.0.0\",0,0,0,0"); - } - input = ""; - break; - } - // Reset for reuse - input = ""; - } else { - input += c; - } - } - } - } else { - Serial.println("Failed to get PDP!"); - } - - Serial.println("\n\n\nWaiting for network..."); - if (!modem.waitForNetwork()) { - delay(10000); - return false; - } - - if (modem.isNetworkConnected()) { - Serial.println("Network connected"); - } - - Serial.println("\n---Starting GPRS TEST---\n"); - Serial.println("Connecting to: " + String(apn)); - if (!modem.gprsConnect(apn, gprsUser, gprsPass)) { - delay(10000); - return false; - } - - Serial.print("GPRS status: "); - if (modem.isGprsConnected()) { - Serial.println("connected"); - } else { - Serial.println("not connected"); - } - - String ccid = modem.getSimCCID(); - Serial.println("CCID: " + ccid); - - String imei = modem.getIMEI(); - Serial.println("IMEI: " + imei); - - String cop = modem.getOperator(); - Serial.println("Operator: " + cop); - - IPAddress local = modem.localIP(); - Serial.println("Local IP: " + String(local)); - - int csq = modem.getSignalQuality(); - Serial.println("Signal quality: " + String(csq)); - - SerialAT.println("AT+CPSI?"); // Get connection type and band - delay(500); - if (SerialAT.available()) { - String r = SerialAT.readString(); - Serial.println(r); - } - - Serial.println("\n---End of GPRS TEST---\n"); - return true; -} - -void setup() -{ - // Set console baud rate - Serial.begin(115200); - delay(10); - - // Set LED OFF - pinMode(LED_PIN, OUTPUT); - digitalWrite(LED_PIN, HIGH); - - pinMode(PWR_PIN, OUTPUT); - digitalWrite(PWR_PIN, HIGH); - delay(300); - digitalWrite(PWR_PIN, LOW); - - SPI.begin(SD_SCLK, SD_MISO, SD_MOSI, SD_CS); - if (!SD.begin(SD_CS)) { - Serial.println("SDCard MOUNT FAIL"); - } else { - uint32_t cardSize = SD.cardSize() / (1024 * 1024); - String str = "SDCard Size: " + String(cardSize) + "MB"; - Serial.println(str); - } - - Serial.println("\nWait..."); - - delay(1000); - - SerialAT.begin(UART_BAUD, SERIAL_8N1, PIN_RX, PIN_TX); - - // Restart takes quite some time - // To skip it, call init() instead of restart() - Serial.println("Initializing modem..."); - if (!modem.restart()) { - Serial.println("Failed to restart modem, attempting to continue without restarting"); - } -} - -bool modemConnect() -{ - // Restart takes quite some time - // To skip it, call init() instead of restart() - Serial.println("Initializing modem..."); - if (!modem.init()) { - Serial.println("Failed to restart modem, attempting to continue without restarting"); - } - - String name = modem.getModemName(); - delay(500); - Serial.println("Modem Name: " + name); - - String modemInfo = modem.getModemInfo(); - delay(500); - Serial.println("Modem Info: " + modemInfo); - - // Set SIM7000G GPIO4 LOW ,turn off GPS power - // CMD:AT+SGPIO=0,4,1,0 - // Only in version 20200415 is there a function to control GPS power - modem.sendAT("+SGPIO=0,4,1,0"); - if (modem.waitResponse(10000L) != 1) { - DBG(" SGPIO=0,4,1,0 false "); - } - -#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 - - modem.sendAT("+CFUN=0 "); - if (modem.waitResponse(10000L) != 1) { - DBG(" +CFUN=0 false "); - } - delay(200); - - /* - 2 Automatic - 13 GSM only - 38 LTE only - 51 GSM and LTE only - * * * */ - String res; - res = modem.setNetworkMode(38); - if (res != "1") { - DBG("setNetworkMode false "); - return false; - } - delay(200); - - /* - 1 CAT-M - 2 NB-Iot - 3 CAT-M and NB-IoT - * * */ - res = modem.setPreferredMode(1); - if (res != "1") { - - DBG("setPreferredMode false "); - return false; - } - delay(200); - - /*AT+CBANDCFG=<mode>,<band>[,<band>…] - * <mode> "CAT-M" "NB-IOT" - * <band> The value of <band> must is in the band list of getting from AT+CBANDCFG=? - * For example, my SIM card carrier "NB-iot" supports B8. I will configure +CBANDCFG= "Nb-iot ",8 - */ - modem.sendAT("+CBANDCFG=\"CAT-M\",8 "); - if (modem.waitResponse(10000L) != 1) { - DBG(" +CBANDCFG=\"NB-IOT\" "); - } - delay(200); - - modem.sendAT("+CFUN=1 "); - if (modem.waitResponse(10000L) != 1) { - DBG(" +CFUN=1 false "); - } - delay(200); - -#if TINY_GSM_TEST_GPRS - if (!do_gsm_test()) { - return false; - } - modem.gprsDisconnect(); - if (!modem.isGprsConnected()) { - Serial.println("GPRS disconnected"); - } else { - Serial.println("GPRS disconnect: Failed."); - } -#endif - - return true; -} - -void loop() -{ - - if (!modemConnect()) { - return; - } - - Serial.println("connecting..."); - - auto response = getResponse("date.jsontest.com", "/", 80); - // convert response to json object - DynamicJsonDocument doc(1024); - auto error = deserializeJson(doc, response); - if (error) { - Serial.print(F("deserializeJson() failed: ")); - Serial.println(error.f_str()); - return; - } - const char *date = doc["date"]; - long long milliseconds_since_epoch = doc["milliseconds_since_epoch"].as<long long>(); - const char *time = doc["time"]; - Serial.println(date); - Serial.println(milliseconds_since_epoch); - Serial.println(time); - - modemDisconnect(); - - esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR); - delay(200); - esp_deep_sleep_start(); - - // Do nothing forevermore - while (true) { - modem.maintain(); - } -} -void modemDisconnect() -{ -#if TINY_GSM_POWERDOWN - // Try to power-off (modem may decide to restart automatically) - // To turn off modem completely, please use Reset/Enable pins - modem.sendAT("+CPOWD=1"); - if (modem.waitResponse(10000L) != 1) { - DBG("+CPOWD=1"); - } - modem.poweroff(); - Serial.println("Poweroff."); -#endif -} diff --git a/host/esp-t-sim7000g/src/main2.cpp b/host/esp-t-sim7000g/src/main2.cpp new file mode 100644 index 0000000000000000000000000000000000000000..036405dc530d2707fb79b11198afd96ba70be78a --- /dev/null +++ b/host/esp-t-sim7000g/src/main2.cpp @@ -0,0 +1,304 @@ +///************************************************************** +// * +// * This sketch connects to a website and downloads a page. +// * It can be used to perform HTTP/RESTful API calls. +// * +// * 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_SIM868 +//// #define TINY_GSM_MODEM_SIM900 +//#define TINY_GSM_MODEM_SIM7000 +//// #define TINY_GSM_MODEM_SIM7000SSL +//// #define TINY_GSM_MODEM_SIM7080 +//// #define TINY_GSM_MODEM_SIM5360 +//// #define TINY_GSM_MODEM_SIM7600 +//// #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 +//// #define TINY_GSM_MODEM_A7 +//// #define TINY_GSM_MODEM_M590 +//// #define TINY_GSM_MODEM_MC60 +//// #define TINY_GSM_MODEM_MC60E +//// #define TINY_GSM_MODEM_ESP8266 +//// #define TINY_GSM_MODEM_XBEE +//// #define TINY_GSM_MODEM_SEQUANS_MONARCH +// +//// 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 +//#ifndef __AVR_ATmega328P__ +//#define SerialAT Serial1 +// +//// or Software Serial on Uno, Nano +//#else +//#include <SoftwareSerial.h> +//SoftwareSerial SerialAT(2, 3); // RX, TX +//#endif +// +//// Increase RX buffer to capture the entire response +//// 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). +//#if !defined(TINY_GSM_RX_BUFFER) +//#define TINY_GSM_RX_BUFFER 650 +//#endif +// +//// 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 +//// NOTE: DO NOT AUTOBAUD in production code. Once you've established +//// communication, set a fixed baud rate using modem.setBaud(#). +//#define GSM_AUTOBAUD_MIN 9600 +//#define GSM_AUTOBAUD_MAX 115200 +// +//// Add a reception delay, if needed. +//// This may be needed for a fast processor at a slow baud rate. +//// #define TINY_GSM_YIELD() { delay(2); } +// +//// Uncomment this if you want to use SSL +//// #define USE_SSL +// +//// Define how you're planning to connect to the internet. +//// This is only needed for this example, not in other code. +//#define TINY_GSM_USE_GPRS true +//#define TINY_GSM_USE_WIFI false +// +//// set GSM PIN, if any +//#define GSM_PIN "" +// +//// Your GPRS credentials, if any +//const char apn[] = "m2m.public.at"; +//const char gprsUser[] = ""; +//const char gprsPass[] = ""; +// +//// Your WiFi connection credentials, if applicable +//const char wifiSSID[] = "YourSSID"; +//const char wifiPass[] = "YourWiFiPass"; +// +//// Server details +//const char server[] = "vsh.pp.ua"; +//const char resource[] = "/TinyGSM/logo.txt"; +// +//#include <TinyGsmClient.h> +//#include <WiFi.h> +//#include <esp_now.h> +// +//// Just in case someone defined the wrong thing.. +//#if TINY_GSM_USE_GPRS && not defined TINY_GSM_MODEM_HAS_GPRS +//#undef TINY_GSM_USE_GPRS +//#undef TINY_GSM_USE_WIFI +//#define TINY_GSM_USE_GPRS false +//#define TINY_GSM_USE_WIFI true +//#endif +//#if TINY_GSM_USE_WIFI && not defined TINY_GSM_MODEM_HAS_WIFI +//#undef TINY_GSM_USE_GPRS +//#undef TINY_GSM_USE_WIFI +//#define TINY_GSM_USE_GPRS true +//#define TINY_GSM_USE_WIFI false +//#endif +// +//#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 +// +//TaskHandle_t Task1; +// +//void on_data_sent(const uint8_t *mac_addr, esp_now_send_status_t status) +//{ +// // go to sleep +//} +// +//void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len) +//{ +// // print mac +// Serial.print("Message recieved: Core "); +// Serial.println(xPortGetCoreID()); +// for (int i = 0; i < 6; i++) { +// Serial.print(mac[i], HEX); +// Serial.print(":"); +// } +// Serial.println(); +// char data[len]; +// memcpy(data, incomingData, len); +// Serial.println(data); +//} +// +//[[noreturn]] void Task1code(void *parameter) +//{ +// Serial.println(xPortGetCoreID()); +// WiFi.mode(WIFI_STA); +// Serial.println("ESPNow init"); +// if (esp_now_init() != ESP_OK) { +// // initialization failed +// Serial.println("ESPNow init failed"); +// // not sure about this +// } +// Serial.println("ESPNow init success"); +// esp_now_register_recv_cb(on_data_recv); +// +// while (true) { +// } +//} +// +//void setup2() +//{ +// // Set console baud rate +// SerialMon.begin(115200); +// delay(10); +// +// // !!!!!!!!!!! +// // Set your reset, enable, power pins here +// // !!!!!!!!!!! +// +// SerialMon.println("Wait..."); +// +// xTaskCreatePinnedToCore(Task1code, /* Function to implement the task */ +// "Task1", /* Name of the task */ +// 10000, /* Stack size in words */ +// nullptr, /* Task input parameter */ +// 0, /* Priority of the task */ +// &Task1, /* Task handle. */ +// 0); /* Core where the task should run */ +// +// // Set GSM module baud rate +// // TinyGsmAutoBaud(SerialAT, GSM_AUTOBAUD_MIN, GSM_AUTOBAUD_MAX); +// modem.setBaud(9600); +// // SerialAT.begin(9600); +// delay(6000); +// +// // Restart takes quite some time +// // To skip it, call init() instead of restart() +// SerialMon.println("Initializing modem..."); +// modem.restart(); +// // modem.init(); +// +// String modemInfo = modem.getModemInfo(); +// SerialMon.print("Modem Info: "); +// SerialMon.println(modemInfo); +// +//#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 loop2() +//{ +//#if TINY_GSM_USE_WIFI +// // Wifi connection parameters must be set before waiting for the network +// SerialMon.print(F("Setting SSID/password...")); +// if (!modem.networkConnect(wifiSSID, wifiPass)) { +// SerialMon.println(" fail"); +// delay(10000); +// return; +// } +// SerialMon.println(" success"); +//#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"); +// delay(10000); +// return; +// } +// SerialMon.println(" success"); +// +// if (modem.isNetworkConnected()) { +// SerialMon.println("Network connected"); +// } +// +//#if TINY_GSM_USE_GPRS +// // GPRS connection parameters are usually set after network registration +// SerialMon.print(F("Connecting to ")); +// SerialMon.print(apn); +// if (!modem.gprsConnect(apn, gprsUser, gprsPass)) { +// SerialMon.println(" fail"); +// delay(10000); +// return; +// } +// SerialMon.println(" success"); +// +// if (modem.isGprsConnected()) { +// SerialMon.println("GPRS connected"); +// } +//#endif +// +// SerialMon.print("Connecting to "); +// SerialMon.println(server); +// if (!client.connect(server, port)) { +// SerialMon.println(" fail"); +// delay(10000); +// return; +// } +// SerialMon.println(" success"); +// +// // Make a HTTP GET request: +// SerialMon.println("Performing HTTP GET request..."); +// 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(); +// +// uint32_t timeout = millis(); +// while (client.connected() && millis() - timeout < 10000L) { +// // Print available data +// while (client.available()) { +// char c = client.read(); +// SerialMon.print(c); +// timeout = millis(); +// } +// } +// SerialMon.println(); +// +// // Shutdown +// +// client.stop(); +// SerialMon.println(F("Server disconnected")); +// +//#if TINY_GSM_USE_WIFI +// modem.networkDisconnect(); +// SerialMon.println(F("WiFi disconnected")); +//#endif +//#if TINY_GSM_USE_GPRS +// modem.gprsDisconnect(); +// SerialMon.println(F("GPRS disconnected")); +//#endif +// +// // Do nothing forevermore +// while (true) { +// delay(1000); +// } +//}