2017-08-16 4 views
1

Je tente de communiquer avec un en-tête Pi à l'aide d'Android Things Developer Preview 5. Ci-dessous la classe que j'ai créée pour communiquer avec l'en-tête officiel. Vos documents:Problèmes de communication avec l'en-tête UART sur Android Things Developer Preview 5 (RPI3)

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); 
    } 
}; 
} 

Dans mon MainActivity je crée une instance de UartComm en faisant UartComm device = new UartComm() et appeler procéder device.onCreate()

J'ai également modifié /boot/cmdline.txt et enlevé la console = serial0,115200 et remplacé par console = tty0, j'ai aussi o essayé simplement de supprimer la ligne de console sans ajouter console = tty0. En /boot/config.txt J'ai également supprimé enable_uart=1 et core-freq=400 et également ajouté dtoverlay=pi3-miniuart-bt J'ai également essayé de supprimer complètement le support de Bluetooth en faisant dtoverlay=pi3-disable-bt en vain.

J'ai testé que l'en-tête fonctionne et est configuré correctement dans Rapsbian, où j'ai échangé/dev/ttyAMA0 et/dev/ttyS0 et cela a fonctionné correctement. J'ai été capable d'exécuter la commande screen sur Raspbian avec un débit en bauds par défaut de 115200 et j'ai pu obtenir les informations désirées.

Je voudrais faire la même chose dans Android Things Developer Preview 5 et avoir le Bluetooth sur le mini-uart ttyS0 et l'en-tête sur ttyAMA0. Mon résultat souhaité est que l'en-tête soit accessible via UART0.

Un ancien périphérique série USB qui a la même fonctionnalité fonctionne, mais je préférerais que le périphérique UART soit physiquement au-dessus du Pi, ce n'est donc pas une option.

+0

Souhaitez-vous étiqueter une langue? Cela pourrait attirer le bon type de réponses. – Yunnosch

+0

Juste étiqueté Java –

Répondre

1

peut-être tort, mais ne devrait pas:

private static final String UART_DEVICE_NAME = "UART1";

être UART0-à-dire

private static final String UART_DEVICE_NAME = "UART0";

J'ai fait un exemple UART ici https://github.com/blundell/androidthings-uart/blob/master/app/src/main/java/com/blundell/tut/MainActivity.java (matériel évidemment différent) Mais il est connecté à la framboise broches pi de la même manière comme si:

enter image description here

+0

Merci pour la réponse après le changement de la variable à UART0 Je reçois cette erreur: Impossible d'accéder à l'appareil UART com.google.android.things.pio.PioException: android.os.ServiceSpecificException: BCM14 n'a pas réussi à appliquer le pin mux requis: Argument invalide (code 22) –

+0

Aussi, je vois que vous utilisez UART0, avez-vous dû modifier /boot/config.txt ou /boot/cmdline.txt de quelque façon que ce soit pour que cela fonctionne? –

+0

oui j'ai fait, édité comme expliqué dans les documents officiels. Mais maintenant, si vous utilisez le nouveau AndroidThings '0.5.0' vous n'avez pas besoin de Pin Multiplexing: https://developer.android.com/things/hardware/raspberrypi-mode-matrix.html – Blundell