解决了获取时间卡死bug
This commit is contained in:
361
src/main.cpp
361
src/main.cpp
@ -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();
|
||||
}
|
||||
|
Reference in New Issue
Block a user