SIM800x模块的GSM定位服务及其与Yandex.Locator API的配合



不幸的是,谷歌对GSM模块的许多用户而言,封锁了2-3个月的API并将其转移到付费平台上,以通过该模块可见的手机信号塔的坐标确定位置。因此,AT + CIPGSMLOC团队的功能已停止SIMCom Wireless Solutions制造的SIM800系列模块上使用。在本文中,我将告诉您如何使用Yandex- Yandex.Locator提供的类似服务解决问题

我们省略了Yandex接收蜂窝塔坐标的方法,主要是可以使用此免费服务并获取以下数据:纬度,经度,海拔以及每个参数的近似误差。本文的主要目的是提供一个简短的教程,介绍如何从Yandex快速过渡到API,而不是Google不再提供的服务。

下面作为示例,我们将仅获取模块位置的纬度和经度。

所以我们开始吧


首先,您需要阅读用户协议,位于:yandex.ru/legal/locator_api。应特别注意第3.6节。本用户协议的内容,该协议指出Yandex保留随时更改/纠正或更新Yandex.Locator API的权利,恕不另行通知

转到yandex.ru/dev/locator/keys/get并将您先前创建的Yandex帐户添加到开发组。这些操作将使您获得访问此服务的密钥。


写下或保存接收到的密钥。

执行完这些步骤后,您将可以访问yandex.ru/dev/locator/doc/dg/api/geolocation-api-docpage页面,其中提供了有关Yandex.Locator服务机制的基本信息。

要为Yandex.Locator服务生成cURL格式的XML请求,您将需要获取有关“可见”模块单元塔的信息:

  • 国家代码-国家代码
  • operatorid-移动网络代码
  • cellid-单元格ID
  • lac-位置​​码

可以通过发送命令“ AT + CNETSCAN”从模块获取此信息。

从模块收到的信息
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:59,Cellid:2105,Arfcn:96,Lac:1E9E,Bsic:31<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:54,Cellid:2107,Arfcn:18,Lac:1E9E,Bsic:3A<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:45,Cellid:10A9,Arfcn:97,Lac:1E9E,Bsic:11<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:41,Cellid:2108,Arfcn:814,Lac:1E9E,Bsic:1F<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:43,Cellid:5100,Arfcn:13,Lac:1E9E,Bsic:2B<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:39,Cellid:5102,Arfcn:839,Lac:1E9E,Bsic:1A<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:38,Cellid:2106,Arfcn:104,Lac:1E9E,Bsic:0A<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:37,Cellid:0FE7,Arfcn:12,Lac:1E9E,Bsic:24<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:44,Cellid:14C8,Arfcn:91,Lac:1E9E,Bsic:24<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:37,Cellid:04B3,Arfcn:105,Lac:1E9E,Bsic:3A<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:47,Cellid:29A0,Arfcn:70,Lac:39BA,Bsic:09<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:43,Cellid:0FDD,Arfcn:590,Lac:39BA,Bsic:09<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:44,Cellid:29A1,Arfcn:84,Lac:39BA,Bsic:10<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:40,Cellid:8F95,Arfcn:81,Lac:39BA,Bsic:03<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:43,Cellid:0FDF,Arfcn:855,Lac:39BA,Bsic:24<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:37,Cellid:299C,Arfcn:851,Lac:39BA,Bsic:17<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:37,Cellid:0FDE,Arfcn:852,Lac:39BA,Bsic:1B<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:35,Cellid:299F,Arfcn:72,Lac:39BA,Bsic:10<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:33,Cellid:28A5,Arfcn:66,Lac:396D,Bsic:25<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:33,Cellid:2A8F,Arfcn:71,Lac:39BA,Bsic:23<CR><LF>
Operator:"MOTIV",MCC:250,MNC:20,Rxlev:46,Cellid:39D2,Arfcn:865,Lac:4D0D,Bsic:14<CR><LF>
Operator:"MOTIV",MCC:250,MNC:20,Rxlev:36,Cellid:09EE,Arfcn:866,Lac:4D0D,Bsic:25<CR><LF>
Operator:"MOTIV",MCC:250,MNC:20,Rxlev:28,Cellid:09ED,Arfcn:869,Lac:4D0D,Bsic:22<CR><LF>
Operator:"MOTIV",MCC:250,MNC:20,Rxlev:28,Cellid:09EF,Arfcn:861,Lac:4D0D,Bsic:17<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:66,Cellid:58FE,Arfcn:1021,Lac:00EC,Bsic:0A<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:50,Cellid:58FD,Arfcn:1016,Lac:00EC,Bsic:08<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:49,Cellid:58FF,Arfcn:1023,Lac:00EC,Bsic:09<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:46,Cellid:F93B,Arfcn:59,Lac:00EC,Bsic:20<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:50,Cellid:381B,Arfcn:1020,Lac:00EC,Bsic:0A<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:37,Cellid:3819,Arfcn:42,Lac:00EC,Bsic:08<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:34,Cellid:4C0F,Arfcn:43,Lac:00EC,Bsic:0A<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:33,Cellid:0817,Arfcn:26,Lac:00EC,Bsic:27<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:34,Cellid:3A5D,Arfcn:1017,Lac:00E9,Bsic:34<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:33,Cellid:3D05,Arfcn:1018,Lac:00EC,Bsic:1F<CR><LF>

