w , ,

FajneFajne

Jak napisać własną bramkę SMS? Obsługa Serial Port w praktyce

bramka sms
bramka sms

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.

putty

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:
komendyAT

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:

Napisane przez Przemysław Bykowski

Aktywny programista i energiczny trener. Specjalizuje się w Spring Boot i uczę go w ramach AkademiaSpring.pl. Po godzinach udzielam się na YouTubach. Więcej o mnie.

Dodaj komentarz

Spring Boot

Spring Boot #23 – Definiowanie własnych wyjątków

Spring Initializr – najnowsze zmiany przy generowaniu projektu