最近這兩天,微博、微信、抖音、知乎等網絡平臺都上線了IP屬地功能,用戶的個人主頁,或者在發表視頻、博文、評論、投票時,會顯示用戶當前的IP屬地,國內用戶顯示省份/地區,國外用戶顯示國家/地區。IP屬地的上線讓很多國外、本地博主現出了原形,出現了IP屬地和資料地址不符的情況。
IP屬地來了,不讓物聯網設備“裸泳”,給你的設備加個自動獲取IP屬地的功能吧!
對于嵌入式物聯網設備,除了一些特殊場合,比如環境監測、路徑規劃、定位追蹤等,需要通過GPS模塊獲取精確的地理位置,對于一些天氣預報、疫情數據相關的設備來說,地理位置要求沒那么精確,只需要基本的時區、國家、城市/省份信息即可。本文介紹,如何基于已有的WiFi/4G/5G聯網功能,添加一個自動獲取IP屬地功能。共分為以下三個步驟:
- 接口獲取
- 接口訪問
- JSON數據解析
1.獲取API接口
IP定位需要使用公網IP,比如123.105.127.111,而不能是局域網IP,比如192.169.1.100。常用的IP定位接口有兩種:- 一種是不需要知道當前設備的IP地址,直接訪問接口,接口會返回設備的IP地址。
- 一種是已知設備的IP地址,在訪問接口時傳入IP地址參數,接口會返回傳入IP地址的經緯度、時區、國家、省份、城市等信息。
遠程服務器地址:103.205.5.249 遠程服務器端口號:80 API接口:http://api.k780.com/?app=ip.local&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json 返回的JSON數據:
{ "success":"1", "result":{ "ip":"102.212.134.15", "proxy":"1", "att":"中國,北京", "operators":"聯通" } } 先用網絡調試助手測試一下:
API接口沒問題,下一步使用嵌入式設備來完成自動獲取IP地址。
2.嵌入式訪問接口
聯網模塊主要有WiFi或移動網絡4G模塊,這里以比較常用的ESP8266 WiFi模塊+STM32為例,來演示通過串口AT指令來訪問IP定位接口,下面是我使用STM32配置ESP8266的過程:
3.JSON數據解析
嵌入式設備可以使用的JSON解析庫,常用的JSON解析庫有cJSON和Jansson等。如果你覺得使用解析庫會額外的增加程序大小,你也可以使用字符串操作的一些函數,從返回的JSON字符串中提取出你想要的數據,這樣會節省一部分微控制器的ROM空間。下面直接給出基于cJSON庫,對以上IP定位接口返回數據進行解析的函數:#include"cJSON.h" uint8_tparse_api_data(char*jsonstr) { cJSON*root; cJSON*result; char*ip; char*loc; char*net; //printf("recvdata:%d-%s ",strlen((constchar*)jsonstr),jsonstr);//JSON原始數據 root=cJSON_Parse((constchar*)USART2_RX_BUF); if(root!=0) { printf("---JSONformatok--- "); result=cJSON_GetObjectItem(root,"result"); ip=cJSON_GetObjectItem(result,"ip")->valuestring;//164.123.44.15 loc=cJSON_GetObjectItem(result,"att")->valuestring;//中國,北京 net=cJSON_GetObjectItem(result,"operators")->valuestring;//聯通 printf("ip:%s loc:%s net:%s ",ip,loc,net); } else { printf("JSONformaterror:%s ",cJSON_GetErrorPtr());//輸出json格式錯誤信息 return1; } cJSON_Delete(root); return0; }
4.商用API接口
還有一些其他的免費接口:/*返回IP地址,地區、時序、國家等信息,默認是英文的*/ http://ip-api.com/json/ /*可選中文*/ http://ip-api.com/json/?lang=zh-CN /*SOHU接口,非標準JSON*/ http://pv.sohu.com/cityjson /*國內的PCOnline提供的接口,定位不準確*/ http://whois.pconline.com.cn/ipJson.jsp?json=true&ip=14.16.139.216 /*國外geoplugin公司提供的接口,包括經緯度、時區、貨幣單位、對美元匯率等信息*/ http://www.geoplugin.net/json.gp以上免費接口都有隨時關停的可能,如果用于商業用途,建議還是選擇第三方商業公司提供的接口,或者自己開發API接口。本文推薦使用三大地圖提供商的IP定位服務,一般支持自動定位,或查詢指定IP地址對應的地址,返回信息一般包括國家,省份/城市,行政區劃代碼,經緯度等信息,數據格式一般支持JSON或XML,請求方式為GET或POST,可以進入官方網站查看詳細的API文檔,根據需求來選擇:
- 騰訊位置服務
- 百度地圖開放平臺
- 高德開放平臺
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
嵌入式
+關注
關注
5149文章
19655瀏覽量
317284 -
物聯網設備
+關注
關注
1文章
240瀏覽量
20257
原文標題:嵌入式設備如何顯示IP屬地?
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
熱點推薦
嵌入式工業顯示器如何提升自動化設備的操作效率??
在工業 4.0 的浪潮下,自動化設備在各行業中的應用愈發廣泛,而嵌入式工業顯示器作為自動化設備的關鍵人機交互界面,其性能優劣直接影響著設備的
嵌入式開發入門指南:從零開始學習嵌入式
特定功能的計算機系統,廣泛應用于智能家居、工業控制、醫療設備、車載系統等領域。 2. 學習嵌入式開發的前置知識熟悉C語言編程掌握基本的數據結構與算法了解數字電路與微控制器原理熟悉Linux操作系統
發表于 05-15 09:29
嵌入式機器學習的應用特性與軟件開發環境
作者:DigiKey Editor 在許多嵌入式系統中,必須采用嵌入式機器學習(Embedded Machine Learning)技術,這是指將機器學習模型部署在資源受限的設備(如微控制器、物聯網

嵌入式主板的概述與發展
隨著科技的迅猛發展,嵌入式系統在現代電子產品中扮演著越來越重要的角色。嵌入式主板作為嵌入式系統的核心組件之一,承擔著控制、處理和通訊等多種功能。本文將對嵌入式主板的基本概念、構成部分、

新手怎么學嵌入式?
新手怎么學嵌入式? 在科技飛速發展的今天,嵌入式技術已經滲透到我們生活的各個角落,從智能手機到智能家居,從汽車電子到醫療設備。對于新手而言,嵌入式技術就像是一座充滿神秘和機遇的寶藏,等
發表于 12-12 10:51
android如何獲取本機ip地址及ip歸屬地
# 前言 # 本篇文章主要介紹android如何獲取本機ip地址及ip歸屬地。 ? # 定義 # ip地址是指手機在連接到互聯網時所獲得的唯一網絡地址。
IP地址歸屬地離線庫——網絡安全行業的基石
地址歸屬地離線庫是網絡安全行業的基石。 網絡安全行業可以使用IP地址離線庫來進行安全防御: l?根據IP地址地理信息的篩選 IP地址歸屬地離
嵌入式系統與物聯網的結合
隨著科技的飛速發展,嵌入式系統和物聯網(IoT)已經成為現代技術領域的重要組成部分。嵌入式系統是指嵌入到設備或系統中的專用計算機系統,而物聯網則是指通過互聯網將各種
什么是嵌入式?一文讀懂嵌入式主板
在現代科技浪潮中,嵌入式技術已成為支撐各種智能設備和系統運行的核心力量。那么,究竟什么是嵌入式?嵌入式系統,顧名思義,是將計算機的硬件和軟件嵌入
嵌入式主板是什么意思?嵌入式主板全面解析
嵌入式主板,通常被稱為嵌入式系統的核心組件,是一種用于控制和數據處理的計算機硬件,其設計旨在嵌入特定設備中執行專門任務。嵌入式主板如同是
評論