Код: Выделить всё
import com.digi.xbee.api.WiFiDevice;
import com.digi.xbee.api.XBeeDevice;
import com.digi.xbee.api.exceptions.XBeeException;
import com.digi.xbee.api.models.XBeeProtocol;
public class XbeeSending {
/* Constants */
// TODO Replace with the port where your sender module is connected to.
private static final String PORT = "COM3";
// TODO Replace with the baud rate of your sender module.
private static final int BAUD_RATE = 9600;
private static final String DATA_TO_SEND = "100";
public static void main(String[] args) {
XBeeDevice myDevice = new XBeeDevice(PORT, BAUD_RATE);
byte[] dataToSend = DATA_TO_SEND.getBytes();
try {
myDevice.open();
System.out.format("Sending broadcast data: '%s'", new String
(dataToSend));
if (myDevice.getXBeeProtocol() == XBeeProtocol.XBEE_WIFI) {
myDevice.close();
myDevice = new WiFiDevice(PORT, BAUD_RATE);
myDevice.open();
((WiFiDevice)myDevice).sendBroadcastIPData(0x2616, dataToSend);
} else
myDevice.sendBroadcastData(dataToSend);
System.out.println(" >> Success");
} catch (XBeeException e) {
System.out.println(" >> Error");
e.printStackTrace();
System.exit(1);
} finally {
myDevice.close();
}
}
}
[main] INFO com.digi.xbee.api.XBeeDevice - [COM3 - 9600/8/N/1 /N] Открытие интерфейса подключения...
[main] INFO com.digi.xbee.api.XBeeDevice - [COM3 - 9600/8/N/1/N] Интерфейс подключения open.
Средой выполнения Java обнаружена фатальная ошибка:
EXCEPTION_ACCESS_VIOLATION (0xc0000005) по адресу pc=0x00000001800044cb, pid=22096, tid =16868
Версия JRE: среда выполнения Java(TM) SE (17.0.2+8) (сборка 17.0.2+8-LTS-86)
ВМ Java: 64-разрядная серверная виртуальная машина Java HotSpot(TM) (17.0.2+8-LTS-86, смешанный режим, общий доступ, многоуровневая, сжатые oops, сжатые ptrs классов, g1 gc, windows-amd64)
Проблемный кадр:
C [rxtxSerial.dll+0x44cb]
Хотя в ошибке упоминается что-то связанное с rxtx, у меня также есть код для тестирования библиотеки rxtx, которая отлично работает на eclipse. Большинство ответов здесь и в других местах представляют собой что-то вроде «это ошибка в JVM», но мне было интересно, есть ли что-то специфическое для xbee, что кто-то другой мог бы попытаться решить эту проблему, поскольку некоторые ответы в Интернете были из совершенно разных библиотек, и их решения, похоже, у меня не работают, или, возможно, кто-то может попытаться запустить код на другой машине (на моей машине Intel i7-10700k и 32 ГБ оперативной памяти) или скажите мне, есть ли кое-что я упускаю из виду, потому что никогда раньше не работал с этой библиотекой.
В XCTU в ручном режиме я могу прекрасно передавать информацию между двумя Xbees, и Arduino получит информацию и выполнять функции соответствующим образом, я также настроил xbee на «API Enabled [1]», так что, насколько я могу судить по моему тестированию, проблема не должна исходить от самих xbees. Что касается самого кода, то он взят прямо из примеров библиотеки xbee, за исключением порта, который в моем случае является COM3, скорость передачи данных и все другие параметры также соответствуют информации из XCTU на моем компьютере. Я также считал, что проблема может быть в rxtx, но следующий код, который я нашел в Интернете, похоже, работает нормально и завершается без ошибок:
Код: Выделить всё
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import gnu.io.PortInUseException;
import gnu.io.UnsupportedCommOperationException;
import gnu.io.NoSuchPortException;
import java.io.OutputStream;
import java.io.IOException;
public class XbeeSending {
private static final String PORT_NAME = "COM3";
private static final int BAUD_RATE = 9600;
public static void main(String[] args) {
CommPortIdentifier portId = null;
SerialPort serialPort = null;
try {
portId = CommPortIdentifier.getPortIdentifier(PORT_NAME);
serialPort = (SerialPort) portId.open("100", 2000);
serialPort.setSerialPortParams(BAUD_RATE, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
OutputStream outputStream = serialPort.getOutputStream();
outputStream.write("100".getBytes());
System.out.println("Data sent successfully.");
} catch (NoSuchPortException | PortInUseException | UnsupportedCommOperationException | IOException e) {
e.printStackTrace();
} finally {
if (serialPort != null) {
serialPort.close();
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... nding-data
Мобильная версия