偶然发现GitHub上的一个对AT指令的封装,膜拜
https://github.com/MaJerle/GSM_AT_commands_parser/blob/master/00-GSM_LIBRARY/gsm.c

1.AT指令概述

来源:http://www.rosoo.net/a/201011/10451.html

1.1由来

AT命令集是由拨号调制解调器(MODEM)的发明者贺氏公司(Hayes)为了控制Modem发明的控制协议.AT是Attention的缩写,协议本身采用文本.每个命令均以AT打头,因此得名。
AT指令,用于控制手机GSM模块。其中就包括对SMS的控制。AT指令在此基础上演化并被加入GSM 07.05标准以及现在的GSM07.07标准。在随后的GPRS控制,3G模块,以及工业上常用的PDU,均采用AT命令集来控制,这样AT命令实际在这一些产品上成为事实的标准。

1.2优点

命令简单易懂,并且采用标准串口来收发AT命令,这样对设备控制大大简化了,转换成简单串口编程了。
AT命令提供了一组标准的硬件接口–串口。这个简化的硬件设计.较新的电信网络模块,几乎都采用串口硬件接口。
AT命令功能较全,可以通过一组命令完成设备的控制,完成呼叫、短信、电话本、数据业务、传真。

1.3 AT命令与ppp协议的关系

在数据通讯的应用中,比如说无线拨号上网。除了AT命令,还会常听到另外一个网络协议ppp(Point to Point Protocol)
在应用串口通讯的场合,我们可以从硬件上明确看到分为两大块。

DTE(Data Terminal Equipment)数据终端设备。通常是一个智能设备,如PC机,嵌入式主机等,用于发送AT命令和PPP命令,还有用于链路通讯的DCE(Data Circuit Terminal )数据电路终端。用于与外界建立通讯的链路。
DTE与DCE之间用串口相连。比如PC机用串口接入拨号MODEM时,PC机是DTE,拨号MODEM是DCE。 AT和PPP的相同点都是由DTE发送给DCE的协议。不同点是AT只用于DTE来控制DCE。比如初始化设备,用于发送呼叫,发送短消息等,虽然AT有规范,但是大部分DTE产商都扩展了一些AT命令。

而PPP是用于数据通讯,是DTE与远程的接入服务器(Access Server)进行通讯的协议。是属于网络通讯的数据链路层协议,DCE本身收到PPP包时,除了将其调制到物理层上发送到远端服务器外,本身并不处理PPP的内容。

2.AT指令命令格式

2.1命令格式

AT指令都以”AT”开头,以(即\r,回车符)结束,模块运行后,串口默认的设置为:8位数据位、1位停止位、无奇偶校验位、硬件流控制(CTS/RTS)。
注意为了发送AT命令,最后还要加上 (即\n,换行符)这是串口终端要求。
有一些命令后面可以加额外信息来:如电话号码
每个AT命令执行后,通常DCE都给状态值,用于判断命令执行的结果。

2.2返回格式

AT返回状态包括五种情况 OK,ERROR,命令相关的错误原因字符串和一些的特殊的字符,比如“>”提示输入。
返回状态前后都有一个CR字符.
如 <CR>OK<CR>表示AT命令执行成功.
<CR>ERROR<CR>表示AT命令执行失败
<CR>NO DIAL TONE<CR>只出现在ATD命令返回状态中,表示没有拨号音,这类返回状态要查命令手册

2.3实测

我看大家都是这么说,但我测了一下,我用的模块是SIM5360F,得到了这样的结果。返回的字串中分别以两个回车开头和结尾。有没有知道的,交流下。可能跟具体的产品有关吧。所以建议,使用时还是测一下。
执行AT和AT+CPIN?,返回如下

2.4查询命令

还有一些命令本身是要向DCE查询数据,一般:
(1)、 测试命令(Test Command)在AT指令后面加上“=?”即构成测试命令。例如“AT+CSCS=?”会列举出所有支持的字符集。
(2)、 读取命令(Read Command)在AT指令后面加上“?”即构成读取命令。例如“AT+CSCS?”会列举出当前设置。
数据返回时,一般是+打头命令,返回格式
+命令:命令结果
如:AT+CMGR=0 (获取内存下标为0的信息)
(3)、 执行命令(Execute Command)一般而言在AT指令后加上“=”及命令参数即可。有些命令例如AT+CMGR命令没有参数,直接就可以执行。

