ESP32读取潮汐数据,写的有点烂,将就着能用。
const char* server = "mds.nmdis.org.cn";
2、变量说明:
String line; //保存网站返回的json数据;
String TdataTemp,TdataTempOK; //当前日期;查询网站数据用,是否已正确接收当前日期的数据。
int a[24]; //json数据接收a0-a23每小时的潮位;cs0/cg0—cs3/cg3/海平面高度239cm共33个;
String aOK;//当前小时内是否已写入到superchart
void visitServer()
{
TdataTempOK="NO";
line_cs="";
int Int2line1,Int2line2;
String lineTemp;
if(month()<10){
TdataTemp=String(year())+"0"+String(month());
}
else
{TdataTemp=String(year())+String(month());}
if(day()<10){
TdataTemp=TdataTemp+"0"+String(day());
}
else
{TdataTemp=TdataTemp+String(day());}
WiFiClientSecure clientcnss;
clientcnss.setFingerprint(fingerprint);
if (!clientcnss.connect(host, httpsPort)) {
Serial.println("connection failed");
return;
}
String url = "/tide/%E9%9D%92%E5%B2%9B/"+TdataTemp+".html";
clientcnss.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko\r\n" +
"Connection: close\r\n\r\n");
while (clientcnss.connected()) {
line = clientcnss.readStringUntil('\n');
//Serial.println(line);
if(line.startsWith(" <span id=\"daten"))
{
Int2line1=line.indexOf("年");
Tdaten=line.substring(Int2line1+3,line.length()-8);
//Serial.println(Tdaten);
}
if(line.startsWith(" <div id=\"tab")){
Int2line1=line.indexOf("时间");
Int2line2=line.indexOf("高度");
line_cs=line.substring(Int2line1+15,Int2line2-18);
line_cs.replace("</td><td>","\t");
line_cg=line.substring(Int2line2+15,line.length()-34);
line_cg.replace("</td><td>","\t");
}
if(line.startsWith(" var heights")){
for(int i=0;i<24;i++)
{line = clientcnss.readStringUntil('\n');
lineTemp=line.substring(3,line.length()-5);
a[i]=lineTemp.toInt();
}
break;
}
}
if(line_cs=="") //是否server返回有效数据
{Serial.println("读取潮汐数据失败??");
}
else
{
TdataTempOK=TdataTemp+"OK";
}
//关闭链接
clientcnss.stop();
} |