165 lines
4.4 KiB
C++
165 lines
4.4 KiB
C++
#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");
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|