Wysyłanie SMS komendy AT

0

Mam takie problem program wysyła komendy at na portc COM jednak nic sie nie dzieje. Gdy te same komendy wpisuje przez terminal portu szeregowego modul gsm wysyla wiadomosc SMS. W czym moze być problem ponizej wklej kod programu

package zapis;

import java.io.*;
import java.util.*;
import gnu.io.*;

public class prawiefinal {
static Enumeration portList;
static CommPortIdentifier portId;
static String messageString = "AT+CMGF=1 \r";
static String messageString2 = "AT+CMGS=\"+48668870895\"\r";
static String messageString3 = "TESTY \032\r\n";
static SerialPort serialPort;
static OutputStream outputStream;

public static void main(String[] args) throws InterruptedException {
    portList = CommPortIdentifier.getPortIdentifiers();


    while (portList.hasMoreElements()) {

        portId = (CommPortIdentifier) portList.nextElement();
        if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {

             if (portId.getName().equals("COM3")) {

                try {
                    serialPort = (SerialPort)
                        portId.open("COM3", 2000);
                } catch (PortInUseException e) {System.out.println("err");}
                try {
                    outputStream = serialPort.getOutputStream();
                } catch (IOException e) {System.out.println("err1");}
                try {
                    serialPort.setSerialPortParams(9600,
                        SerialPort.DATABITS_8,
                        SerialPort.STOPBITS_1,
                        SerialPort.PARITY_NONE);
                } catch (UnsupportedCommOperationException e) {System.out.println("err2");}
                try {
                    outputStream.write(messageString.getBytes());
                    Thread.sleep(3000); 
                    
                    outputStream.write(messageString2.getBytes());  
                    Thread.sleep(3000); 
                    
                   outputStream.write(messageString3.getBytes()); 
                   Thread.sleep(3000);  
                    outputStream.write(26);
                    outputStream.flush();
        System.out.println(messageString);  
        Thread.sleep(3000);
        
        
        
        
        

        outputStream.close();
        serialPort.close();

                } catch (IOException e) {System.out.println("err3");}
            }
        }
    }
}
} 
0

Użyj debuggera i ogarnij gdzie jest błąd. Kod masz dosyć krótki zajmie Ci to z pół godzinki max. Przeglądaj zmienne, które będą Ci się pokazywać, czy wszystko się tam zgadza, nie są nullami, itd.
P.S. Edytuj post, dodając znaczniki <code class="java"> przed rozpoczęciem kodu i </code> po zakończeniu

0

Co do błedu to w kompilatorze debugerr nic nie wskazuje błęd jest w wprowadziu komend najwidoczniej. Jak sprawdzam program do nasluchu portów com to program wysyła komendy na port com. Jednak jest pewna roznica gdy te same komendy wprowadzam przez terminal to po kazdej komendzie daje enter i w terminalu widać zatwierdzenie tej komendy jednak gdy robi to moj program wyglada to tak jakby komenda zostala wyslana ale nie zatwierdzona i tu jest problem ze nie wiem jak w javie to zatwierdzić dlatego licze na pomoc.

0

Nie rozumiesz i chyba nie bardzo wiesz jak z niego skorzystać... ustawiasz sobie w poszczególnych liniach breakpointy i kontrolujesz działanie aplikacji komenda po komendzie. Sprawdzasz co się znajduje w jakiej zmiennej. Ja na Twoim miejscu sprawdziłbym na pewno znaczniki \r oraz \r\n.
Sprawdź czy portlist nie jest pusty. I czemu używasz Enuma? Zrób z tego ArrayList, bedzie Ci wygodniej (moim zdaniem oczywiście, nie narzucam).
I tak patrzę.... użyj outputStram.flush() po każdym write. Możliwe, że łączy Ci komendy w jeden bełkot.

0

import java.io.*;
import java.util.*;
import gnu.io.*;

public class SMSsender {
static Enumeration portList;
static CommPortIdentifier portId;
static String messageString1 = "AT"; // komenda do sprawdzenia poprawnosci modulu gsm
static String messageString2 = "AT+CPIN=\"7078\""; // podanie kodu pin jesli jest
static String messageString3 = "AT+CMGF=1"; // ustawienia trybu tekstowego wiadomosci
static String messageString4 = "AT+CMGS=\"+4866467xxxx\""; // podanie numeru adresata wiadomosci
static String messageString5 = "TESTY2"; // tresc wysylanej wiadomosci
static SerialPort serialPort;
static OutputStream outputStream;
static InputStream inputStream;
static char enter = 13; 
static char CTRLZ = 26; 



public static void main(String[] args) throws InterruptedException {
    portList = CommPortIdentifier.getPortIdentifiers();
  
    while (portList.hasMoreElements()) {

        portId = (CommPortIdentifier) portList.nextElement();
        if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {

             if (portId.getName().equals("COM3")) {// poszukiwanie portu COM

                try {
                    serialPort = (SerialPort)// otwarcie portu COM do ktorego przylaczony jest modul gsm
                        portId.open("COM3", 2000);
                } catch (PortInUseException e) {System.out.println("err");}
                try {
                    outputStream = serialPort.getOutputStream();//tworzenie wyjsciowego kanalu przesylowego
                    inputStream = serialPort.getInputStream();
                } catch (IOException e) {e.printStackTrace();}
                try {
                    serialPort.setSerialPortParams(9600,
                        SerialPort.DATABITS_8,
                        SerialPort.STOPBITS_1,
                        SerialPort.PARITY_NONE); // ustawienia parametrów portu COM (musza one się zgadzac z tymi w Windows
                } catch (UnsupportedCommOperationException e) {e.printStackTrace();}
                try { 
                	
                	outputStream.write((messageString1 + enter).getBytes());//Podanie komendy at do sprawdzenie czy modul dziala
                
                   
                    Thread.sleep(100); 
                    outputStream.flush();
                	
                    outputStream.write((messageString2 + enter).getBytes()); // podanie kodu pin do modulu
                    
                    
                     Thread.sleep(100); 
                     outputStream.flush();
                     
                	outputStream.write((messageString3 + enter).getBytes()); // ustwienie trybu tekstowego wiedomosci
                  
                    Thread.sleep(100); 
                    outputStream.flush(); 
                    
                   
                    	 
                    
                    outputStream.write((messageString4 + enter).getBytes()); // podanie numeru telefony adresata wiadomosci
                    
                    Thread.sleep(100);  
                    outputStream.flush();
                    
                   outputStream.write((messageString5 + CTRLZ).getBytes());  // podanie tresci wiadomosci i jej wyslanie
                  
                    outputStream.flush(); 
                    Thread.sleep(100); 
                    
                    
        System.out.println("Wyslano wiadomosc");  
        Thread.sleep(3000);
        

        outputStream.close();
        serialPort.close();
        System.out.println("Port COM zamkniety"); 

                } catch (IOException e) {e.printStackTrace();}
            }
        }
    }
}
} 
 

To działający kod powodem wczesniejszego nie działanie było złe wprowadzanie enter i CTRLZ bądź ich brak

1 użytkowników online, w tym zalogowanych: 0, gości: 1