解决了获取时间卡死bug

This commit is contained in:
2024-04-03 09:12:35 +08:00
parent 9ba62457a9
commit 19119e60b2
467 changed files with 90205 additions and 246 deletions

View File

@ -33,39 +33,56 @@ u_char ret[17];
u_char windret[17];
Ticker ticker;
slave myslave;
String log_path;
String log_data;
String getnetData()
{
write_log(log_path,100,"http->get11111");
int err = http->get("/weather/php/Date.php");
if (err != 0)
{
SerialMon.println(F("Date failed to connect"));
delay(10000);
// delay(10000);
vTaskDelay(10000);
return "";
}
write_log(log_path,100,"http->responseStatusCode222");
int status = http->responseStatusCode();
if (!status)
{
delay(10000);
vTaskDelay(10000);
return "";
}
// SerialMon.println(F("Response Headers:"));
write_log(log_path,100,"http->headerAvailable333");
int times_try = 0;
while (http->headerAvailable())
{
if(times_try > 1000)
{
write_log(log_path,100,"http->headerAvailable failed ...");
return "-1";
}
String headerName = http->readHeaderName();
String headerValue = http->readHeaderValue();
// SerialMon.println("Date: " + headerName + " : " + headerValue);
vTaskDelay(100);
times_try++;
}
write_log(log_path,100,"http->isResponseChunked4444");
if (http->isResponseChunked())
{
// SerialMon.println(F("Date The response is chunked"));
}
write_log(log_path,100,"http->responseBody555");
String body = http->responseBody();
http->stop();
return body;
}
bool UpdateData(String path, char *str, size_t lenth, String Contenttype = "")
{
@ -103,7 +120,6 @@ bool UpdateData(String path, char *str, size_t lenth, String Contenttype = "")
Serial.println("hear1");
if (err == 0)
{
http->stop();
return false;
}
@ -245,50 +261,13 @@ void printbytcp(String str)
}
void esp8266_readmeichaung()
void readmeichaung()
{
//读取美创模块
// while (myPort.read() != -1)
// ;
// delay(1000); //等待1s 防止下位机反应不过来
// myPort.println("MLX#");
// delay(10);
// for (int j = 0; j < 8; ++j)
// {
// ret[j] = myPort.read();
// }
// double temprature;
// memcpy(&temprature, ret, 8);
// Serial.println("wendu");
// Serial.println(temprature);
// Serial.println("hello word");
///////////////now///////////////////////////
/////////////////////////////////now///////////////////////////
double temprature = myslave.getMLX();
Serial.println("wendu");
Serial.println(temprature);
Serial.println("hello word");
/////////////////////////////初始化windsensor并测评1<E8AF84>71ᅣ1<EFBF84>77/////////////////////////////////////////////////////////////
// while (myPort.read() != -1)
// ;
// sleep(1);
// myPort.println("WindSensor#");
// delay(210);
// for (int j = 0; j < 17; ++j)
// {
// windret[j] = myPort.read();
// }
// float VV = (windret[3] * 256 + windret[4]) * 1.0 / 100;
// float DD = (windret[5] * 256 + windret[6]) * 1.0 / 10;
// float TT = (windret[7] * 256 + windret[8]) * 1.0 / 100;
// float HH = (windret[9] * 256 + windret[10]) * 1.0 / 100;
// long PP = (windret[13] * 256 + windret[14]) * 256 * 256 + (windret[11] * 256 + windret[12]);
// Serial.println("VV:" + String(VV) + "DD:" + String(DD) + "TT:" + String(TT) + "HH:" + String(HH) + "PP:" + String(PP));
////////////////////////////////now////////////////////////////
myslave.getWehter();
memcpy(windret,myslave.ret,17);
@ -317,16 +296,28 @@ String get_GPS(void)
Serial.println("get GNSS...");
gsmmanger->modem->sendAT(GF("+CGNSINF"));
String gps;
gsmmanger->modem->waitResponse(5000,gps);
String gpsbac;
gsmmanger->modem->waitResponse(5000,gpsbac);
// Serial.println(gps);
return gps;
String Date = gpsbac.substring(14,28);
String temp = Date.substring(0,4) + "-" + Date.substring(4,6) + "-" +Date.substring(6,8) + " " + Date.substring(8,10) + ":" +Date.substring(10,12) + ":" +Date.substring(12,-1);
Date = temp;
if(Date[0] = ',')
{
return "-1";
}
Serial.println(gpsbac);
write_log(log_path,10,"gpsdate:"+Date);
return Date;
}
String log_path;
String log_data;
void setup()
{
Serial2.begin(115200);
@ -346,29 +337,10 @@ void setup()
// pinMode(21, OUTPUT);
// digitalWrite(21, HIGH);
////////////////////////////////////////////////////////////
// return;
//重启esp8266现在不用
// pinMode(5, OUTPUT);
// digitalWrite(5, LOW);
// delay(500);
// digitalWrite(5, HIGH);
// pinMode(22,OUTPUT);
// digitalWrite(22,HIGH);
// pinMode(23,OUTPUT);
// digitalWrite(23,HIGH);
//将原来通过esp8266读取美创写成函数esp8266_readmeichaung(),方便调试。
// myPort.begin(38400, SWSERIAL_8N1, MYPORT_RX, MYPORT_TX, false);
myslave.init(46,45);
sleep(3);
// esp8266_readmeichaung();
readmeichaung();
//原来的SIM800改为现在的AIR780E4G模块使用的是串口2。
gsmmanger = new GSMMannger(2, 19, 20);
@ -382,14 +354,25 @@ void setup()
write_log(log_path,10,"");
write_log(log_path,10,log_data);
write_log(log_path,10,"AIR780E Init Success.");
vTaskDelay(1000);
gsmmanger->modem->sendAT(GF("+CGPIO=1,11,1")); //点灯
gsmmanger->modem->waitResponse("OK");
String gpsbac = get_GPS();
Serial.println(gpsbac);
write_log(log_path,10,"GPS Init Success.");
write_log(log_path,10,"GPS Init ....");
for(int a = 0 ; a<100 ;a++)
{
String gpsbac = get_GPS();
if (gpsbac != "-1")
{
Serial.println(gpsbac);
write_log(log_path,10,"GPS Init Success.");
break;
}
vTaskDelay(1000);
}
vTaskDelay(1000);
//////////////////////////////初始化http模块//////////////////////////////////////////////
// http = new HttpClient(*gsmmanger->client, "82.156.1.111");
@ -429,19 +412,11 @@ void setup()
String lastdate="";
void loop()
{
String Date = getnetData();
String tem = fenge(Date," ",0);
log_path = "/log/"+tem+".txt";
// //擦除myport缓存
// while (myPort.read() != -1)
// ;
// myPort.println("YULIANG#");
// delay(510); //等待500ms
// String yuliang=myPort.readStringUntil('#');
// delay(1010);
// Serial.println("yuliang "+yuliang);
/////////////////NOW/////////////////////
String Date;
/////////////////NOW/////////////////////
// String tem = fenge(Date," ",0);
// log_path = "/log/"+tem+".txt";
write_log(log_path,10,"");
write_log(log_path,10,Date);
@ -450,37 +425,13 @@ void loop()
Serial.println("yuliang "+yuliang);
write_log(log_path,10,"getYuliang :"+yuliang);
// //擦除myport缓存
// while (myPort.read() != -1)
// ;
// myPort.println("YLFZ#");
// delay(510); //等待500ms
// String yuliangfz=myPort.readStringUntil('#');
// delay(1010);
// Serial.println("fuzhao "+yuliangfz);
/////////////////NOW/////////////////////
String yuliangfz = String(myslave.getYuliang());
delay(1010);
Serial.println("fuzhao " + yuliangfz);
log_data ="fuzhao :"+yuliangfz;
write_log(log_path,10,log_data);
// while (myPort.read() != -1)
// ;
// myPort.println("WindSensor#"); //发送指令给无参数
// delay(510); //等待500ms
// for (int j = 0; j < 17; ++j)
// {
// windret[j] = myPort.read(); //读取返回倄1<E58084>71ᅣ1<EFBF84>77
// // Serial.println(ret[j],HEX);
// }
// float VV = (windret[3] * 256 + windret[4]) * 1.0 / 100;
// float DD = (windret[5] * 256 + windret[6]) * 1.0 / 10;
// float TT = (windret[7] * 256 + windret[8]) * 1.0 / 100;
// float HH = (windret[9] * 256 + windret[10]) * 1.0 / 100;
// long PP = (windret[13] * 256 + windret[14]) * 256 * 256 + (windret[11] * 256 + windret[12]);
// Serial.println("VV:" + String(VV) + "DD:" + String(DD) + "TT:" + String(TT) + "HH:" + String(HH) + "PP:" + String(PP));
// //////////////////////////////////////////////////////////////////////////////////////
////////////////////////////NOW///////////////////////////
myslave.getWehter();
memcpy(windret,myslave.ret,17);
@ -492,22 +443,6 @@ void loop()
Serial.println("VV:" + String(VV) + "DD:" + String(DD) + "TT:" + String(TT) + "HH:" + String(HH) + "PP:" + String(PP));
write_log(log_path,10,"VV:" + String(VV) + "DD:" + String(DD) + "TT:" + String(TT) + "HH:" + String(HH) + "PP:" + String(PP));
// //读取美创模块
// delay(1010);
// while (myPort.read() != -1)
// ;
// delay(1000); //等待1s 防止下位机反应不过来
// myPort.println("MLX#");
// delay(10);
// for (int j = 0; j < 8; ++j)
// {
// ret[j] = myPort.read();
// }
// double temprature;
// memcpy(&temprature, ret, 8);
// Serial.println("wendu");
// Serial.println(temprature);
// delay(1000);
////////////////////////////NOW///////////////////////////
String temprature =String(myslave.getMLX());
@ -530,84 +465,67 @@ void loop()
String StationID = IS1Sensor.SensorInfo.serialnumber;
String SensorID = IS1Sensor.SensorInfo.SensorName;
///////////////获取时间
// while (myPort.read() != -1)
// ;
// myPort.println("GETGPS#");
// String gpsbac = myPort.readStringUntil('\n');
// Serial.println(gpsbac);
///////////////获取时间
////////通过GPS获取时间如果获取失败就通过4G访问网页获取。如果获取成功那就对GPS数据进行分割解析出时间。
String gpsbac;
for(int i = 0 ;i < 201 ; i++)
{
write_log(log_path,10,"start get_GPS()");
Date = get_GPS();
// String statnumberstr = fenge(gpsbac, "#", 1);
// String statnumber = fenge(statnumberstr, "_", 1);
// Serial.println(statnumber);
// String Date;
// if (statnumber.toInt() < 3)
// {
// Date = getnetData();
// }
if(Date == "-1") {
write_log(log_path,10,"start getnetData()");
Date = getnetData();
}
else
{
if (hassend == 0)
{
gpsbac = StationID+"#"+Date;
int lennn = gpsbac.length();
char *temp = new char[lennn];
memcpy(temp, gpsbac.c_str(), gpsbac.length());
bool flagsucc = UpdateData("/weather/php/StationGPSinfo.php", temp, lennn);
write_log(log_path,10,"start get_GPS()");
String gpsbac = get_GPS();
Serial.println(gpsbac);
// if (index < 28)
// {
write_log(log_path,10,"start getnetData()");
Date = getnetData();
// }
if (!flagsucc)
{
// sdcard::WriteStringToFile(nameoffile, temp, lennn);
}
else{
Serial.println("Finish Put StationGPSinfo Data");
}
delete[] temp;
}
if (hassend >= 0)
{
hassend--;
}
}
if(Date != "-1") break;
// String Date;
// Date = getnetData();
// str.substring(0, weizhi);
// else
// {
// String datastr = fenge(gpsbac, "#", 0);
// Date = fenge(datastr, "_", 1);
// if (hassend == 0)
// {
// gpsbac = StationID+"#"+gpsbac;
// int lennn = gpsbac.length();
// char *temp = new char[lennn];
// memcpy(temp, gpsbac.c_str(), gpsbac.length());
// String nameoffile = "/gps/" + fenge(Date, " ", 0) + "_" + fenge(fenge(Date, " ", 1), ":", 0) + "_" + fenge(fenge(Date, " ", 1), ":", 1) + "_" + fenge(fenge(Date, " ", 1), ":", 2) + ".gps";
// bool flagsucc = UpdateData("/weather/php/StationGPSinfo.php", temp, lennn);
// if (!flagsucc)
// {
// // sdcard::WriteStringToFile(nameoffile, temp, lennn);
// }
// else{
// Serial.println("Finish Put StationGPSinfo Data");
// }
// delete[] temp;
// }
// if (hassend >= 0)
// {
// hassend--;
// }
// }
if (i==200)
{
write_log(log_path,10," get_GPS and getnetData failed,esp_restart");
esp_restart();
}
vTaskDelay(500);
}
write_log(log_path,10,"Date is : "+Date);
// delay(15000);
// if (fenge(Date, " ", 0)!=lastdate)
// {
// lastdate=fenge(Date, " ", 0);
// while (myPort.read() != -1)
// ;
// myPort.println("ClearYL#");
// ProgrameUper->CheckAndUpdate();
// /* code */
// }
// String Date;
// double temprature;
// String yuliang;
// String yuliangfz;
if (fenge(Date, " ", 0)!=lastdate)
{
lastdate=fenge(Date, " ", 0);
log_path = "/log/"+lastdate+".txt";
myslave.claeryuliang();
ProgrameUper->CheckAndUpdate();
}
/////////*获取相关信息*//////////////////////////
String datestring=fenge(Date, " ", 0) + "_" + fenge(fenge(Date, " ", 1), ":", 0) + "_" + fenge(fenge(Date, " ", 1), ":", 1) + "_" + fenge(fenge(Date, " ", 1), ":", 2);
@ -707,53 +625,4 @@ void loop()
ESP.restart();
#endif
return;
// //////以下位测试代砄1<E7A084>71ᅣ1<EFBF84>77
// delay(3000);
// // int err = http->get("/weather/php/WindsensorUp.php");
// // if (err == 0)
// {
// SerialMon.println(F("failed to connect"));
// delay(10000);
// return;
// }
// int status = http->responseStatusCode();
// SerialMon.print(F("Response status code: "));
// SerialMon.println(status);
// if (!status)
// {
// delay(10000);
// return;
// }
// SerialMon.println(F("Response Headers:"));
// while (http->headerAvailable())
// {
// String headerName = http->readHeaderName();
// String headerValue = http->readHeaderValue();
// SerialMon.println(" " + headerName + " : " + headerValue);
// }
// int length = http->contentLength();
// if (length >= 0)
// {
// SerialMon.print(F("Content length is: "));
// SerialMon.println(length);
// }
// if (http->isResponseChunked())
// {
// SerialMon.println(F("The response is chunked"));
// }
// String body = http->responseBody();
// SerialMon.println(F("Response:"));
// SerialMon.println(body);
// SerialMon.print(F("Body length is: "));
// SerialMon.println(body.length());
// delay(5000);
// // Shutdown
// // http->stop();
}