收发短信AT指令详解
偶然发现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指令详解相关推荐
- GSM MODEN短信发送模块详解(短信的读取、发送过程和编码、解码过程)
GSM模块,顾名思义就是用来与手机进行点对点发送短信(文字.图片以及各种数据),需要将手机卡插入模块中,再用串口线与PC机相连(嵌入式方面,与单片机或者ARM相连). GSM短信编码.一种是文本模式( ...
- java项目短信群发接口_JAVA实现第三方短信发送过程详解
想使代码生效需要注册: 在muven项目里面导入jar包 commons-codec commons-codec 1.4 commons-httpclient commons-httpclient 3 ...
- TP6 腾讯云发送短信验证码配置详解
一.发送注册验证码代码实现 参考腾讯云文档 https://cloud.tencent.com/document/product/382/56058 1.通过composer安装 composer r ...
- 【物联网】AT指令|AT返回错误|AT 指令 收发短信和GPRS上网 SIM508/548
目录 常用AT命令解释 AT 指令 收发短信和GPRS上网 SIM508/548 AT指令返回错误 解释 CME错误: CMS错误 CME错误(英文) CMS 错误(英文) 短信通信的几种情况和CMS ...
- []AT 指令 收发短信和GPRS上网 SIM508/548
原文地址:AT 指令 收发短信和GPRS上网 SIM508/548 作者:半岛鱼 可以使用电脑自带的超级终端发送AT指令,也可以下载串口大师等工具发送. 1.通信模块sim548/508 AT 指令 ...
- AndroidManifest.xml文件配置教程及相关指令详解
AndroidManifest.xml 是每个android程序中必须的文件,它位于整个项目的根目录.我们每天都在使用这个文件,往里面配置程序运行所必要的组件,权限,以及一些相关信息.但是对于这个文件 ...
- micropython 串口写文件_MicroPython通过2G模块串口收发短信
集成2G通信.定位模组,赋予物联网特性.本例使用M6220,它是一款基于eSIM技术的2G模组,支持GSM/GPRS,提供GPS+北斗双模定位功能,并具备一定的数据处理能力,其2G工作频段有GSM85 ...
- Docker技术入门与实战 第二版-学习笔记-3-Dockerfile 指令详解
前面已经讲解了FROM.RUN指令,还提及了COPY.ADD,接下来学习其他的指令 5.Dockerfile 指令详解 1> COPY 复制文件 格式: COPY <源路径> .. ...
- 【折腾】M590E启动 收发短信 基站定位
最近入手了一块M590E gsm模块 价格相当低(因为卖家没资料) 玩了之后发现这东西还是不错的 物美价廉 下面把折腾过程中遇到的问题和解决方案整理一下: 安装 总共要接一个二极管,一个电解电容(铝电 ...
- 利用SerialPort类实现收发短信(C# 2.0)
作者:veryhappy(wx.net) 在.NET 1.1版本中微软并没有封装一个串口操作的类,但是我们可以在网络上找到通过WIN32 API读写文件方式访问串口的开源类库,比如:JustinIO. ...
最新文章
- 【微信小程序之画布】终:手指触摸画板实现
- ASP.net中的几种分页方法
- Cloudera maneger登录页面后的操作是什么?
- java 字符串缓冲池 String缓冲池
- 【工具】switchhost
- hibernate 简单笔记(一)
- 前端:JS/37/canvas对象(画布对象),用canvas对象(画布)画一些基本的图像
- vba下拉框实现记忆功能_VBA | 这个二级下拉菜单挺有趣!
- 【原创】搭建spark环境中的坑及解决办法
- 并发环境下的缓存容器性能优化(上):不可变的哈希表
- ImportError: cannot import name ‘imread’ from ‘scipy.misc’ 解决办法
- 2.1 数字图像处理——图像基础
- SLM4054独立线性锂电池充电器的芯片的学习
- 多目标蚁群算法路径规划(一)-----从数据设计到毕业论文系列
- Ubuntu安装NS3出现./build.py失败解决
- 用OpenStack搭建简单的云平台并启动云主机
- 全栈工程师的百宝箱:图形工具篇
- 机器学习电脑配置有什么要求?要什么显卡?
- YLMF OS安装vmare tool
- Erase/Trim/Discard/Sanitize