Não é possível enviar SMS usando comandos AT

Por favor, seja gentil o suficiente para dar uma olhada no seguinte código. Estou usando o QextSerialPort para acessar portas

 #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; } 

Neste código, estou tentando enviar SMS usando comandos AT. Meu dongle é um dongle USB de Huwawei. É conhecido como “MegaFone Modem” de qualquer maneira.

No meu código, não consigo enviar nenhum SMS. Por que é que? Por favor, note que você tem que editar o número de telefone quando você executa este código. Por favor, note que eu sou muito novo nos comandos QT, USB Programming e AT. Eu nem sei se estou acessando a porta correta, pois existem 3 portas que pertencem ao huwawei. Minha saída é a seguinte.

Por favor me ajude a enviar SMS corretamente.

insira a descrição da imagem aqui

ATUALIZAR

 #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; } 

Seu problema é o seguinte:

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

Sempre depois de enviar uma linha de comando AT para o modem, você DEVE aguardar o código do resultado final (por exemplo, normalmente OK ou ERROR embora existam outros, e você deve estar preparado para lidar com todos eles. Para um exemplo de como esperar por códigos de resultado final, você pode olhar para o código-fonte de atinout , que é um pequeno programa para ler uma lista de comandos AT, enviá-los para o modem e imprimir as respostas).

Porque sem esperar, o comando a seguir abortará o comando atualmente em execução. O aborto de comandos AT é definido na seção “5.6.1 Abortando comandos” em V.250. Se você tem pouca experiência com o manuseio de comandos AT, essa especificação é uma leitura obrigatória. Além disso, você faria bem em ler 27.005 para os comandos + CMG … que você usa. Você encontra links para as especificações nas informações da marca de comando .

Para AT+CMGS especificamente, você também deve aguardar “\ r \ n>” antes de enviar o texto, ver minha outra resposta .

    Intereting Posts