Files
gaoguangpu/src/GSMMannager.cpp
2024-07-16 11:15:42 +08:00

165 lines
4.4 KiB
C++
Raw Blame History

#include "GSMMannager.h"
// #include "SoftwareSerial.h"
// uint32_t AIR_AutoBaud();
const char apn[] = "CMNET";
const char gprsUser[] = "";
const char gprsPass[] = "";
HardwareSerial *MySerial;
GSMMannger::GSMMannger(int serialnumber, int rx, int tx)
{
MySerial=new HardwareSerial(serialnumber);
modem = new TinyGsm(*MySerial);
MySerial->begin(115200, SERIAL_8N1, rx, tx);
client = new TinyGsmClient(*modem);
// !!!!!!!!!!! <20>ϵ<EFBFBD>
// Serial.println("Wait...");
write_log(log_path,"Wait...",10);
pinMode(37, OUTPUT); //pin32控制sim800C电源 高电平上电 低电平断电
digitalWrite(37, HIGH);
vTaskDelay(100);
digitalWrite(37, LOW);
// Serial.println("Wait...1");
write_log(log_path,"Wait...1",10);
vTaskDelay(1800);
// Set your reset, enable, power pins here
// !!!!!!!!!!!
vTaskDelay(5000);
// Set GSM module baud rate
// MySerial->readString();
int banddd=TinyGsmAutoBaud(*MySerial, rx, tx, 9600,460800);
if (banddd==0)
{
// Serial.println("fail to connect sim800 reboot");
write_log(log_path,"fail to connect sim800 reboot",10);
esp_restart();
/* code */
}
// Serial.println("band is" + String(banddd));
write_log(log_path,"band is" + String(banddd),10);
vTaskDelay(6000);
modem->init();
String modemInfo = modem->getModemInfo();
if (modemInfo=="")
{
// Serial.println("fail to getmode reboot");
write_log(log_path,"fail to getmode reboot",10);
esp_restart();
/* code */
}
// Serial.print("Modem Info: ");
write_log(log_path,"Modem Info: ",10);
//以后用4G再
// SerialMon.println(modemInfo);
write_log(log_path,modemInfo,10);
if (GSM_PIN && modem->getSimStatus() != 3)
{
modem->simUnlock(GSM_PIN);
}
// SerialMon.print("Waiting for network...");
write_log(log_path,"Waiting for network...",10);
if (!modem->waitForNetwork())
{
// SerialMon.println(" fail");
write_log(log_path,"fail",10);
vTaskDelay(10000);
return;
}
// SerialMon.println(" success");
write_log(log_path,"success",10);
if (modem->isNetworkConnected())
{
// SerialMon.println("Network connected");
write_log(log_path,"Network connected",10);
}
// SerialMon.print(F("Connecting to "));
write_log(log_path,"Connecting to ",10);
// SerialMon.print(apn);
write_log(log_path,apn,10);
if (!modem->gprsConnect(apn, gprsUser, gprsPass))
{
// SerialMon.println(" fail");
write_log(log_path,"fail",10);
vTaskDelay(10000);
return;
}
// SerialMon.println(" success");
write_log(log_path,"success",10);
if (modem->isGprsConnected())
{
// SerialMon.println("GPRS connected");
write_log(log_path,"GPRS connected",10);
}
modem->NTPServerSync();
}
String GSMMannger::I2toS(int n)
{
if (n>=10)
{
return String(n);
} else{
return "0"+ String(n);
}
}
String GSMMannger::GetDataAndTime() {
//String str=modem->getGSMDateTime(DATE_FULL);
if(modem->getNetworkTime(&year,&month,&day,&hour,&minute, &second,&timezone))
{
String date=String(year)+"-"+I2toS(month)+"-"+I2toS(day)+" "+I2toS(hour)+":"+I2toS(minute)+":"+I2toS(second);
return date;}
return "-1";
}
void GSMMannger::loop()
{
if (!modem->isNetworkConnected())
{
SerialMon.println("Network disconnected");
if (!modem->waitForNetwork(20000L, true))
{
SerialMon.println(" re wait For Network fail");
esp_restart();
vTaskDelay(10000);
return;
}
if (modem->isNetworkConnected())
{
SerialMon.println("Network re-connected");
}
// and make sure GPRS/EPS is still connected
if (!modem->isGprsConnected())
{
SerialMon.println("GPRS disconnected!");
SerialMon.print(F("Connecting to "));
SerialMon.print(apn);
if (!modem->gprsConnect(apn, gprsUser, gprsPass))
{
SerialMon.println(" set apn gprsuser gprspass fail");
esp_restart();
vTaskDelay(10000);
return;
}
if (modem->isGprsConnected())
{
SerialMon.println("GPRS reconnected");
}
}
}
}