Qt下面利用4G 模块SIM7600发短信调试总结

项目需要在基于Qt的界面下发送短信,选用4G模块SIM7600通过AT指令发送短信,和小伙伴调了一天多,终于可以了,下面简单总结一下调试过程中遇到的问题和学习到的经验,供大家参考,少走弯路。

1、在网上购买了该模块时商家回给你大量的资料,你需要的只是一个SIM7600的使用说明书,商家给的是window下的串口助手,首先在windows下调试正常,证明模块是OK 的。

2、发送中文短信步骤,根据说明书上来就行

(1) 发送: AT+CMGF=1, 设置为文本模式。

(2)发送 AT+CSMP=17,167,2,25,设置文本模式参数。

(3)AT+CSCS=”UCS2”,设置为 UCS2 编码字符集。

(4)设定发送手机号:由于使用了 UCS2字符集,所有字符/数字/汉字,都必须使用 UNICODE 编码。可以使用Unicode转换工具转换。AT+CMGS=”0031003300370039------UNICODE 编码-------0033003100350036035”

(5)输入我们需要发送的内容:同样需要转为unicide编码

0048004F0045002D00530049004D0037003600300030004300454E2D82F1658777ED4FE153D190016D4B8BD5

(6)最后选择串口助手上的“十六进制发送”或者“HEX发送”勾选框,然后输入1A,点击发送,就可以收到发送成功的显示了。

NOTE:前四步发送指令时如果串口助手上有发送新行,则需要勾选,没有的话,在输入完指令需要按一下回车再发送!!!

3、发送英文短信:步骤与中文短信类似,说明文档中说的很清楚

AT+CMGF=1
AT+CSCS="GSM"
AT+CSMP=17,23,64,244 //TXT 发送一般不用设置如果设置发送中文后想再发英文需要设置一次啊。
AT+CMGS="158××××××××"

发送信息,十六进制发送1A,返回OK,证明发送成功!

NOTE:我们调试的时候没仔细看文档,发送完中文短信,再发英文需要设置 AT+CSMP,我们以为还是设置AT+CSMP=17,23,64,244,怎么改返回都是 text mode error!后来发现切换到发送英文信息模式需要设置 AT+CSMP=17,167,0,0而不是AT+CSMP=17,23,64,244!!

4、QT串口读写实现短信发送

之前同学在网上找了几个Qt写的串口助手,带源码的,有在Ubuntu 下调试的(如上图)感谢网友分享,链接暂时找不到了,我把资源 传到了百度云,分享给大家!

链接:https://pan.baidu.com/s/1xPtKwCeEq3sIBnEARXR8Ig 密码:prn6

简单来说就是将输入指令那几步转为按钮点击就可以了,主要用到QtSerialPort这个模块

(1)设置串口,写在该窗口的构造函数中,调用改窗口时打开串口,返回时关闭串口

//set the serialport
    serial.setPortName("/dev/ttyUSB2");	//设置COM口 改为("/dev/ttyUSB0")
    serial.setBaudRate(QSerialPort::Baud9600,QSerialPort::AllDirections);//设置波特率和读写方向
    serial.setDataBits(QSerialPort::Data8);		//数据位为8位
    serial.setFlowControl(QSerialPort::NoFlowControl);//无流控制
    serial.setParity(QSerialPort::NoParity);	//无校验位
    serial.setStopBits(QSerialPort::OneStop);	//一位停止位

    if(serial.isOpen())//先关串口,再打开,可以保证串口不被其它函数占用。
    {serial.close();}
    if (serial.open(QIODevice::ReadWrite)) {
      QMessageBox::information (this,tr("Info"),tr("Connect successfully!"),QMessageBox::Ok);
    } else {
      QMessageBox::information (this,tr("Info"),tr("Connect Failed!"),QMessageBox::Ok);
    }

(2)设置信息模式,写在选择信息按钮的槽函数中,也可以加入上一步需要点击的按钮

//在选择信息按钮的槽函数中
void SendfileDialog::on_pushButton_clicked()
{
  char  cmgf[]="AT+CMGF=1\r";  //设置短信发送模式为text
  serial.write(cmgf);
  QThread::msleep( 1000 );// 休息1秒

  char cscs[]="AT+CSCS=\"";
  strcat(cscs,"GSM\"\r");
  serial.write(cscs);
  QThread::msleep( 1000 );// 休息1秒

  char  csmp[]="AT+CSMP=17,167,0,0\r";
  serial.write(csmp);
  QThread::msleep( 1000 );// 休息1秒
}

(3)输入收信人手机号,在确认按钮中槽函数中发送指令

void SendfileDialog::on_enter_phone_clicked()
{
     QString  send_number= ui->lineEdit_phone->text();
    char*  char_number;
    QByteArray buff = send_number.toLatin1();
    char_number=buff.data();

    char  cmgs[256]="at+cmgs=\"";   //AT+CMGS="号码"
    strcat(cmgs,char_number);
    strcat(cmgs,"\"\r");    //加个双引号
    serial.write(cmgs);//
    printf("cmsg :%s\n",cmgs);
    QThread::msleep( 1000 );// 休息1秒
}

(4)设定GO按键发送信息,发送短信(其实这里可以设为QMessageBox确认键,避免按键过多)写于槽函数中

void SendfileDialog::on_go_Button_clicked()
{
  QString xinxi= " Your file is on the way,please get it to your office door late!";
  QByteArray send;
  send=xinxi.toLatin1();
  serial.write(send);

  QString sendData = "1A";
  QByteArray sendbuff;
  sendbuff = QByteArray::fromHex(sendData.toLatin1().data());
  serial.write(sendbuff);
}

(5)大致界面如下

5、知识点总结

(1)文章中写入AT指令参考C语言的实现方式,参考文章链接:SIM71004G模块使用Linux C语言实现打电话发短信,文中程序编译直接课用于sim7600打电话,发短信还需要简单添加命令设置。

(2)写入AT+CMGS=“158××××××××”命令时,双引号着实另我废了一些脑筋,最后采用的字符链接strcat(),还涉及到将手机号string转char类型 。参考:Qt下 QString转char*

有什么写的不对的,还请留言指正!

猜你喜欢

转载自blog.csdn.net/qq_30460905/article/details/81805891