Arduino - Xbee- Java Communication - PullRequest
       33

Arduino - Xbee- Java Communication

0 голосов
/ 20 сентября 2018

Я новичок в этом, и я пытаюсь создать простую программу, которая будет отправлять команду в arduino, а затем отправлять ответ обратно в Java через xbee.Я могу отправить команду в Arduino, но не могу прочитать ответ от нее.Я использую XBee S2C с настройкой API-2.Как я могу прочитать ответ от Arduino в моем Java?

Вот мой код для Java:

public class Transmitdataxbee {
    private static final String PORT = "COM8";
    private static final int BAUD_RATE = 9600;
    private static RemoteXBeeDevice myremote;
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        XBeeDevice myDevice = new XBeeDevice(PORT, BAUD_RATE);
        Scanner input_rpi = new Scanner(System.in);
        String data;

        try {
            myDevice.open();
            XBeeNetwork myXBeeNetwork = myDevice.getNetwork();
            myXBeeNetwork.setDiscoveryTimeout(10000);
            myXBeeNetwork.startDiscoveryProcess();

            while (myXBeeNetwork.isDiscoveryRunning()) {
                System.out.println("Discovering devices...");

            }
            myremote = myXBeeNetwork.getDevice(new XBee64BitAddress("0013A20041768E48"));
            String nodeIdentifier = myremote.getNodeID();
            System.out.print("Node ID: ");
            System.out.println(nodeIdentifier);

            System.out.println("Enter Command");
            data = input_rpi.next();

            myDevice.sendData(myremote, data.getBytes());

            System.out.println("Current timeout: " + myDevice.getReceiveTimeout() + "milliseconds");

            //read from arduino
            XBeeMessage edMessage = myDevice.readDataFrom(myremote);
            String data_ed = edMessage.getDataString();
            System.out.println(data_ed);



        } catch (XBeeException e) {
            e.printStackTrace(System.out);
            myDevice.close();
            System.exit(1);
        }
    }
}

, и это мой код для Arudino

#include <XBee.h>

XBee xbee = XBee();
ZBRxResponse rx = ZBRxResponse();
XBeeAddress64 test = XBeeAddress64(0x0013A200, 0x41768E6E);

ModemStatusResponse msr = ModemStatusResponse();

uint8_t data;
char cmd1[9];
String cmd;
char d_ata;
int j = 0;
int icount = 0;
int count = 32;

void setup() {
     Serial.begin(9600);
     Serial2.begin(9600);
     xbee.setSerial(Serial2);
     xbee.setAPImode(2);
     Serial.println("Connecting....");
}

void loop() {
    xbee.readPacket(50);
    if (xbee.getResponse().isAvailable()){
        Serial.println("Connected");
        Serial.println("Getting Message...");

        if (xbee.getResponse().getApiId() == ZB_RX_RESPONSE) {
            xbee.getResponse().getZBRxResponse(rx);
            Serial.println("Packet received!");

            if(rx.getOption() == ZB_PACKET_ACKNOWLEDGED){
                Serial.println("Packet acknowledged");
            }
            cmd = "";
            Serial.println("Received Data: ");
            for (int i = 0; i < rx.getDataLength(); i++) {
                //print8Bits(rx.getData()[i]);
                cmd1[i] = (char) rx.getData()[i];
                cmd += cmd1[i];
                Serial.println(cmd);
                Serial.println();
            }
            if (cmd == "a") {
                data = "l";
                ZBTxRequest zbtx = ZBTxRequest(test,data, sizeof(data));
                xbee.send(zbtx);
            }
            else if (cmd == "w"){
                data = "u";
                ZBTxRequest zbtx = ZBTxRequest(test,data, sizeof(data));
                xbee.send(zbtx);
            }
            else if (cmd == "s"){
               data = "d";
               ZBTxRequest zbtx = ZBTxRequest(test,data, sizeof(data));
               xbee.send(zbtx); 
            }
            else if (cmd == "d"){
                data = "r";
                ZBTxRequest zbtx = ZBTxRequest(test,data, sizeof(data));
                xbee.send(zbtx);
            }
            else{
                data="e";
                ZBTxRequest zbtx = ZBTxRequest(test,data, sizeof(data));
                xbee.send(zbtx);
            }  
        }
    } else if (xbee.getResponse().isError()) {
       // some kind of error happened, I put the stars in so
       // it could easily be found
       Serial.print("************************************* error code:");
       Serial.println(xbee.getResponse().getErrorCode(),DEC);
    }
}

1 Ответ

0 голосов
/ 20 сентября 2018

После нескольких повторных исследований я нашел документацию от Digi, которая может вам помочь.

Как я и думал в своем первом комментарии, проблема, кажется, исходит от той части, где вы пытаетесь прочитать данные изdevice.

В соответствии с этой документацией: https://www.digi.com/resources/documentation/digidocs/90001438/reference/r_xb_java_lib_data_reception_callback.htm

Вы должны создать регистратор данных и зарегистрировать его на своем XBeeDevice.

Они даже дают вам несколько советов о XBeeMessageинформация.

Я не знаю ваш уровень Java, но весь код приведен по ссылке выше.

Если вы хотите узнать больше о слушателях, отметьте это: Что такоецель слушателя в Java?

...