:并不是所有的AT指令都支持(1)和(2)。

3.AT指令发短信两种模式

短信的编码方式有两种:text模式,pdu模式。因此短信的AT指令执行格式也有两种,分别对应text模式和pdu模式。

1 . Text模式
纯文本模式,支持不同的字符集,从技术上说也可用于发送中文短消息,但国内手机基本上不支持,主要用于欧美地区。

2 . Pdu模式
这个是手机默认的编码方式,可以使用任何字符集,其包括三种编码方式:7bit编码,8bit编码,UCS2编码。

7bit编码:ASCⅡ码就是7bit编码。

8bit编码:ASCⅡ字符可以使用7位二进制表示,但是由于计算机的基本处理单位是字节(1byte=8bit),所以一般在高位补0,用一个字节表示一个ASCⅡ字符。这就是8bit编码。

UCS2编码:处理Unicode字符,使用2个字节来表示一个字符,可以表示世界上所有的字符。发送中文就是使用此编码方式。
不同的模式有些命令返回的格式也不一样,后面会有例子。
1 . 查看目前的短信编码模式
AT+CMGF?
2 . 切换编码模式
AT+CMGF=0//PDU
AT+CMGF=1//TEXT

3 . 当模式为text时,发送格式如下

AT+CMGS=”**收信号码**”

… (此处为发送内容)

0X1A (此处表示内容结尾,必须)

结果:
+CMGS: 1
OK

4 . 当模式为pdu时,发送格式如下

AT+CMGS=19, “00+01+00+0b+81+8125514688f4+00+00+06+c8329bfd0601” 或者
(实际内容去掉+)
AT+CMGS=20, “0001000b818175893503f4000008d3ba3a1d76ebcb”

19和20为:pdu约定固定长度15+发送的报文的长度(16进制数)

00 服务号码信息长度为0

01 没有多余信息的发送,即不包括服务号码信息

00 消息基准值(TP-MR) 0

0b 发送号码的信息长度
81 国际号码格式即”+”
8125514688f4 目的号码(算法:末尾加f后奇偶位调换)

00 协议标识是普通GSM 类型,点到点方式

00 编码方式,08–USC2,00–7-bit

00 有效期

06 信息长度
c8329bfd0601 信息内容/Hello

5.pdu模式下转换流程
转至https://blog.csdn.net/a_tu_/article/details/47808017
具体实现可参考百度文库https://wenku.baidu.com/view/44a2728702d276a200292e92.html

第一步——格式化短信中心号码
1 - 要去掉“+”号,然后看看长度要是奇数的话就在末尾追加一个“F”。
+8613800200500 >>>> 8613800100500F
2 - 将奇数位和偶数位交换位置。
8613800100500F >>>> 683108100005F0
3 - 在前面加上“91”,是国际化的意思。
683108100005F0 >>>> 91683108100005F0
4 - 最后算一算它有多长了,把长度除于2,再把结果转换为2位的16进制数,加在最前面。
91683108100005F0长16 16/2=8 8的16进制“08” 一定要注意是2位
91683108100005F0 >>>> 0891683108100005F0
短信中心号码就处理完了,下几一步有类似的算法,现在我感觉就像做菜一样……

第二步——格式化收信号码
1 - 要去掉“+”号,然后看看长度要是奇数的话就在末尾追加一个“F”。
+8613401041516 >>>> 8613401041516F
2 - 将奇数位和偶数位交换位置。
8613401041516F >>>> 683104011415F6

第三步——格式化发送内容
1 - 把字符串转换为Unicode格式。
我爱听评书 >>>> 62117231542C8BC44E66
转换函数http://www.cnitblog.com/wujian-IT/archive/2007/12/13/37671.html
好想把代码贴过来膜拜下
2 - 把串Unicode码的长度除于2,再把结果转换为2位的16进制数,加在最前面。
62117231542C8BC44E66长20 20/2=10 10的16进制“0A”
62117231542C8BC44E66 >>>> 0A62117231542C8BC44E66

先看看我们都准备什么了,再继续~
格式化后的短信中心:0891683108100005F0
格式化后的收信号码:683104011415F6
格式化后的发送内容:0A62117231542C8BC44E66

第四步——组合处理
1 - 算一下收信号码的长度,不包括“+”号。这个收信号码指的是+8613401041516,而不是683104011415F6。
+8613401041516 >>>> 8613401041516 长度为“OD”(2位16进制数表示)
2 - 在长度前后分别加“1100”。
OD >>>> 1100OD
3 - 如果收信号码是手机的话就在后面追加“91”,如果是小灵通的话就要追加“81”。
+8613401041516是手机号码所以加“91”
11000D >>>> 11000D91
4 - 11000D91 + 格式化后的收信号码 + “000800” + 格式化后的发送内容
11000D91 >>>> 11000D91683104011415F60008000A62117231542C8BC44E66
5 - 计算上面那一大字符串的长度除于2,10进制表示。
11000D91683104011415F6008000A62117231542C8BC44E66长50 50/2=25

嗯,咱再看看手里都有啥了~
格式化后的短信中心:0891683108100005F0
实际的发送内容:11000D91683104011415F60008000A62117231542C8BC44E66
发送内容的长度:25
都准备好了我们可以发短信了 _

最后一步——通过AT命令发送PDU短信
AT+CMGF=0 <Enter> (告诉它你要发的是PDU类的短信)
OK (这是它返回的它说:“我已经准备好了”)
AT+CMGS=25 <Enter> (告诉它你要发的实际长度)
>0891683108100005F011000D91683104011415F60008000A62117231542C8BC44E66 <Ctrl+Z> (看到它返回“>” 在后面输入格式化的短信中心+实际的发送内容最后按Ctrl+Z发送)
如果最后返回不是“ERROR”,那就是发送成功咯~!

4.相关AT指令及用法

先从查看模块信息开始,发短信之前你要判断模块是否正常工作,信号强度,注册等问题
说明:命令需加上\r\n结尾。[]表示参数可选,<>表示必须。

4.1 AT

命令解释:检测Module与串口是否连通,能否接收AT命令;
命令返回:OK (与串口通信正常)(无返回,与串口通信未连通)

4.2 AT+CSQ

检查网络信号强度

命令返回:+CSQ: **,##
其中**应在1到31之间,数值越大表明信号质量越好,##应为99。 否则应检查天线或SIM卡是否正确安装。如果**也为99,也表示异常。

4.3 A/

重复最后一次执行指令.只有A/命令不能重复.这命令重复前一个执行的命令

4.4 AT+CREG?

网络注册。获得手机的注册状态。
响应格式 +CREG: <mode>, <stat> [ ,<lac>,<ci> ]
<mode> 0 禁止网络注册主动提供结果码缺省值 1 采用网络注册结果码+CREG :
<stat> 0 未注册ME当前没有搜寻新的运营商 1 已注册本地网络运营商 2 未注册ME正在搜寻新的运营商 3 注册拒绝 4 未知 5 已注册处于漫游区 。
<lac> 字符型位置区域代码采用十六迚制编码2字节
<ci> 字符型小区ID 号采用十六迚制编码2字节

4.5 AT+CGSN

读取IMEI(国际移动设备标识)序列号

4.6 AT+CIMI

获得IMSI.这命令用来读取或者识别SIM卡的IMSI(国际移动签署者标识).在读取IMSI之前应该先输入PIN(如果需要PIN的话)

4.7 AT+CPIN?

命令返回
+CPIN: READY
OK

再看读取短信和删除短信
因为有两个模式,得到的结果不一样,所以要先确定是哪种格式。

4.8 AT+CMGF

Message Format 选择短消息格式。
AT+CMGF=? 返回所有支持的消息格式:
如正确,返回:+CMGF:<SPACE>(list of supported <mode>s) ;如错误,返回: ERROR.比如:+CMGF: (0,1)
AT+CMGF? 返回当前的消息格式:
如正确,返回:+CMGF:<SPACE><\mode> 如错误返回: ERROR,比如:+CMGF: 0

4.9 AT+CMGL

List Message 列出消息
AT+CMGL=? 返回所有支持的信息状态值:
如正确,返回:+CMGL:<\SPACE>(list of supported <\stat>s) ,如错误,返回: ERROR,比如:
(PDU模式下)+CMGL: (0,1,2,3,4)和
(TEXT 模式下)+CMGL: (“REC UNREAD”,“REC READ”,“STO UNSENT”,“STO SENT”,“ALL”)
TEXT 模式下
“REC UNREAD” 已接收未读短消息
“REC READ” 接收且已读短消息
“STO UNSENT” 已保存但未发送短消息
“STO SENT” 已保存已发送短消息
“ALL” 所有短消息
PDU模式下0,1,2,3,4与之对应。
AT+CMGL[= <stat>] 列出消息,返回格式:
TEXT 模式下(+CMGF=1)且正确执行:
SMS-SUBMIT 或SMS-DELIVER:
+CMGL:<index>,<stat>,<oa/da>,[<alph>],[<scts>]
[,<tooa/toda>,<\length>]<CR><LF><data>[<CR><LF>
+CMGL:<index>,<stat>,<da/oa>,[<alpha>],[<scts>]
[,<tooa/toda>,<length>]<CR><LF><data>[…]]
OK
注:返回的<data>是UCS2 编码
如错误,返回:ERROR

4.10 AT+CMGR

Read Message 读取短消息
AT+CMGR=? 返回OK
AT+CMGR= <index> 读取存储器中指定位置的消息(存储器由+CPMS 指定),返回格式:TEXT 模式下(+CMGF=1)且执行正确:
SMS-DELIVER:
+CMGR:<stat>,<oa>,[<alpha>],<scts>[,<tooa>,<fo>,<\p
id>,<\dcs>,<\sca>,<\tosca>,<\length>]<\CR><\LF><\data>
OK
SMS-SUBMIT:
+CMGR:<stat>,<da>,[<alpha>][,<toda>,<fo>,<pid>,<d
cs>,[<vp>],<sca>,<tosca>,<length>]<CR><LF><data>
OK
如错误,返回:ERROR,比如:

4.11 AT+CMGD Delete Message 删除短消息

AT+CMGD=? OK
AT+CMGD= <index> 删除存储器中<index>指定位置的消息(存储器由+CPMS 设置的 <mem1>参数选指定).如正确,返回:OK 如错误,返回:ERROR.
注:<index>当前存储器中的位置号.

发送短信和写短信

4.12 AT+CMGS

Send Message 发送短消息
TEXT 模式下 (+CMGF=1)AT+CMGS= <da>[,<toda>] <CR> text is entered <ctrl-Z/ESC>
ME 向网络发送短消息,成功时返回<mr>,当命令正确执行并成功发送时
返回: +CMGS:<mr>.如错误返回: +CMS ERROR:<SPACE><err>.

4.13 AT+CMSS

Send Message From Storage 发送已保存的短消息
AT+CMSS=?返回OK
AT+CMSS= <index>[,<da>[,<toda>]] 发送存储器中<index>指定位置的消息(SMS-SUBMIT),存储器由 +CPMS 设置的<mem2>参数选定.成功发送后网络返回<mr>值.如命令正确,返回: +CMSS:<mr>.如错误,返回:ERROR.

4.13 AT+CMGW

Write Message To Memory 写短消息
AT+CMGW=? 返回OK.
TEXT 模式下(+CMGF=1):AT+CMGW[=<o a/da>[,<tooa/toda>[,<stat>]]] <CR> text is entered <ctrl-Z/ESC>往存储器中写入信息(存储器由+CPMS 的<mem2>参数指定),正确存储后返回信息位置<index>.如执行正确且成功保存时返回:+CMGW:<SPACE><index>.如错误返回: +CMS ERROR:.
注:
1 默认<stat>值为2(”STO UNSENT”).TEXT模式下<stat>不支持"REC UNREAD"和"REC READ".
2 ctrl-Z 表示输入消息体的结束.
3 ESC 表示放弃输入消息体,重回command 状态,此时将返回 ERROR.
4 输入的 text 是UCS2 编码.

接受新短信,设置是否提醒,以及短信到来执行的模式

4.14 AT+CNMI

New Message Indications to TE 新消息指示
AT+CNMI=? 返回所有支持的指示参数类型:

