Мне было интересно, можно ли получить доступ к gpio, i2C, uart и т. Д. На черном биглбоне с помощью встроенной Java ME. Я знаю, что это возможно с Java Native Access, но теперь есть API Device I/O 1.0, который включен в Java ME Embedded 8. Есть ли у кого-нибудь опыт с этим? Я запускаю Debian на своем черном бигльбоне.
Доступ к GPIO на Beaglebone Black с использованием Java ME Embedded 8
Ответы (4)
JavaME Embedded 8.1 пока поддерживается только на RaspberryPi, работающем в Linux (а также на некоторых других встраиваемых платах, отличных от Linux).
Я не тестировал использование среды выполнения RPi с другой платой Linux (например, Beagleboard), но я думаю, что она точно не будет работать из коробки. В зависимости от того, как реализована среда выполнения, доступ к низкоуровневому вводу-выводу, такому как GPIO или I2C, может зависеть от платформы.
Обратите внимание, что API-интерфейс Device/IO интегрируется в реализацию платформы Java OpenJDK (поэтому этот API не относится к JavaME). Но и здесь это ограничено RaspberryPi.
https://wiki.openjdk.java.net/display/dio/Main
Попробуйте libbulldog: http://libbulldog.org/bulldog/
Или Кура: (вам понадобится BeagleBone Black Rev C.)
https://www.eclipse.org/kura/index.php
http://eclipse.github.io/kura/doc/beaglebone-quick-start.html
Пример можно найти здесь: http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/RaspberryPi_GPS/RaspberryPi_GPS.html#overview
Это должно сработать... Но я пытаюсь это сделать и не получаю хорошего результата.
Так что удачи ^^
У меня была аналогичная проблема с доступом к GPIO BeagleBoneBlack.
Мне удалось решить эту проблему с помощью наложения дерева устройств GPIO, которое ядро Linux экспортирует в пользовательское пространство. Самое приятное в этом: один единственный Jar, для которого требуется только Java SE 8.
Мой код находится на GitHub: https://github.com/eitch/ch.eitchnet.beaglebone а>
Чтобы запустить его на Raspberry Pi, необходимо сделать две вещи:
- Требуется ядро Linux 4.x (/sys/class/gpio)
- Напишите новое перечисление для PIN-кодов (см. https://github.com/eitch/ch.eitchnet.beaglebone/blob/master/src/main/java/ch/eitchnet/beaglebone/Pin.java)
Эти вещи не должны быть большой проблемой, я думаю.
Как только это будет сделано, доступ к GPIO будет таким же простым:
// Get Bridge:
GpioBridge gpioBridge = GpioBridge.getInstance();
Gpio pin8_07 = gpioBridge.getGpio(Pin.P8_07, Direction.IN);
// Read an input GPIOs value:
Signal currentSignal = gpioBridge.readValue(pin8_07);
System.out.println(pin8_07 + " currently has signal " + currentSignal);
Writing Output Pins
// Write an output GPIOs value:
Gpio pin8_08 = gpioBridge.getGpio(Pin.P8_08, Direction.OUT);
gpioBridge.writeValue(pin8_08, Signal.HIGH);
System.out.println("Set signal of " + pin8_08 + " to " + Signal.HIGH);
Observing Input Pins
// To be notified of changes to an input GPIO, register a GpioSignalListener:
gpioBridge.register(pin8_07, gpio -> System.out.println("Signal of "+pin8_07 + " has changed to " + gpio.getSignal()));