Connexion Bluetooth entre Android et Lego Mindstorm NXT

Est-ce que quelqu'un sait, comment créer une connexion bluetooth entre Android et LEGO-Mindstorm-NXT? La connexion entre deux NXT fonctionne bien. Mais l'autre type de connexion n'est pas si simple. Je travaille avec LeJOS Firmware 0.85 et les outils SDK Android (2.2 Froyo).

  • Android Background Service redémarre lorsque l'application est tuée
  • SlidingTabLayout pour s'adapter à l'écran
  • Test d'Android, comment simuler un multitouch (zoom in / out) à l'aide d'instruments?
  • Comment récupérer des données de la classe de curseur
  • DataBindingUtil.setContentView - Le paramètre de type T a des limites supérieures incompatibles
  • Gradle exclut le fichier de sourceSet ne fonctionne pas
  • ListView avec le premier élément visible ayant une disposition différente
  • GetString en dehors d'un contexte ou d'une activité
  • Kotlin.TypeCastException: null ne peut pas être transmis au type non nul com.midsizemango.databasekotlin.Note
  • Problèmes lors de la publication du fichier .apk non signé?
  • Comment changer la couleur d'une zone particulière sur Google map api v2 dans Android
  • Téléchargement d'images avec FTP sur Android
  • 2 Solutions collect form web for “Connexion Bluetooth entre Android et Lego Mindstorm NXT”

    Je l'ai résolu et je montrerai tout ce qui se passe, car j'ai vu que beaucoup de gens ont des problèmes avec cela.

    La classe comprend 4 fonctions:

    • Bluetooth activé s'il n'est pas activé avant -> enableBT ()
    • Connectez-vous à 2 NXTs -> connectToNXTs ()
    • Ecrire un message à l'un des NXTs -> writeMessage (msgsterth, String nxt)
    • Lire le message de l'un des NXTs -> readMessage (String nxt)

    Voici le code pour le périphérique Android (BT_comm.java):

    package de.joen.android.CubeScan; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.UUID; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.util.Log; public class BT_Comm { //Target NXTs for communication final String nxt2 = "00:16:53:04:52:3A"; final String nxt1 = "00:16:53:07:AA:F6"; BluetoothAdapter localAdapter; BluetoothSocket socket_nxt1, socket_nxt2; boolean success = false; // Enables Bluetooth if not enabled public void enableBT(){ localAdapter = BluetoothAdapter.getDefaultAdapter(); // If Bluetooth not enable then do it if (!localAdapter.isEnabled()) { localAdapter.enable(); while(!(localAdapter.isEnabled())); } } // Connect to both NXTs public boolean connectToNXTs() { // Get the BluetoothDevice of the NXT BluetoothDevice nxt_2 = localAdapter.getRemoteDevice(nxt2); BluetoothDevice nxt_1 = localAdapter.getRemoteDevice(nxt1); // Try to connect to the nxt try { socket_nxt2 = nxt_2.createRfcommSocketToServiceRecord(UUID .fromString("00001101-0000-1000-8000-00805F9B34FB")); socket_nxt1 = nxt_1.createRfcommSocketToServiceRecord(UUID .fromString("00001101-0000-1000-8000-00805F9B34FB")); socket_nxt2.connect(); socket_nxt1.connect(); success = true; } catch (IOException e) { Log.d("Bluetooth","Err: Device not found or cannot connect"); success=false; } return success; } public void writeMessage(byte msg, String nxt) throws InterruptedException { BluetoothSocket connSock; // Swith nxt socket if (nxt.equals("nxt2")) { connSock=socket_nxt2; } else if(nxt.equals("nxt1")) { connSock = socket_nxt1; } else { connSock=null; } if (connSock!=null) { try { OutputStreamWriter out = new OutputStreamWriter(connSock.getOutputStream()); out.write(msg); out.flush(); Thread.sleep(1000); } catch (IOException e) { // TODO: Auto-generated catch block e.printStackTrace(); } } else { // Error } } public int readMessage(String nxt) { BluetoothSocket connSock; int n; // Swith nxt socket if (nxt.equals("nxt2")) { connSock=socket_nxt2; } else if (nxt.equals("nxt1")) { connSock=socket_nxt1; } else { connSock=null; } if (connSock!=null) { try { InputStreamReader in = new InputStreamReader(connSock.getInputStream()); n = in.read(); return n; } catch (IOException e) { // TODO: Auto-generated catch block e.printStackTrace(); return -1; } } else { // Error return -1; } } } 

    Pour obtenir des messages du téléphone intelligent Android, vous devez avoir un appel de lecture sur le côté NXT. Voici le code du côté NXT qui acceptera la connexion du Smartphone et en lira les messages:

     Boolean isrunning = true; // Main loop while (true) { LCD.drawString(waiting,0,0); LCD.refresh(); // Listen for incoming connection NXTConnection btc = Bluetooth.waitForConnection(); btc.setIOMode(NXTConnection.RAW); LCD.clear(); LCD.drawString(connected,0,0); LCD.refresh(); // The InputStream for read data DataInputStream dis = btc.openDataInputStream(); // Loop for read data while (isrunning) { Byte n = dis.readByte(); LCD.clear(); LCD.drawInt(n, 4, 4); } dis.close(); // Wait for data to drain Thread.sleep(100); LCD.clear(); LCD.drawString(closing,0,0); LCD.refresh(); btc.close(); LCD.clear(); } 

    J'espère que cela aidera les autres …

    Il y a un document que j'ai trouvé très utile http://wiki.tinyclr.com/images/d/df/LEGO_MINDSTORMS_NXT_Direct_commands.pdf

    Le package MINDdroid sur github est un bon endroit pour commencer.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.