+CNMI:(list of supported <mode>s),(list of supported <mt>s),(list of supported <bm>s),(list of supported <ds>s),(list of supported <bfr>s)
如错误返回: +CMS ERROR:<err>,比如:+CNMI: (0,1,2),(0,1,2,3),(0,2),(0,1),(0,1)
参数说明:
<mode> 控制指示信息的处理
0:先将通知缓存起来,再按照<mt>的值进行发送.
1:在数据线空闲的情况下,通知TE,否则,不通知TE.
2:数据线空闲时,直接通知TE;否则先将通知缓存起来,待数据线空闲时再行发送.
3:直接通知TE.在数据线被占用的情况下,通知TE的消息将混合在数据中一起传输.
<mt> 指定新的短消息到达时的指示方式:
0:接受的短消息存储到默认的内存位置(包括class 3),不通知TE.
1:新到达的SMS-DELIVER 被正确保存后,返回其存储器及位置信息+CMTI:<mem>,<index>(注:mem是以引号标注的.)
2:对于class 2短消息,储存到SIM卡,并且向TE发出通知;对于其他class,直接将短消息转发到TE:+CMT:[<alpha>],<length><CR><LF><pdu>(PDU模式)
或者+CMT:<oa>.[<alpha>.]<scts>[,<tooa>,<fo>,<pid>,<dcs>,<sca>,<tosca>,<length>]<CR><LF><data>(text模式)
3:对于class 3短消息,直接转发到TE,同<mt>=2;对于其他class,同<mt>=1.
<bm> 小区广播到达时的指示方式:
0 不发送新消息指示
<ds> SMS-STATUS-REPORT 的指示方式:
0:状态报告不通知
1:新的状态报告通知,返回:+CDS:;length;;CR;;LF;;pdu;
2:如果新的状态报告存储到ME,则返回:+CDSI:;mem;,;index;
<bfr> 进入<mode>=1,2,3 时存于buffer 中的消息指示的处理方式:
0 将所有缓存区中的信息全部发至 TE
AT+CNMI? 返回当前的新消息指示参数: +CNMI:<mode>,<mt>,<bm>,<ds>,<bfr> 如错误返回: ERROR,比如:+CNMI: 2,1,0,1,0,收到短信的提示为;+CMTI: “SM”,1
AT+CNMI=[<\mode>[,<mt>[,<bm>[,<ds>[,<bfr>]]]]] 选择新消息到达时的各项指示参数,正确执行时返回: OK 如错误返回: +CMS ERROR:<err>

4.15 AT+CPMS

Preferred Message Storage 选择消息存储器.
AT+CPMS=? 返回所有支持的读,写,存短消息的存储器:
如正确,返回:+CPMS:<SPACE>(list of supported <mem1>s),(list of supported <mem2>s),(list of supported <mem3>s) ,
如错误,返回: ERROR.比如:+CPMS: (“SM”),(“SM”),(“SM”)
AT+CPMS? 返回当前读,写,存短消息的存储器:
如正确,返回: +CPMS:<SPACE><mem1>,<used1>,<total1>,<mem2>,< used2>,<total2>,<mem3>,<used3>,<total3>
如错误,返回: ERROR:<err>.比如:+CPMS: “SM”,0,30,“SM”,0,30,“SM”,0,30
AT+CPMS= <mem1>[,<mem2>[,<mem3>]] 选择读、写、存短消息时对应的存储器:
如正确,返回:+CPMS:<SPACE><used1>,<total1>,<used2>,<total2>,< used3>,<total3>
如错误返回:ERROR.
参数说明:
<mem1> 字符型,读,删短消息的存储器
“SM” SIM 卡
<mem2> 字符型,写,发送短消息的存储器
“SM” SIM 卡
<mem3> 字符型,新消息到达后需保存时对应的存储器
“SM” SIM 卡
<used1> 整型,<mem1>中的消息条数
<total1> 整型,<mem1>的容量
注:
<mem1>指定+CMGL,+CMGR,+CMGD 操作对应的存储器,
<mem2>指定+CMSS,+CMGW 操作对应的存储器,
<mem3>指定新消息到达后需存储时对应的存储器.

短信中心号码和服务设置

4.16 AT+CSMS

Select Message Service 选择短消息服务.
AT+CSMS? 返回当前的服务类型及 ME 支持的信息:
如正确,返回: +CSMS:<space><service>,<mt>,<mo>,<bm>:如错误,返回: ERROR.比如:+CSMS: 0,1,1,1
AT+CSMS= <service>:选择 SMS 类型:
如正确,返回: +CSMS:<SPACE><mt>,<mo>,<bm>;如错误,返回:ERROR.
参数说明:
<service>
0 Phase 2
128 厂商自定义
<mt>
0 ME 不能接收短消息
1 ME 可以接收短消息
<mo>
0 ME 不能发送短消息
1 ME 可以发送短消息
<bm>
0 ME 不能接收小区广播
1 ME 可以接收小区广播

