Cum se utilizează Arduino cu Java: Pentru Dezvoltatorii Java

Arduino este un instrument entuziast și un instrument preferat al hackerilor. În acest articol vă prezentați modul de trimitere a datelor utilizând portul serial dintr-o aplicație Java. Biblioteca care a fost foarte folosită pentru acest tip de lucru a fost RXTX. Această bibliotecă a fost cu adevărat utilă, totuși aceasta adaugă o complexitate suplimentară dezvoltatorilor, cum ar fi instalarea bibliotecilor native pentru fiecare S.O. (Linux-Mac-Windows). Un înlocuitor bun pentru RXTX este JSSC.

JSSC este o nouă bibliotecă care poate fi folosită pentru trimiterea de date utilizând portul serial din Java și trebuie doar să adăugați fișierul jar în calea de clasă a aplicației Java și nu este nevoie de nimic altceva. Lasa-ma sa-ti arat:

Tot codul sursă este disponibil pe github în acest link. Dacă doriți o descărcare directă, puteți utiliza acest link (apăsați pe săgeată-adăugați în colțul din dreapta sus)

Am creat o clasă Java pentru a citi ieșirea portului serial:

public class PortReader implements SerialPortEventListener {
    private SerialPort serialPort;
    public PortReader(SerialPort serialPort) {
        this.serialPort = serialPort;
    }
    public synchronized void serialEvent(SerialPortEvent event) {
        if (event.isRXCHAR()) {
            try {
                byte[] buffer = serialPort.readBytes(1);
                System.out.print(new String(buffer));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

Și o clasă simplă de a interacționa cu portul serial:

 

public class SerialPortCom {
    private SerialPort serialPort;
    public void initialize(String serialPortName) throws Exception {
        serialPort = new SerialPort(serialPortName);
        serialPort.openPort();
        serialPort.setParams(SerialPort.BAUDRATE_9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
        serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN |SerialPort.FLOWCONTROL_RTSCTS_OUT);
        // Set a listener to read the ARDUINO output
        serialPort.addEventListener(new PortReader(serialPort), SerialPort.MASK_RXCHAR);
    }

    public void closeConnection() throws Exception {
        serialPort.closePort();
    }

    public void sendData(String data) {
        try {
            serialPort.writeString(data);
        } catch (SerialPortException e) {
            e.printStackTrace();
        }
    }

    public String[] getAvailableSerialPorts() {
        String[] ports = SerialPortList.getPortNames();
        return ports;
    }

}

initialize: metoda de pornire a comunicarii cu un port specificat
sendData: metoda de trimitere a unui șir folosind portul serial
getAvailableSerialPorts: returnează un tablou cu toate porturile disponibile care au fost găsite
closeConnection: închideți conexiunea serial care a fost stabilită anterior

Puteți interacționa utilizând această clasă (doar deschideți IntelliJ / Netbeans / Eclipse, deschideți această clasă și pe ea, faceți clic dreapta -> executați JavaSerialIntegration …). Veți vedea o ieșire cu porturile seriale disponibile, ar trebui să alegeți portul dorit și programul va trimite două șiruri: A și apoi 1, programul va aștepta 10 secunde după fiecare șir trimis.

public class JavaSerialIntegration {
    public static void main(String[] args) throws Exception {
        SerialPortCom serialPortCom = new SerialPortCom();
        String[] ports = serialPortCom.getAvailableSerialPorts();
        System.out.println("Serial ports on the computer are:");
        for (int i = 0; i < ports.length; i++) {
            System.out.println((i + 1) + ". " + ports[i]);
        }

        System.out.println("Chose the serial port desired (1 , 2 , anything), and press enter: ");
        Scanner scanner = new Scanner(System.in);
        int selectedPort = scanner.nextInt();
        String port = ports[selectedPort - 1];

        System.out.println("You will use the port: " + port);
        serialPortCom.initialize(port);
        System.out.println("Sending A....");
        // Send text A
        serialPortCom.sendData("A");
        System.out.println("A has been received");
        // Wait 10 seconds
        System.out.println("Waiting 10 seconds...");
        Thread.sleep(10000);

        System.out.println("Sending 1....");
        // Send text 1
        serialPortCom.sendData("1");
        System.out.println("1 has been received");
        // Wait 10 seconds
        System.out.println("Waiting 10 seconds...");
        Thread.sleep(10000);

        serialPortCom.closeConnection();
        System.out.println("Serial communication has finished");
    }
}

Dacă aveți sugestii mai bune, lasati-le la comentarii.

Lasa un comentariu

Acest sit folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.