在Android Things开发人员预览版5(RPI3)上与UART标头进行通信的问题

时间:2017-08-16 16:59:14

标签: java raspbian raspberry-pi3 android-things

我正在尝试使用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=1core-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之上,因此这不是一个选项。

1 个答案:

答案 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引脚:

enter image description here