GSM模块发送短信

一、PDU格式发送短信

用单片机发送PDU格式的短消息
1.准备
    
      待发送内容:二进制数据 0xFF 0x00 0xA0 0x05

2.过程

      采用PDU格式发送过程:

  
      组织PDU格式的二进制数据包--->转换成ASCII格式的PDU数据包-->开始发送短消息
   
   
      2.1     组织PDU格式的二进制数据包
           1)    配置好的电话号码存储格式:    13 10 31 25 32 2F
           2)    配置好的短消息中心存储格式:13 01 01 80 50 0F
           3)    数据长度为4个字节
           开始组织PDU数据包
           a. 短消息中心
           
              长度    短消息中心有国家编码       短信中心号码编码
              08             91              68 31 10 10 08 05 F0
        
           b. 短消息类型
            
              11         不需要状态报告        
                       需为31
        
           c. 信息参考
            
              00
            
           d. 目标电话号码
         
              长度 目标电话号码有国家编码           目标电话号码的编码
               0D          91                        68 31 01 13 52 23 F2
              注意:此处的长度和短消息中心长度含义不同。
           
           e. 协议标识
            
              00
              对于标准情况下的下 MS-to-SC 短消息传送,只需设置 PID 为 00
         
           f. 数据编码方案
                   
              08
              或者
              04
              均可以发送出
           g. 信息有效期
            
              A5
            
              具体参考GSM 03.40 或者PDU中文的文档的计算方法
         
           h. 用户数据长度
            
              04
            
              以整型形式提供,表示后面用户数据段的数据长度
              
           i.    用户数据        
            
               FF 00 A0 05
              $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
              1.经过以上步骤组织出来的PDU数据包为
              a 08 91 68 31 10 10 08 05 F0
              b 11
              c 00
              d 0D 91 68 31 01 13 52 23 F2
              e 00
              f 08
              g A5
              h 04
              i FF 00 A0 05
              注意:
              对于组织的PDU数据包我打算先做如下规定
              将abc d efg 作为配置下发到存储器中
            
              d,数据准备好后读出
              h,数据准备好后算出
      2.2 计算出 包长度       
        
          包长度是十进制数据格式
          发送时为二进制格式
          范围 15~155
          其中19是指从b到i的二进制格式数据
          转换成ASCII格式的PDU数据包 + 包尾0X1A

3. 开始发送短消息(PDU数据包)
       
          AT+CMGS =      包长度     
          收对“>”,即开始发送 PDU数据包

二、例如短信息中心号码为深圳 +8613800755500

对方手机号码为 +8613612345678

要发送的信息为“中”

算法步骤:

一、地址部分,用字符串 addr 表示

1、将短信息中心号码去掉+号,看看长度是否为偶数,如果不是,最后添加F
     即 addr = "+8613800755500"
     => addr = "8613800755500F"

2、将奇数位和偶数位交换。
     => addr = "683108705505F0"

3、将短信息中心号码前面加上字符91,91是国际化的意思
     => addr = "91683108705505F0"

4、算出 addr 长度,结果除2,格式化成2位的16进制字符串,16 / 2 = 8 => "08"
     => addr = "0891683108705505F0"

二、手机号码部分,用字符串 phone

1、将手机号码去掉+号,看看长度是否为偶数,如果不是,最后添加F
     即 phone = "+8613612345678"
     => phone = "8613612345678F"

2、将手机号码奇数位和偶数位交换。
     => phone = "683116325476F8"

三、短信息部分,用字符串 msg 表示

1、转字符串转换为Unicode代码,例如“中”的unicode代码为 4E2D,
     (好像是将中字的ASCII码分开,分别转成16进制)。因为我用DELPHI,
     即 msg = "中"
     即 msg = str_Gb2UniCode( msg )
     => msg = "4E2D"


2、将 msg 长度除2,保留两位16进制数,即 4E2D = 4 / 2 => "02",再加上 msg
     => msg = "024E2D"

四、组合

1、手机号码前加上字符串 11000D91,这是一些PDU代码,写死就行了,感兴趣可以参考相关PDU格式说明
     即 phone = "11000D91" + phone
     => 11000D9168683116325476F8

2、手机号码后加上 000800 和刚才的短信息内容,000800也写死就可以了
     即 phone = phone + "000800" + msg
     即 11000D9168683116325476F8 + 000800 + 024E2D
     => phone = 11000D9168683116325476F8000800024E2D

3、phone 长度除以2,格式化成2位的十进制数
     即 11000D9168683116325476F8000800024E2D => 36位 / 2 => 18

五、所以要发送的内容为
     AT+CMGS=18<回车,ASCII为13>
     addr+phone+<^Z>+换行回车<13和10>
   
     即AT+CMGS=18<回车>0891683108705505F011000D91683116325476F8000800024E2D^Z换行回车

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GSM模块发送短信的过程如下:首先,用户需要通过短信发送指令将短信内容发送GSM模块GSM模块会将接收到的短信内容进行处理,并根据短信内容的不同执行相应的操作。比如,用户发送短信GSM模块GSM模块会自动回复一条短信,提示用户可以发送数字1、2或3来选择不同的功能。用户可以回复1、2或3,GSM模块会根据短信内容回复不同的短信。\[1\] 在具体实现过程中,需要注意以下几个问题:首先,如何获取GSM模块的回送信息。可以使用read()函数来获取回送信息,但是需要注意,在发送完指令后需要进行一定的延迟操作,否则只能读取到八位的数据。其次,如何获取特定信息,比如短信存储地址、发送手机号等。可以通过字符串的剪切等操作来获取这些信息。最后,如果在发送短信时出现乱码,可以通过指定发送的长度来解决,可以使用Strlen()函数来指定发送内容的长度。\[2\] 总结来说,用户可以通过串口与GSM模块进行通信,发送相应的AT指令来控制模块发送短信。用户需要插入移动的电话卡,并将GSM模块通过串口与电脑连接,然后使用串口助手与GSM模块建立通信,在串口助手中发送相应的AT指令即可控制模块发送短信。\[3\] #### 引用[.reference_title] - *1* *2* *3* [利用gsm模块自动收发短信](https://blog.csdn.net/fate08301017/article/details/41253813)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值