技术文档

单片机发送at指令 物联网从业者必须要会的AT指令介绍

小编 2024-11-25 技术文档 23 0

物联网从业者必须要会的AT指令介绍

  对于大多数物联网从业者来说,有两样东西是避免不了的,一个是单片机,一个是移动通信模块。现在主流的通信模块都以4G模组和NB-IOT模组为主(由于运营商正在对2G进行退网,在新产品上继续使用2G模组已经是个不明智的决定了)。无论是曾经的2G模组还是现在主流的4G和NB-IOT模组,都采用了AT指令的方式与外部控制器进行通信,AT指令因此成为物联网从业者必须要掌握的知识。

4G模组举例

  AT是Attention的缩写,最早是贺氏公司(Hayes)为了控制调制解调器而发明的协议。后来随着网络带宽的升级,速度很低的拨号调制解调器基本退出一般使用市场,但是 AT 命令保留了下来,并且逐渐被标准化。现在的移动通信模组(2G,4G,NB-IOT)皆采用AT指令作为其控制协议,AT 指令已经成为通信模组产品开发中的实际标准。

某4G模块应用示意图

  AT指令只是AT客户端(如MCU)和AT服务器(如移动通信模组)之间的软件接口,硬件上基本都采用串口作为接口。有一点需要注意,很多模块的串口电平采用的是1.8V,而大多数MCU的IO口电平是3.3V或5V,所以在硬件连接上需要依据具体情况考虑进行电平转换。

AT指令工作示意图

  AT指令的大部分使用场景是这样:MCU主动发送AT指令给模组,然后等待模组返回数据,MCU再根据返回的数据做对应操作。每个AT指令都有一个超时时间,如果MCU发送出AT指令后在超时时间内没有收到返回的数据则需要重试。AT指令中还有一种数据被成为URC数据,URC的全称是Unsolicited Result Code,翻译成中文就是“不请自来的结果码”。顾名思义,它不是模块对MCU所发送AT指令的返回,而是模块主动上报的数据。比如模块收到TCP数据包,或者模块的网络状态发生改变,都会通过URC数据主动告知MCU。

  下面介绍下AT指令的格式。AT指令是基于字符串的通信协议,一般 AT 命令由三个部分组成,分别是:前缀、主体和结束符。其中前缀由字符“AT”构成;主体由命令、参数和可能用到的数据组成,结束符一般为 <CR><LF> (即回车换行,对应于ASCII码中的“\r\n”)。AT指令可以分为以下几种(<x>代表命令):

  上表中省略了结束符,在实际使用中,将<x>替换为要用的命令,并且整个命令需要以<CR><LF>结尾。如何知道模块都支持哪些AT指令呢?关于具体的AT指令,其实不用刻意去记忆,因为每个模块都会有配套的AT指令集手册,要用的时候再去查询手册就行了。

AT指令应用举例(以下指令皆省略了回车换行):

MCU发送:AT 模组返回:OK 命令说明:可以根据是否有OK返回判断模块是否可用。

MCU发送:AT+CGSN 模组返回:<IMEI>      OK 命令说明:用于查询模组的IMEI。

MCU发送:AT+CGACT=<state>,<cid> 模组返回:OK 命令说明:用于设置模块PDP上下文激活状态。

MCU发送:AT+CGACT? 模组返回:+CGACT: <cid>,<state>      OK 命令说明:用于查询模块PDP上下文激活状态。

单片机如何利用GPRS模块获取位置信息

GPRS是如何获取位置的呢?GPRS不同于GPS,我们都知道GPS是通过卫星来定位,而GPRS是通过基站来定位,其定位精度收到通信基站的位置和密度的影响在没有基站的位置上,误差范围会比较大,也许系有人会问既然GPS定位更精准,拿为什么还需要基站定位呢?这是因为GPS定位只能在空旷的地方接收到信号,比如在高楼密集的城市,高架桥下,室内等GPS信号会很差或接收不到信号,同时也会受天气的影响如果天气差GPS信号强度会低很多。但基站定位虽精度虽不及GPS,但只要有基站至室内也可定位,且不会收天气的影响。随着基站的数量越来越多,GPRS的定位也会越来越准确。

基站定位示意图

获取位置流程

流程图

