基于STM32F103——SIM900A发送短信+串口打印
2022-09-22 来源:csdn
最近用STM32F103做一个智能门锁小玩意,密码输入错误次数多进行验证码解锁,这里我采用SIM900A来通过发送短信输入验证码进行解锁。就是简单的了解了一下在这里也单独的写写这个SIM900A的一写笔记。
基本介绍
。。。。。。还是直接进入主题吧
一:单独测试
SIM900A是可以AT指令操作的,所以一般我拿到这种模块就是先单独的测试一下这个模块是否正常。通过一个USB-TTL 和 SIM900A连接 进行调试。用我们的电脑串口助手测试即可。没必要上来就用单片机,现单独测试了先。没问题再转成代码也不迟。
1.准备工作
USB-TTL一个
还有杜邦线就不用说啦
2.接线
3.指令操作
打开你的串口助手
注意:建议使用卖家配套的串口助手
注意:建议使用卖家配套的串口助手
注意:建议使用卖家配套的串口助手
第一步:发送AT检测是否正常 (记得要回车换行再发送) 成功返回OK
AT
第二步:选择短消息格式(0:PDU模式 1:文本模式) (记得要回车换行再发送) 成功返回OK
AT+CMGF=1
第三步:选择TE字库集 (记得要回车换行再发送) 成功返回OK
AT+CSCS='UCS2'
第四步:保存SMS设置 (记得要回车换行再发送) 成功返回OK
AT+CSCA?
第五步:设置短消息文本模式参数 (记得要回车换行再发送) 成功返回OK
AT+CSMP=17,167,0,25
**第六步:设置接收短信方的电话号码(要转UNICON编码) (记得要回车换行再发送) 成功返回>**不知道咋转往下翻有一个代码是生成的。
AT+CMGS='你接收短信方的电话号码的UNICON编码'
第七步:发送要发送的内容(要转UNICON编码)(记得要回车换行再发送)成功返回>
'发送的内容的UNICON编码'
第八步:发送结束标志 16进制:0X1A 切换到16进制模式发送(不需要回车换行) 成功返回OK
1A
提示:
1.不出意外的话你设置接收短信的手机号码就能接收到你发送的短信内容
2.上面提到的为啥最好用卖家提供的串口助手呢 因为我一开始就没用卖家的,我用的其他,换了2个都是发送最后的1A 返回的error 而不是OK。后来用回他们提供的就成功了。
3.关于UNICON编码转换软件 一般卖家都会提供资料的 如下图
你没有也没关系 或者懒得找咱就自己写一个 我这里也有写 请忘下看 不过我这里是ASCII转Unicode 如果是中文你可以自己写一下 或者还是找软件转吧 哈哈哈哈
4.测试结果
二:关于Unicode编码
Unicode基本介绍
Unicode一般指统一码,也叫万国码、单一码,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
1、编码方式
unicode是一种国际组织制定能容纳所有文字和符号的字符编码方案。Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。码位就是可以分配给字符的数字。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。
我们看图 我这里只是ASCII转… 凑合看吧
我们把ASCII字符串用当成双字节汉字转unicode码你发现1这个字符变成了0031
这31是不是你想到了什么,1的16进制不就是0X31吗?前面补2个0后面是它的16进制不就完事了么?
/**********************************************************************
描述: ASCII 转 unicode 比如 '1' 转成 '0031'
***********************************************************************/
void ASCII_TO_Unicode(char *ASCII,char *Unicode)
{
int length;
int i = 0;
int j = 0;
memset(Unicode,'