最近这两天,微博、微信、抖音、知乎等网络平台都上线了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文档,根据需求来选择:
- 腾讯位置服务
- 百度地图开放平台
- 高德开放平台
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
嵌入式
+关注
关注
4981文章
18271浏览量
288271 -
物联网设备
+关注
关注
1文章
229浏览量
19481
原文标题:嵌入式设备如何显示IP属地?
文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
嵌入式热门发展方向有哪些?
热门发展方向,包括但不限于: 1.物联网: 随着物联网的快速发展,嵌入式系统在物联网领域的应用也越来越广泛。嵌入式系统可以用于物联网设备的控制、监测和数据处理等方面。例如,在服务领域,如远程点菜器等
发表于 04-11 14:17
嵌入式系统发展前景?
嵌入式系统发展前景? 嵌入式系统,从定义上来说,是一种专用的计算机系统,它被设计用来控制、监视或者帮助操作一些设备、装置或机器。在过去的几年里,嵌入式系统已经取得了显著的进步,而未来,
发表于 02-22 14:09
嵌入式软件开发应该掌握哪些知识?
两个部分组成,其中嵌入式软件是指在嵌入式系统中运行的程序,用于控制硬件并提供特定的功能和服务。嵌入式软件应用广泛,包括汽车、医疗设备、智能家居、智能穿戴、工业自动化等众多领域。 二、
发表于 02-19 11:23
嵌入式学习步骤
开发。 嵌入式学习步骤总结如下: (1).确定目标平台:选择适合您要开发的嵌入式系统的硬件平台。这取决于您要控制的设备以及您需要执行的任务。 (2).选择编程语言:嵌入式系统通常使用C
发表于 02-02 15:24
嵌入式自学好书推荐
嵌入式自学好书推荐 在数字时代的浪潮中,嵌入式系统一直是数字电子产品中的重要组成部分。无论是家用电器、工业控制、汽车电子、医疗保健、军事应用还是物联网,嵌入式系统都无处不在,展现了广阔的前景。随着
发表于 01-11 15:13
嵌入式硬件和软件哪个好?
,他的领域是比较广泛的,在一些消费电子,通讯设备等这些方面。因为领域大,相对而言就业领域也是比较大的,人才需求量也是一样。嵌入式软件工程师相对于硬件工程师来说,人才需求比硬件工程师要大,软件学习门槛较低
发表于 12-05 15:17
为什么嵌入式没有35岁危机?
。 嵌入式技术是指将计算机系统嵌入到其他设备或系统中的一种技术。它广泛应用于汽车、家电、医疗设备等领域,并且在智能手机、智能家居和物联网等新兴领域中扮演着重要角色。那么,为什么
发表于 11-17 10:33
什么是嵌入式Linux?
Linux到底是什么呢? 嵌入式linux 是将日益流行的Linux操作系统进行裁剪修改,使之能在嵌入式计算机系统上运行的一种操作系统。简单来说,是除了电脑之外可以运行程序的设备,将CPU嵌入
发表于 10-11 13:47
STM32嵌入式操作系统介绍
嵌入式操作系统的特点• 嵌入式操作系统是一种用途广泛的系统软件,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等。• 负责嵌入式系统的全部软
发表于 09-28 06:59
嵌入式编程和微控制器应用
还介绍了外设的使用,如键区、LCD显示器以及其他常用的嵌入式微控制器相关设备。u3000u3000作者简介:u3000u3000RICHARDH.BARNETT是PURDUE大学的电子工程技术专业
发表于 09-20 07:52
嵌入式新手应该怎么学?
的图形界面操作都要转化为命令传输给硬件的。 4、Linux设备驱动的架构要了解,结合原理图和Linux设备驱动相关书籍把每一行代码分析清楚。 上面只是一些简单的嵌入式学习要点,你要先掌握这些,才能再继续
发表于 09-08 10:22
嵌入式学习路线你知道吗?
外围设备的硬件工作原理,以及如何使用C语言来编程、控制这些硬件。除了要学习对硬件编程之外,还需要学习嵌入式硬件的知识,但是对于嵌入式软件工程师来讲,重点是学习硬件的工作原理,在掌握硬件工作原理的基础上
发表于 06-14 16:00
如何降低嵌入式触摸显示器的亮度?
随着科技的不断发展,嵌入式触摸显示器在工业自动化、医疗、交通等领域得到了广泛应用。但在某些场景下,亮度过高的屏幕可能会对用户造成不适,同时也会增加屏幕功耗,降低设备使用寿命。因此,合理降低嵌入
评论