Java 安卓事物&;Adafruit终极GPS突破v3

Java 安卓事物&;Adafruit终极GPS突破v3,java,android,raspberry-pi,android-things,adafruit,Java,Android,Raspberry Pi,Android Things,Adafruit,我开始在Raspberry Pi 3上使用Adafruit Ultimate GPS Breakout v3和Android Things v1.0.1。我在这里使用的代码是:尝试获取GPS坐标,但我没有任何运气,所以我希望有人能给我指出正确的方向 gpsModule回调()未在日志中显示任何内容 这是我的密码: MainActivity.java public class MainActivity extends Activity { private static final String

我开始在Raspberry Pi 3上使用Adafruit Ultimate GPS Breakout v3和Android Things v1.0.1。我在这里使用的代码是:尝试获取GPS坐标,但我没有任何运气,所以我希望有人能给我指出正确的方向

gpsModule回调()未在日志中显示任何内容

这是我的密码:

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); }
    }
}
公共类MainActivity扩展活动{
专用静态最终字符串UART\u DEVICE\u NAME=“UART0”;
UartDevice-mDevice;
NMEAGPS模块mGpsModule;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setTitle(“GPS测试”);
PeripheralManager gpiolist=PeripheralManager.getInstance();
List portList=gpiolist.getGpioList();
if(portList.isEmpty()){
Log.w(标记“此设备上没有可用的GPIO端口”);
}否则{
Log.i(标签,“可用端口列表:”+portList);
}
PeripheralManager uartlist=PeripheralManager.getInstance();
List deviceList=uartlist.getUartDeviceList();
if(deviceList.isEmpty()){
w(标签,“此设备上没有可用的UART端口”);
}否则{
Log.i(标签,“可用设备列表:“+deviceList”);
}
//尝试访问UART设备
试一试{
PeripheralManager gpsmanager=PeripheralManager.getInstance();
mDevice=gpsmanager.openUartDevice(UART\U设备\U名称);
Log.i(标签,“已访问”+UART\u设备\u名称);
}捕获(IOE异常){
Log.w(标签“无法访问UART设备”,e);
}
试一试{
mGpsModule=新的NmeaGpsModule(
“UART0”,9600,1.8f);
setGpsModuleCallback(新的GpsModuleCallback()){
@凌驾
公共卫星状态(GnssStatus状态){
Log.i(标记,“Status:+Status.getSatelliteCount());
}
@凌驾
公共无效onGpsTimeUpdate(长时间戳){
Log.i(标签,“时间:”+时间戳);
}
@凌驾
公共位置更新(位置){
Log.i(标记“Location:+Location.getLatitude()+Location.getLatitude());
}
@凌驾
公共void onnmamessage(字符串nmamessage){
Log.i(标记,“NMEA消息:+NMAMessage”);
}
});
}捕获(IOE异常){
//无法配置gps模块。。。
}
//完成后关闭GPS模块:
试一试{
mGpsModule.close();
}捕获(IOE异常){
//关闭gps模块时出错
}
}
@凌驾
受保护的空onDestroy(){
super.ondestory();
如果(mDevice!=null){
试一试{
mDevice.close();
mDevice=null;
}捕获(IOE异常){
Log.w(标记“无法关闭UART设备”,e);}
}
}

Android Things驱动程序为您打开外围端口,因此您不应直接从
外围设备管理器访问UART并使用该驱动程序。请删除以下代码块:

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
语句,以确保没有异常。

Raspberry pi 3与UART存在一些问题,因此:1)检查您的接线连接;2)查看。@AndriiOmelchenko Hi Andrii,我已经尝试了从该链接获得的解决方案。它直接连接到pi,因此没有TTL电缆。可以吗是一个因素吗?嗨,我不能测试,直到周一,因为我不在,但我确实希望在事情开始之前有一个小的日志检查。我可以关闭连接,然后重新为司机打开,还是我应该摆脱PM检查?此外,没有抛出异常。显示PM日志后,什么都不会发生。对不起,我刚刚意识到关于空捕获。现在添加了一个日志。将在周一进行测试。感谢Devunwired,我删除了uartlist和gpsmanager PeripheralManager,然后它开始显示NMEA消息。现在我需要做的就是让它显示Lat、Long和Address。看起来我有大量的阅读要做。