ESP8266通過WIFI獲取IP定位信息

ESP8266通過WIFI獲取IP定位信息

Arduino使用ESP8266聯網獲取外網IP地址並上報

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>

ESP8266WiFiMulti WiFiMulti;
//申請實例對象
WiFiClient client;
HTTPClient http;
//獲取外網的host
String getipHostapi="http://ip.catr.cn";
    //http://ipinfo.io/ip     //直接取值無需解析(*)
    //https://2020.ip138.com/ //通過特徵碼截取(**)
    //http://ip.catr.cn/      //通過特徵碼截取(***)工業和信息化部電信研究院
//經測試,最後個速度較快
//通過獲得到的html源碼進行解析IP地址
//如果有html代碼找特徵碼 唯一性哦
//解析關鍵方法   htmlcode請求後的返回值
String getip138(String htmlcode)
{  
  String bstr="";
  String estr="";
  
  if(getipHostapi.indexOf("ip.catr.cn")>0)
  {
    bstr="keyword=";
    estr="\" style=\"color:";
  }
  if(getipHostapi.indexOf("ip138.com")>0)
  {
    bstr="?ip=";
    estr="&action";
  }
  
  int indexStart = htmlcode.indexOf(bstr);//特徵碼1起始位置
  int endIndex =htmlcode.indexOf(estr);//特徵碼2位置
  int beglen=bstr.length();//特徵碼1的長度
  return htmlcode.substring(indexStart+beglen,endIndex);//此函數的意義要理解
}
/*
HTTP狀態碼
狀態代碼有三位數字組成,第一個數字定義了響應的類別,共分五種類別:

1xx:指示信息–表示請求已接收,繼續處理
2xx:成功–表示請求已被成功接收、理解、接受
3xx:重定向–要完成請求必須進行更進一步的操作
4xx:客戶端錯誤–請求有語法錯誤或請求無法實現
5xx:服務器端錯誤–服務器未能實現合法的請求

常見狀態碼:
200 OK //客戶端請求成功
400 Bad Request //客戶端請求有語法錯誤,不能被服務器所理解
401 Unauthorized //請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用
403 Forbidden //服務器收到請求,但是拒絕提供服務
404 Not Found //請求資源不存在,eg:輸入了錯誤的URL
500 Internal Server Error //服務器發生不可預期的錯誤
503 Server Unavailable //服務器當前不能處理客戶端的請求,一段時間後可能恢復正常
*/

注意點:
1)get請求時要加 addHeader不然會拒絕等問題
2)要有延時以便有相應時間
3)根據int httpCode = http.GET();的返回值進行判斷 是否200等 狀態碼見上面
4)loop(){進行請求並判斷}
有任何問題聯繫,關注哦

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章