请务必注意,将来您将需要将模块有关Cellid和Lac的响应中的数据从十六进制转换为十进制。

现在,我们需要生成XML数据来访问Yandex服务器,该服务器将来将合并为一个元素。

数据表
xml=<ya_lbs_request><common><version>1.0</version><api_key>
...88-
</api_key></common>
<gsm_cells>
<cell><countrycode>
250
(MCC)
</countrycode><operatorid>
2
(MNC)
</operatorid><cellid>
8453
Cellid 16 10 ( — 2105)
</cellid><lac>
7838
Lac , 16 10 ( – 1E9E)
</lac></cell>
...
, cell -
</gsm_cells>
<ip><address_v4>
10.137.92.60
IP GPRS , ‘AT+SAPBR=2,1’ – .
</address_v4></ip></ya_lbs_request>


因此,将生成以下形式的长度为1304个字符的XML消息:

信息
xml=<ya_lbs_request><common><version>1.0</version><api_key>{    }</api_key></common><gsm_cells><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>8453</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>8455</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>4265</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>8456</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>20736</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>20738</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>8454</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>4071</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>5320</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>1203</cellid><lac>7838</lac></cell></gsm_cells><ip><address_v4>10.137.92.60</address_v4></ip></ya_lbs_request>


该消息基于Megafon运营商的手机信号塔上的数据,可以补充以下数据:通过命令“ AT + CNETSCAN”接收到的模块可以看到的其他塔架上的塔,以提高发布坐标的可靠性。

使用模块并获取当前坐标


AT-log与模块一起工作
>AT+SAPBR=3,1,”Contype”,”GPRS” //     
<OK
>AT+SAPBR=3,1,”APN”,”internet” //  APN 
<OK
>AT+SAPBR=1,1 //    GPRS 
<OK //  
>AT+SAPBR=2,1 //   IP     
<+SAPBR: 1,1,”10.137.92.60” //  IP     XML-
<
<OK
>AT+HTTPINIT
<OK
>AT+HTTPPARA=”CID”,1
<OK
>AT+HTTPPARA=”URL”,”http://api.lbs.yandex.net/geolocation”
<OK
>AT+HTTPDATA=1304,10000 //   –   XML-
<DOWNLOAD //    XML-
< //    XML-
<OK
>AT+HTTPACTION=1
<OK
<
<+HTTPACTION: 1,200,303 // 200 –  , 303 –  303  
>AT+HTTPREAD=81,10
<+HTTPREAD: 10
<60.0330963 //     
<OK
>AT+HTTPREAD=116,10
<+HTTPREAD: 10
<30.2484303 //     
>AT+HTTPTERM
<OK

这样,我们得到了模块的当前坐标:60.0330963,30.2484304。
随着蜂窝塔发送的数据数量的增加,位置确定的准确性将成比例地增加。

有关Yandex.Locator服务的响应内容以及所需数据选择的更多详细信息,请访问:yandex.ru/dev/locator/doc/dg/api/xml-reply-docpage,在API-> XML-> Reply部分

结论


希望本文对开发人员有帮助。准备在评论中回答您的问题。

All Articles