From a93c0382e9293cb32644642e26033f2d06684911 Mon Sep 17 00:00:00 2001
From: Zoe Pfister <zoe.pfister@student.uibk.ac.at>
Date: Wed, 26 Oct 2022 13:16:58 +0200
Subject: [PATCH] WIP: Trying to get a connection

---
 host/esp-t-sim7000g/platformio.ini |   3 +
 host/esp-t-sim7000g/src/main.cpp   | 393 -----------------------------
 host/esp-t-sim7000g/src/main2.cpp  | 304 ++++++++++++++++++++++
 3 files changed, 307 insertions(+), 393 deletions(-)
 delete mode 100644 host/esp-t-sim7000g/src/main.cpp
 create mode 100644 host/esp-t-sim7000g/src/main2.cpp

diff --git a/host/esp-t-sim7000g/platformio.ini b/host/esp-t-sim7000g/platformio.ini
index 4533a79..47649fe 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 6585eff..0000000
--- 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 0000000..036405d
--- /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);
+//	}
+//}
-- 
GitLab