我正在尝试使用Android Things Developer Preview 5与Pi标头进行通信。以下是我根据官方Android Things文档创建的用于与标头通信的类:
public class UartComm {
private static final String UART_DEVICE_NAME = "UART1";
private UartDevice mDevice;
private void configureUartFrame(UartDevice uart) throws IOException {
// Configure the UART port
uart.setBaudrate(115200);
}
public void onCreate() {
try {
PeripheralManagerService manager = new PeripheralManagerService();
List<String> deviceList = manager.getUartDeviceList();
if (deviceList.isEmpty()) {
Log.i(TAG, "No UART port available on this device.");
} else {
Log.i(TAG, "List of available devices: " + deviceList);
}
mDevice = manager.openUartDevice(UART_DEVICE_NAME);
configureUartFrame(mDevice);
mDevice.registerUartDeviceCallback(mUartCallback);
} catch (Exception e) {
Log.w(TAG, "Unable to access UART device", e);
}
}
public void readUartBuffer(UartDevice uart) throws IOException {
// Maximum amount of data to read at one time
final int maxCount = 40;
byte[] buffer = new byte[maxCount];
uart.read(buffer, maxCount);
String data = new String(buffer, "UTF-8");
Log.d(TAG, data);
}
private UartDeviceCallback mUartCallback = new UartDeviceCallback() {
@Override
public boolean onUartDeviceDataAvailable(UartDevice uart) {
// Read available data from the UART device
try {
readUartBuffer(uart);
} catch (IOException e) {
Log.w(TAG, "Unable to access UART device", e);
}
// Continue listening for more interrupts
return true;
}
@Override
public void onUartDeviceError(UartDevice uart, int error) {
Log.w(TAG, uart + ": Error event " + error);
}
};
}
在我的MainActivity中,我通过UartComm device = new UartComm()
创建了一个UartComm实例,然后继续调用device.onCreate()
我还修改了/boot/cmdline.txt
并删除了console = serial0,115200并将其替换为console = tty0,我还尝试删除控制台行而不添加console = tty0。在/boot/config.txt
我还删除了enable_uart=1
和core-freq=400
,还添加了dtoverlay=pi3-miniuart-bt
我还试图通过dtoverlay=pi3-disable-bt
完全取消蓝牙支持,但无效。< / p>
我已经测试了标头的工作原理并在Rapsbian中正确配置,我交换了/ dev / ttyAMA0和/ dev / ttyS0并且它正常工作。我能够在Raspbian上运行screen
命令,默认波特率为115200,并且能够获得所需的信息。
我想在Android Things Developer Preview 5中做同样的事情,让蓝牙在mini-uart ttyS0上运行,标题在ttyAMA0上运行。我想要的结果是可以通过UART0访问标题。
具有相同功能的旧USB串行设备可以工作,但我更希望UART设备在物理上位于Pi之上,因此这不是一个选项。
答案 0 :(得分:1)
可能是错的,但不应该:
private static final String UART_DEVICE_NAME = "UART1";
是UART0,即
private static final String UART_DEVICE_NAME = "UART0";
我在这里做了一个UART示例https://github.com/blundell/androidthings-uart/blob/master/app/src/main/java/com/blundell/tut/MainActivity.java(显然是不同的硬件)但它以相同的方式连接到raspberry pi引脚: