No se puede enviar SMS usando comandos AT

Tenga la amabilidad de echarle un vistazo al siguiente código. Estoy usando QextSerialPort para acceder a los puertos

 #include  #include  #include  int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QList ports = QextSerialEnumerator::getPorts(); QextSerialPort *port; QString portName; int counter=0; //Navigate through ports untill you find huwawei USB dongle while(counter<ports.size()) { portName = ports[counter].portName; QString productId= ports[counter].productID; QString physicalName = ports[counter].physName; QString vendorId = ports[counter].vendorID; QString friendName = ports[counter].friendName; string convertedPortName = portName.toLocal8Bit().constData(); string convertedProductId = productId.toLocal8Bit().constData(); string convertedPhysicalName = physicalName.toLocal8Bit().constData(); string convertedVendorId = vendorId.toLocal8Bit().constData(); string convertedFriendName = friendName.toLocal8Bit().constData(); cout << "Port Name: " << convertedPortName << endl; cout << "Product ID:" << convertedProductId << endl; cout << "Physical Name: " << convertedPhysicalName << endl; cout << "Vendor Id: " << convertedVendorId << endl; cout << "Friend Name: " << convertedFriendName << endl; cout << endl; counter++; //Break if you found Huwawei USB dongle, assign the port to a new port if (std::string::npos != convertedFriendName.find("HUAWEI Mobile Connect - 3G Modem")) { std::cout << "found!" <open(QIODevice::ReadWrite) ; cout <isOpen() <write("AT+CFUN=1"); port->write("AT+CMGF=1 "); port->write("AT+CMGS=1234567"); port->write("Hello Test SMS"); //port->write("0x1A"); port->flush(); port->close(); cout <isOpen() << endl; system("pause"); return 0; } 

En este código, estoy tratando de enviar SMS usando comandos AT. Mi dongle es un dongle USB Huwawei. Es conocido como “Módem MegaFone” de todos modos.

En mi código, no puedo enviar ningún mensaje de texto en realidad. ¿Porqué es eso? Tenga en cuenta que debe editar el número de teléfono cuando ejecuta este código. Tenga en cuenta que soy muy nuevo en QT, Progtwigción USB y comandos AT. Incluso no sé si estoy accediendo al puerto correcto, porque hay 3 puertos que pertenecen a huwawei. Mi resultado es el siguiente.

Por favor, ayúdame a enviar mensajes de texto correctamente.

enter image description here

ACTUALIZAR

 #include  #include  #include  int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QList ports = QextSerialEnumerator::getPorts(); QextSerialPort *port; QString portName; int counter=0; //Navigate through ports untill you find huwawei USB dongle while(counter<ports.size()) { portName = ports[counter].portName; QString productId= ports[counter].productID; QString physicalName = ports[counter].physName; QString vendorId = ports[counter].vendorID; QString friendName = ports[counter].friendName; string convertedPortName = portName.toLocal8Bit().constData(); string convertedProductId = productId.toLocal8Bit().constData(); string convertedPhysicalName = physicalName.toLocal8Bit().constData(); string convertedVendorId = vendorId.toLocal8Bit().constData(); string convertedFriendName = friendName.toLocal8Bit().constData(); cout << "Port Name: " << convertedPortName << endl; cout << "Product ID:" << convertedProductId << endl; cout << "Physical Name: " << convertedPhysicalName << endl; cout << "Vendor Id: " << convertedVendorId << endl; cout << "Friend Name: " << convertedFriendName << endl; cout << endl; counter++; //Break if you found Huwawei USB dongle, assign the port to a new port if (std::string::npos != convertedFriendName.find("HUAWEI Mobile Connect - 3G Modem")) { std::cout << "found!" <open(QIODevice::ReadWrite) ; cout <isOpen() <write("AT+CFUN=1\n"); cout <write("AT+CMGF=1 \n "); cout <write("AT+CMGS=0776255495\n"); cout <write("Hello Test SMS\n"); cout <write("0x1A"); port->flush(); port->close(); cout <isOpen() << endl; system("pause"); return 0; } 

Tu problema es el siguiente:

 port->write("AT+CFUN=1"); port->write("AT+CMGF=1 "); port->write("AT+CMGS=1234567"); port->write("Hello Test SMS"); 

Siempre después de enviar una línea de comando de AT al módem, DEBE esperar el código de resultado final (por ejemplo, típicamente OK o ERROR aunque haya algunos más, y debe estar preparado para manejarlos todos. Para ver un ejemplo de cómo esperar códigos de resultado final, puede ver el código fuente de atinout , que es un pequeño progtwig para leer una lista de comandos AT, enviarlos al módem e imprimir las respuestas).

Porque sin esperar el siguiente comando abortará el comando que se está ejecutando actualmente. El aborto de comandos AT se define en la sección “5.6.1 Cancelación de comandos” en V.250. Si tiene poca experiencia en el manejo de comandos AT, esa especificación es una lectura obligada. También harías bien en leer 27.005 para los comandos + CMG … que usas. Encontrará enlaces a las especificaciones en la información de etiqueta al comando .

Para AT+CMGS específicamente, también debe esperar “\ r \ n>” antes de enviar el texto, consulte mi otra respuesta .