4.17 AT+CSCA

Service Center Address 设置短消息服务中心地址.
AT+CSCA=? 返回OK
AT+CSCA? 返回当前的服务中心地址: +CSCA:<SPACE><sca>,<tosca> 如错误,返回: ERROR,比如:+CSCA: “+8613800755500”,145
AT+CSCA= <sca>[,<tosca>]:选择 SM 服务中心地址:如正确,返回:OK;如错误,返回:ERROR.

一个命令测试结果





注:

IMEI
IMEI(International Mobile Equipment Identity)是国际移动设备身份码的缩写,国际移动装备辨识码,是由15位数字组成的"电子串号",它与每台手机一一对应,而且该码是全世界唯一的.每一部手机在组装完成后都将被赋予一个全球唯一的一组号码,这个号码从生产到交付使用都将被制造生产的厂商所记录.
IMEI可用移动终端设备通过键入“*#06#”查得(不同厂商的手机所需输入的内容不同,同一厂商不同手机所需输入的内容也可能不同).其总长为15位,每位数字仅使用0~9的数字
IMEI由15位数字组成,其组成为:
1.前6位数(TAC,Type ApprovalCode)是"型号核准号码",一般代表机型.
2.接着的2位数(FAC,Final Assembly Code)是"最后装配号",一般代表产地.
3.之后的6位数(SNR)是"串号",一般代表生产顺序号.
4.最后1位数(SP)通常是"0",为检验码,备用.
IMEI码具有唯一性,贴在手机背面的标志上,并且读写于手机内存中.它也是该手机在厂家的"档案"和"身份证号".

IMSI
国际移动用户识别码(IMSI:International Mobile Subscriber Identification Number)是区别移动用户的标志.储存在SIM卡中.可用于区别移动用户的有效信息/其总长度不超过15位.同样使用0~9的数字.其结构为MCC+MNC+MSIN,其中

MCC(Mobile Country Code)是移动用户所属国家代号.MCC的资源由国际电联(ITU)统一分配和管理,唯一识别移动用户所属的国家,占3位数字.中国的MCC规定为460;
MNC(Mobile Network Code)是移动网号码,由两位或者三位数字组成,中国移动系统使用00,02,07,中国联通GSM系统使用01,06,中国电信CDMA系统使用03,05,中国铁通系统使用20;用于识别移动用户所归属的移动通信网;
MSIN(Mobile Subscriber Identification Number)是移动用户识别码,用以识别某一移动通信网中的移动用户.共有10位,其结构如为EF+M0M1M2M3+ABCD.其中的M0M1M2M3和MDN号码中的H0H1H2H3可存在对应关系,ABCD四位为自由分配.

可以看出IMSI有MCC,可以区别出每个用户的来自的国家,因此可以实现国际漫游.在同一个国家内,如果有多个移动网络运营商,可以通过MNC来进行区别.IMSI与手机号码绑定关系,在网络侧网元HLR(Home Location Register)内定义.

IMSI是运营商分配的,是SIM的属性,IMEI是手机生产时分配的,是手机的属性.现在在中国的IMEI号不一定是唯一的,这与运营商允许接入的权限有关,通信网络中的设备EIR(设备标识寄存器),用于存储IMEI号,中国的EIR没有启用,所以随之而起的巨大规模的山寨机共享一个IMEI号也可以接入运营商的网络.在国外,EIR启用的国家,手机用户丢失后可以通过IMEI号锁定改手机,国内估计是降低成本而没有启用.

