Android Things и Adafruit Ultimate GPS Breakout v3

Я начинаю играть с Adafruit Ultimate GPS Breakout v3 с Android Things v1.0.1 на Raspberry Pi 3. Я использую код здесь: Github Contrib Drivers, чтобы попытаться получить координаты GPS, но мне не повезло, поэтому я надеюсь, что кто-нибудь укажет мне правильное направление.

GpsModuleCallBack() ничего не показывает в журнале.

Вот мой код:

MainActivity.java

public class MainActivity extends Activity {

private static final String UART_DEVICE_NAME = "UART0";

UartDevice mDevice;
NmeaGpsModule mGpsModule;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setTitle("GPS Test");

    PeripheralManager gpiolist = PeripheralManager.getInstance();
    List<String> portList = gpiolist.getGpioList();
    if (portList.isEmpty()) {
        Log.w(TAG, "No GPIO port available on this device.");
    } else {
        Log.i(TAG, "List of available ports: " + portList);
    }

    PeripheralManager uartlist = PeripheralManager.getInstance();
    List<String> deviceList = uartlist.getUartDeviceList();
    if (deviceList.isEmpty()) {
        Log.w(TAG, "No UART port available on this device.");
    } else {
        Log.i(TAG, "List of available devices: " + deviceList);
    }


    // Attempt to access the UART device
    try {
        PeripheralManager gpsmanager = PeripheralManager.getInstance();
        mDevice = gpsmanager.openUartDevice(UART_DEVICE_NAME);
        Log.i(TAG, "Accessed " + UART_DEVICE_NAME );
    } catch (IOException e) {
        Log.w(TAG, "Unable to access UART device", e);
    }

    try {
        mGpsModule = new NmeaGpsModule(
               "UART0", 9600, 1.8f);

        mGpsModule.setGpsModuleCallback(new GpsModuleCallback() {
            @Override
            public void onGpsSatelliteStatus(GnssStatus status) {
                Log.i(TAG, "Status: " + status.getSatelliteCount());
            }

            @Override
            public void onGpsTimeUpdate(long timestamp) {
                Log.i(TAG, "Time: " + timestamp);
            }

            @Override
            public void onGpsLocationUpdate(Location location) {
                Log.i(TAG, "Location: " + location.getLatitude() + location.getLongitude());
            }

            @Override
            public void onNmeaMessage(String nmeaMessage) {
                Log.i(TAG, "NMEA Message: " + nmeaMessage);
            }
        });

    } catch (IOException e) {
        // couldn't configure the gps module...
    }

    // Close the GPS module when finished:

    try {
        mGpsModule.close();
    } catch (IOException e) {
        // error closing gps module
    }

}

@Override
protected void onDestroy() {
    super.onDestroy();

    if (mDevice != null) {
        try {
            mDevice.close();
            mDevice = null;
        } catch (IOException e) {
            Log.w(TAG, "Unable to close UART device", e); }
    }
}

person Faz    schedule 06.06.2018    source источник
comment
У Raspberry pi 3 есть проблемы с UART, поэтому: 1) проверьте подключение проводов; 2) взгляните на это.   -  person Andrii Omelchenko    schedule 06.06.2018
comment
@AndriiOmelchenko Привет, Андрей, я уже пробовал решения по ссылке. Он подключен напрямую к Pi, поэтому без кабеля TTL. может ли это быть фактором?   -  person Faz    schedule 08.06.2018


Ответы (1)


Драйверы Android Things открывают для вас периферийные порты, поэтому вам не следует обращаться к UART напрямую из PeripheralManager И использовать драйвер. Удалите следующий блок кода:

try {
    PeripheralManager gpsmanager = PeripheralManager.getInstance();
    mDevice = gpsmanager.openUartDevice(UART_DEVICE_NAME);
    Log.i(TAG, "Accessed " + UART_DEVICE_NAME );
} catch (IOException e) {
    Log.w(TAG, "Unable to access UART device", e);
}

Скорее всего, следующий блок кода в вашем примере генерирует исключение, потому что ему не удается открыть UART (его нельзя открыть дважды), но его поглощает пустой блок catch:

try {
    mGpsModule = new NmeaGpsModule(
           "UART0", 9600, 1.8f);
    ...

} catch (IOException e) {
    // couldn't configure the gps module...
}

Вероятно, вам также следует добавить туда оператор Log, чтобы убедиться, что нет исключений.

person devunwired    schedule 07.06.2018
comment
Привет, я не могу протестировать до понедельника, так как я уезжаю, но мне бы хотелось, чтобы небольшая проверка была зарегистрирована, прежде чем все начнется. Могу ли я закрыть соединение, а затем снова открыть для драйвера, или мне просто нужно избавиться от проверки PM? Кроме того, нет никаких исключений. Вообще ничего не происходит после отображения логов PM. - person Faz; 08.06.2018
comment
Извините, я только что понял о пустом улове. Сейчас добавил лог. Испытаю в понедельник. - person Faz; 08.06.2018
comment
Спасибо Devunwired, я удалил uartlist и gpsmanager PeripheralManagers, после чего он начал показывать сообщения NMEA. Теперь все, что мне нужно сделать, это заставить его отображать широту, долготу и адрес. Похоже, мне нужно много читать. - person Faz; 11.06.2018