获取到基站的位置信息后我们可以调用LBS的数据仓库API接口进行查询,这里推荐一个比较好用的接口这个网站的查询接口是免费开放的,但是有限制,每5分钟限制查询300次,基站/WIFI/经纬度查询接口每日限制查询1000次如果我们的查询次数不多的话是足够用的,不够使用也有收费的可以用。

基站查询接口可查询全国移动联通电信的2G/3G/4G基站位置信息,收录数据超过两万条。下面是提供查询的API接口:

API接口

有与GPRS模块可以与服务器通讯所以我们在获取到基站的位置信息之后直接将数据通过单片机串口通过GPRS模块发送到服务器进行查询即可。

GPRS通讯示意图

1. 单片机通过AT指令服务器的相关信息配置进模块

(1) 设置工作模式为网络透传模式 AT+WKMOD="UDC"

(2) 使能 socket A AT+SOCKAEN="on"

(3) 设置 socket A 为 TCP 客户端,服务器地址为 api.cellocation.com,服务器端口号为 81。 AT+SOCKA="TCP", api.cellocation.com",81

(4) 使能心跳包 AT+HEARTEN="on"

(5) 设置心跳包发送间隔 AT+HEARTTM=30

(6) 使能注册包 AT+REGEN="ON"

2. 查询基站信息

单片机串口发送 AT+LBS?

返回坐标信息 如: LAC =21269,CID =30321

3. 调用数据接口进行位置查询

GET /cell/?mcc=460&mnc=1&lac=4301&ci=20986&output=csvHTTP/1.1

Host:api.cellocation.com:81

发送数据时这个位置一定要空两行

发送时将lac和ci替换为获取到的坐标信息即可,返回的数据是CSV格式的,我们用","来解析即可获得经纬度和具体的位置信息

相关问答

单片机 上网, 单片机 如何连接到无线网络,并且能 发送 和接收数据?

某宝上WIFI模块很多,可以通过单片机串口发送AT指令实现网络通信,但是效率不高某宝上WIFI模块很多,可以通过单片机串口发送AT指令实现网络通信,但是效率不高

用手机数据线怎么把程序烧录到 单片机 中?-ZOL问答

用USB双头线烧写STC单片机AT89S52是用USB下载线烧写用编程器烧,或者买个烧录坐烧看是什么单片机喽,51和AVR的话用USBasp,淘宝一下有很多(10多块);软件用prog...

ds18b20数据如何发给 单片机 ?

在DQ=0,之后,DQ就是输入端了。如果这时DQ=1了,就在dat的最高位加一,就是:dat|=0x80。最先收到的位,是数据的最低位,所以要逐步的向低位移动...在...

DS457扫描枪怎么设置串口 指令 ?

使用ESP8266做过项目,这类问题,不管是WIFI还是蓝牙,或者其他的数据传输手段,简单的说都需要一个通信协议,这个协议可以很简单,比如0xAA,具体可以分为下面...

通过 AT指令 端口读取eSIM卡中信息如何写程序?

下面分步给你介绍如何用EASY51PRO对51单片机进行编程:第一步是硬件连接:1.通讯电缆与编程器连接好,2.将串口插头插入电脑串口,3.USB插头插入电脑任一个...

51 单片机 所有伪 指令 ?

MCS-51单片机常用伪指令一)符号定义伪指令符号定义名用法说明EQU为常量,符号名...MCS-51单片机常用伪指令一)符号定义伪指令符号定义名...

ds18b20怎么传输数据给 单片机 的?

在DQ=0,之后,DQ就是输入端了。如果这时DQ=1了,就在dat的最高位加一,就是:dat|=0x80。最先收到的位,是数据的最低位,所以要逐步的向低位移动...在...

89c51 单片机发送 口是?

89c51有四组I/O口,分别是p0,p1,p2,p3。他们是一个锁存器,也是专用寄存器中的一员,就是用来输出与输入信号,还有他的第二功能,比如P3.2是外部中断0。...89c5...

如何使 单片机AT 89C51的p1口作为输入端,p0口作为输出端?

作为输出,P0口为0C,需用上拉电阻,作为输入,P1口需置成高电平,作为输出,P0口为0C,需用上拉电阻,作为输入,P1口需置成高电平,

肿么把编好的程序烧录到8051或则 AT 89C51 单片机 上啊?-ZOL问答

AT89C51单片机必须用烧录器才行STC的可以在线烧写程序调试软件用keil就可以了建议买块实验板用stc89c51芯片不要用AT芯片这样还需要买烧录器的希望对你...

猜你喜欢