收发短信AT指令详解相关推荐

  1. GSM MODEN短信发送模块详解(短信的读取、发送过程和编码、解码过程)

    GSM模块,顾名思义就是用来与手机进行点对点发送短信(文字.图片以及各种数据),需要将手机卡插入模块中,再用串口线与PC机相连(嵌入式方面,与单片机或者ARM相连). GSM短信编码.一种是文本模式( ...

  2. java项目短信群发接口_JAVA实现第三方短信发送过程详解

    想使代码生效需要注册: 在muven项目里面导入jar包 commons-codec commons-codec 1.4 commons-httpclient commons-httpclient 3 ...

  3. TP6 腾讯云发送短信验证码配置详解

    一.发送注册验证码代码实现 参考腾讯云文档 https://cloud.tencent.com/document/product/382/56058 1.通过composer安装 composer r ...

  4. 【物联网】AT指令|AT返回错误|AT 指令 收发短信和GPRS上网 SIM508/548

    目录 常用AT命令解释 AT 指令 收发短信和GPRS上网 SIM508/548 AT指令返回错误 解释 CME错误: CMS错误 CME错误(英文) CMS 错误(英文) 短信通信的几种情况和CMS ...

  5. []AT 指令 收发短信和GPRS上网 SIM508/548

    原文地址:AT 指令 收发短信和GPRS上网 SIM508/548 作者:半岛鱼 可以使用电脑自带的超级终端发送AT指令,也可以下载串口大师等工具发送. 1.通信模块sim548/508  AT 指令 ...

  6. AndroidManifest.xml文件配置教程及相关指令详解

    AndroidManifest.xml 是每个android程序中必须的文件,它位于整个项目的根目录.我们每天都在使用这个文件,往里面配置程序运行所必要的组件,权限,以及一些相关信息.但是对于这个文件 ...

  7. micropython 串口写文件_MicroPython通过2G模块串口收发短信

    集成2G通信.定位模组,赋予物联网特性.本例使用M6220,它是一款基于eSIM技术的2G模组,支持GSM/GPRS,提供GPS+北斗双模定位功能,并具备一定的数据处理能力,其2G工作频段有GSM85 ...

  8. Docker技术入门与实战 第二版-学习笔记-3-Dockerfile 指令详解

    前面已经讲解了FROM.RUN指令,还提及了COPY.ADD,接下来学习其他的指令 5.Dockerfile 指令详解 1> COPY 复制文件 格式: COPY  <源路径> .. ...

  9. 【折腾】M590E启动 收发短信 基站定位

    最近入手了一块M590E gsm模块 价格相当低(因为卖家没资料) 玩了之后发现这东西还是不错的 物美价廉 下面把折腾过程中遇到的问题和解决方案整理一下: 安装 总共要接一个二极管,一个电解电容(铝电 ...

  10. 利用SerialPort类实现收发短信(C# 2.0)

    作者:veryhappy(wx.net) 在.NET 1.1版本中微软并没有封装一个串口操作的类,但是我们可以在网络上找到通过WIN32 API读写文件方式访问串口的开源类库,比如:JustinIO. ...

最新文章

  1. 【微信小程序之画布】终:手指触摸画板实现
  2. ASP.net中的几种分页方法
  3. Cloudera maneger登录页面后的操作是什么?
  4. java 字符串缓冲池 String缓冲池
  5. 【工具】switchhost
  6. hibernate 简单笔记(一)
  7. 前端:JS/37/canvas对象(画布对象),用canvas对象(画布)画一些基本的图像
  8. vba下拉框实现记忆功能_VBA | 这个二级下拉菜单挺有趣!
  9. 【原创】搭建spark环境中的坑及解决办法
  10. 并发环境下的缓存容器性能优化(上):不可变的哈希表
  11. ImportError: cannot import name ‘imread’ from ‘scipy.misc’ 解决办法
  12. 2.1 数字图像处理——图像基础
  13. SLM4054独立线性锂电池充电器的芯片的学习
  14. 多目标蚁群算法路径规划(一)-----从数据设计到毕业论文系列
  15. Ubuntu安装NS3出现./build.py失败解决
  16. 用OpenStack搭建简单的云平台并启动云主机
  17. 全栈工程师的百宝箱:图形工具篇
  18. 机器学习电脑配置有什么要求?要什么显卡?
  19. YLMF OS安装vmare tool
  20. Erase/Trim/Discard/Sanitize

热门文章

  1. msfconsole理论
  2. lnmp一键安装-HTTP ERROR 500目前无法处理此请求
  3. 新编密码学——分组密码
  4. 图解内存的工作原理及时序介绍
  5. 关于色域与BT.2020相关学习心得笔记
  6. HTML5网页设计 (一)
  7. Unity3d trial version 水印
  8. 新蒂下午茶体基本版SentyTEA-Basic
  9. java二叉树删除节点
  10. MIPI D-PHY IP 使用说明(二)