QT串口2--控制GSM模块的使用
生活随笔
收集整理的這篇文章主要介紹了
QT串口2--控制GSM模块的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、首先介紹下所用的gsm模塊,YYROBOT_SIM800C 模塊是一款高性能高性價比工業級的 GSM/GPRS 模塊(開發板)。本模塊采用 SIMCOM 公司的工業級四頻 850/900/1800/1900MHz SIM800 芯片, 可以低功耗實現語音、SMS、數據和傳真信息的傳輸。
注: SIM800 支持 4 頻,通俗講就是可以全球使用,而老版本的 SIM900A 僅支持雙頻,只能大陸使用。
2、QT串口程序設計:基于QT串口1的修改點擊打開鏈接
3、程序:.h文件
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QtSerialPort/QSerialPort> #include <QtSerialPort/QSerialPortInfo>namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private slots:void on_openportButton_clicked();void read_Com();void on_sendButton_clicked();void on_clearpushButton_clicked();void QStringtoHex(QByteArray& sendData,QString str);char ConvertHexChar(char ch);void on_msgButton_clicked();void on_pushButton_clicked();void on_pushButton_2_clicked();private:Ui::Widget *ui;QSerialPort serial; //聲明串口類//QByteArray sendData; };#endif // WIDGET_H.cpp文件
#include "widget.h" #include "ui_widget.h" #include<QMessageBox> #include <QThread>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);}Widget::~Widget() {delete ui; }void Widget::on_openportButton_clicked() {if(ui->portNameComboBox->isEnabled()){ui->openportButton->setText("ClosePort"); //按下“OpenPort”后,按鍵顯示為“ClosePort”ui->portNameComboBox->setDisabled(true); //按下“OpenPort”后,禁止再修改COM口serial.setPortName(ui->portNameComboBox->currentText()); //設置COM口serial.setBaudRate(QSerialPort::Baud9600,QSerialPort::AllDirections);//設置波特率和讀寫方向serial.setDataBits(QSerialPort::Data8); //數據位為8位serial.setFlowControl(QSerialPort::NoFlowControl);//無流控制serial.setParity(QSerialPort::NoParity); //無校驗位serial.setStopBits(QSerialPort::OneStop); //一位停止位serial.close(); //先關串口,再打開,可以保證串口不被其它函數占用。if(serial.open(QIODevice::ReadWrite)) //以可讀寫的方式打開串口{connect(&serial,SIGNAL(readyRead()),this,SLOT(read_Com())); //把串口的readyRead()信號綁定到read_Com()這個槽函數上}} else {ui->openportButton->setText("OpenPort"); //按下“ClosePort”后,按鍵顯示為“OpenPort”ui->portNameComboBox->setEnabled(true); //按下“ClosePort”后,COM口可被修改serial.close(); //關串口} } void Widget::read_Com() {QByteArray temp=serial.read(1);//在緩沖區中讀一個byteif(!temp.isEmpty())//如果讀到的數據不為空{ui->recvTextEdit->insertPlainText("0x");ui->recvTextEdit->insertPlainText(temp.toHex());//顯示接收到的數據的十六進制ui->recvTextEdit->insertPlainText(" ");} }void Widget::on_sendButton_clicked() {//ui->ASCIIcheckBox->setChecked(true);// ui->HexcheckBox->setChecked(true);// ui->newlinecheckBox->setChecked(true);//發送ASCII字符if(ui->ASCIIcheckBox->isChecked()){QString sendData= ui->sendEdit->toPlainText().toLatin1();//以ASCII碼的形式通過串口發送出去。QByteArray send;sendData += "\r\n";send=sendData.toLatin1();serial.write(send);}//發送16進制字符else if(ui->HexcheckBox->isChecked()){//讀取要發送的數據QString sendData = ui->sendEdit->toPlainText().toLatin1();//是否顯示發送消息// displaysend(sendData);// HexToStringQByteArray sendbuff;//方法一//QStringtoHex(sendbuff,sendData);//方法二sendData +="\r\n";sendbuff = QByteArray::fromHex(sendData.toLatin1().data());serial.write(sendbuff);}}void Widget::on_msgButton_clicked() {QString moshi="AT+CSCS='GSM'"; QByteArray send;moshi += "\r\n";send=moshi.toLatin1();serial.write(send); QThread::msleep( 1000 );// 休息1秒//QString wenben=' AT+CMGF=1"\r\n"';//QString haoma='AT+CMGS="18053301936""\r\n"';//QString xinxi= 'ROBOT"\r\n"';QString wenben= "AT+CMGF=1";QByteArray send1;wenben += "\r\n";send1=wenben.toLatin1();serial.write(send1);QThread::msleep( 1000 );// 休息1秒/*QString haoma="AT+CMGS='18053301936'";ui->sendEdit->setPlainText("haoma");//以ASCII碼的形式通過串口發送出去。haoma += "\r\n";QByteArray send2;send2=haoma.toLatin1();serial.write(send2);ui->sendEdit->clear(); */}void Widget::on_clearpushButton_clicked() {ui->sendEdit->clear();ui->recvTextEdit->clear(); }char Widget::ConvertHexChar(char ch) {if(ch>='a'&&ch<='f'){return ch-'a'+10;}else if(ch>='A'&&ch<='F'){return ch-'A'+10;}else if(ch>='0'&&ch<='9'){return ch-'0';}else{return -1;} } void Widget::QStringtoHex(QByteArray& sendData,QString str) {char hstr,lstr,hdata,ldata;int len = str.length();int sendnum = 0;QByteArray temp;temp.resize(len/2);//設置大小,len/2會大于實際16進制字符//sendData.resize(len/2);for(int i=0;i<len;){//hstr = str[i].toAscii();hstr = str[i].toLatin1();if(hstr == ' '){++i;continue;}++i;if(i >= len){break;}lstr = str[i].toLatin1();hdata = ConvertHexChar(hstr);ldata = ConvertHexChar(lstr);if(-1 == hdata || -1 == ldata){break;}++i;temp[sendnum] = hdata<<4|ldata;sendnum++;}sendData.reserve(sendnum);sendData = temp.left(sendnum);//去掉多余字符 }void Widget::on_pushButton_clicked() {QString xinxi= "ROBOT";xinxi += "\r\n";QByteArray send;send=xinxi.toLatin1();serial.write(send);QString sendData = "1A"; QByteArray sendbuff;sendData +="\r\n";sendbuff = QByteArray::fromHex(sendData.toLatin1().data());serial.write(sendbuff); }void Widget::on_pushButton_2_clicked() {QString haoma="AT+CMGS='18053301936'";ui->sendEdit->setPlainText("haoma");//以ASCII碼的形式通過串口發送出去。haoma += "\r\n";QByteArray send2;send2=haoma.toLatin1();serial.write(send2);ui->sendEdit->clear();}界面:
總結
以上是生活随笔為你收集整理的QT串口2--控制GSM模块的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux下Git和GitHub使用方法
- 下一篇: 最短路径算法(一) Dijkstra算法