155 lines
No EOL
3.7 KiB
C++
155 lines
No EOL
3.7 KiB
C++
#include <Arduino.h>
|
|
|
|
#define SerialMon Serial0
|
|
#define SerialAT Serial1
|
|
|
|
#define MODEM_DEBUG
|
|
|
|
#ifdef MODEM_DEBUG
|
|
#define TINY_GSM_DEBUG SerialMon
|
|
#endif
|
|
|
|
#define TINY_GSM_MODEM_SIM7600
|
|
#define TINY_GSM_USE_GPRS true
|
|
#define TINY_GSM_USE_WIFI false
|
|
#include <TinyGsmClient.h>
|
|
|
|
#define MODEM_RX 17
|
|
#define MODEM_TX 18
|
|
#define MODEM_BAUD 115200
|
|
|
|
const char apn[] = "pwg";
|
|
|
|
#ifdef MODEM_DEBUG
|
|
#include <StreamDebugger.h>
|
|
StreamDebugger debugger(SerialAT, SerialMon);
|
|
TinyGsm modem(debugger);
|
|
#else
|
|
TinyGsm modem(SerialAT);
|
|
#endif
|
|
|
|
TinyGsmClient client(modem);
|
|
|
|
|
|
void checkConnection() {
|
|
SerialMon.println("Pinging httpbin.org...");
|
|
|
|
String resolved_ip_addr;
|
|
uint32_t rep_data_packet_size;
|
|
uint32_t tripTime;
|
|
uint8_t TTL;
|
|
|
|
int pingResult = modem.ping("httpbin.org", resolved_ip_addr, rep_data_packet_size, tripTime, TTL);
|
|
if (pingResult == 1) {
|
|
SerialMon.println("Ping successful!");
|
|
SerialMon.print("Resolved IP: ");
|
|
SerialMon.println(resolved_ip_addr);
|
|
SerialMon.print("Reply Data Packet Size: ");
|
|
SerialMon.println(rep_data_packet_size);
|
|
SerialMon.print("Round Trip Time (ms): ");
|
|
SerialMon.println(tripTime);
|
|
SerialMon.print("TTL: ");
|
|
SerialMon.println(TTL);
|
|
} else {
|
|
SerialMon.print("Ping failed with result code: ");
|
|
SerialMon.println(pingResult);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
void setup() {
|
|
SerialMon.begin(115200);
|
|
SerialMon.println("Init...");
|
|
|
|
SerialAT.begin(MODEM_BAUD, SERIAL_8N1, MODEM_RX, MODEM_TX);
|
|
|
|
delay(3000);
|
|
|
|
SerialMon.println("Serial initialized. Now restarting modem...");
|
|
modem.restart();
|
|
|
|
SerialMon.println("Modem restarted. Initializing modem...");
|
|
|
|
modem.init();
|
|
SerialMon.println("Modem initialized.... Modem info:");
|
|
|
|
String info = modem.getModemInfo();
|
|
SerialMon.println(info);
|
|
|
|
|
|
SerialMon.println("Getting SIM status...");
|
|
|
|
if (modem.getSimStatus() != SIM_READY) {
|
|
SerialMon.println("SIM not ready!");
|
|
while (true);
|
|
}
|
|
|
|
SerialMon.println("SIM ready. Setting Network mode...");
|
|
|
|
if (!modem.setNetworkMode(MODEM_NETWORK_AUTO)) {
|
|
Serial.println("Set network mode failed!");
|
|
}
|
|
String mode = modem.getNetworkModeString();
|
|
SerialMon.print("Current network mode : ");
|
|
SerialMon.println(mode);
|
|
|
|
SerialMon.println("Setting APN...");
|
|
|
|
if (!modem.setNetworkAPN(apn)) {
|
|
SerialMon.println("Setting APN failed!");
|
|
while (true);
|
|
}
|
|
|
|
SerialMon.println("APN Set. Waiting for registration...");
|
|
|
|
int16_t sq;
|
|
RegStatus status = REG_NO_RESULT;
|
|
while (status == REG_NO_RESULT || status == REG_SEARCHING || status == REG_UNREGISTERED) {
|
|
status = modem.getRegistrationStatus();
|
|
switch (status) {
|
|
case REG_UNREGISTERED:
|
|
case REG_SEARCHING:
|
|
sq = modem.getSignalQuality();
|
|
SerialMon.printf("[%lu] Signal Quality:%d\n", millis() / 1000, sq);
|
|
delay(1000);
|
|
break;
|
|
case REG_DENIED:
|
|
SerialMon.println("Network registration was rejected, please check if the APN is correct");
|
|
return ;
|
|
case REG_OK_HOME:
|
|
SerialMon.println("Online registration successful");
|
|
break;
|
|
case REG_OK_ROAMING:
|
|
SerialMon.println("Network registration successful, currently in roaming mode");
|
|
break;
|
|
default:
|
|
SerialMon.printf("Registration Status:%d\n", status);
|
|
delay(1000);
|
|
break;
|
|
}
|
|
}
|
|
|
|
String ueInfo;
|
|
if (modem.getSystemInformation(ueInfo)) {
|
|
SerialMon.print("Inquiring UE system information:");
|
|
SerialMon.println(ueInfo);
|
|
}
|
|
|
|
if (!modem.setNetworkActive()) {
|
|
SerialMon.println("Enable network failed!");
|
|
}
|
|
delay(5000);
|
|
|
|
String ipAddress = modem.getLocalIP();
|
|
SerialMon.print("Network IP:");
|
|
SerialMon.println(ipAddress);
|
|
|
|
checkConnection();
|
|
}
|
|
|
|
|
|
|
|
void loop() {
|
|
|
|
} |