Port szeregowy (serial port) pozwala na transmisje danych w postaci ciągu bitów. Jest on wykorzystywany do połączenia komputera z różnymi sprzętami np.:
- drukarka
- modem USB
- CD-ROM
Przygotwanie do połączenia
W celu pozyskania portu przez jaki należy się komunikować z urządzeniem należy przejść do Menadżera urządzeń i wyszukać sprzęt, z którym zaczynamy prace. W jego właściwościach sprawiamy port.
Połączenie
Do skomunikowania się z urządzeniem można wykorzystać oprogramowanie Putty. Obrazek poniżej pokazuje, jak skonfigurować połączenie zgodnie z wybranym sprzętem.
Komendy AT
Modem GSM pozwala na komunikowanie się poprzez komendy AT.
Lista podstawowych komend:
AT+CGMI // pokazuje informacje o producencie AT+CGMM // pokazuje informacje o modelu urządzenia AT+CMGF=? // pokazuje tryby pracy urządzenia AT+CMGR=0 // wczytanie wiadomości SMS pobranej ze sektora 0 AT+CMGS="+48000000000" // wysłanie SMS na numer +48000000000
Przykład wykorzystania komend AT w terminalu Putty:
Oprogramowanie
Do projektu należy dodać bibliotekę pozwalającą za wykorzystanie połączenia szeregowego:
<dependency> <groupId>org.scream3r</groupId> <artifactId>jssc</artifactId> <version>2.8.0</version> </dependency>
Inicjalizacja połączenia z Serial Port może wyglądać w następujący sposób:
public ModemConnection() throws SerialPortException, InterruptedException { SerialPort serialPort = new SerialPort("COM3"); serialPort.openPort(); serialPort.setParams(SerialPort.BAUDRATE_9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); }
Metody odpowiedzialne na wysyłkę SMS i odczyt SMS zgodnie z komendami AT:
private static final byte NEW_LINE = 0x0D; private static final byte END_OF_LINE = 0x1A; public String readSms(String memoryPlace) { String message = ""; try { serialPort.writeString("AT+CMGF=1"); Thread.sleep(1000); serialPort.writeByte(NEW_LINE); Thread.sleep(1000); serialPort.writeString("AT+CMGR=" + memoryPlace); Thread.sleep(1000); serialPort.writeByte(NEW_LINE); Thread.sleep(1000); message = serialPort.readString(); } catch (SerialPortException | InterruptedException e) { e.printStackTrace(); } return message; } public void sendSms(String phoneNumber, String message) { try { serialPort.writeString("AT+CMGF=1"); Thread.sleep(1000); serialPort.writeByte(NEW_LINE); serialPort.writeString("AT+CMGS=\"" + phoneNumber + "\""); Thread.sleep(1000); serialPort.writeByte(NEW_LINE); Thread.sleep(1000); serialPort.writeString(message); Thread.sleep(1000); serialPort.writeByte(NEW_LINE); Thread.sleep(1000); serialPort.writeByte(END_OF_LINE); } catch (SerialPortException | InterruptedException e) { e.printStackTrace(); } }
Wywołanie metod z odpowiednimi argumentami spowoduje odczytanie lub wysłanie SMS.
Materiały dodatkowe
Zapraszam Cię do obejrzenia filmu w trakcie którego prezentuje krok po kroku pełną implementacje własnej bramki SMS działającą jako usługa webowa: