簡體   English   中英

Arduino-Xbee- Java通信

[英]Arduino - Xbee- Java Communication

我對此並不陌生,我正在嘗試制作一個簡單的程序,該程序將向arduino發送命令,然后通過xbee將響應發送回Java。 我可以將命令發送到arduino,但無法讀取它的響應。 我正在使用具有API-2配置的XBee S2C。 如何在Java中讀取來自arduino的響應?

這是我的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);
    }
}

經過幾次重新搜索后,我發現了Digi的一些文檔可能會對您有所幫助。

正如我在第一句話中所認為的那樣,問題似乎出在您嘗試從設備讀取數據的部分。

根據此文檔: https : //www.digi.com/resources/documentation/digidocs/90001438/reference/r_xb_java_lib_data_reception_callback.htm

您必須創建一個數據偵聽器,然后將其注冊到XBeeDevice。

它們甚至給您有關XBeeMessage信息的一些提示。

我不知道您的Java等級,但是上面的鏈接中提供了所有代碼。

如果您想了解有關偵聽器的更多信息,請檢查以下內容: Java中偵聽器的目的是什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM