Bluetooth-Verbindung zwischen Android und Lego Mindstorm NXT

Weiß jemand, wie man eine Bluetooth-Verbindung zwischen Android und LEGO-Mindstorm-NXT baut? Die Verbindung zwischen zwei NXTs funktioniert gut. Aber der andere Verbindungstyp mag nicht so einfach. Ich arbeite mit der LeJOS Firmware 0.85 und den Android SDK Tools (2.2 Froyo).

  • Externer SQLite Dateieinhalt Zugriff auf Fehler
  • Vor Zeit für Android / Java
  • Wie kann ich die Größe einer Datei während des Downloads von einer URL (mit einer http-Verbindung) abrufen?
  • So teilen Sie eine einzelne Bibliotheksquelle über mehrere Projekte hinweg
  • Unterschied zwischen Button mit Bild, ImageButton und klickbare ImageView?
  • Android AppCompat-v21 Toolbar Animation
  • Android Studio sagt, um Gradle 1.10 zu verwenden - aber neue Version ist 1.12?
  • Mein Service immer gewartet lange genug für: ServiceRecord Fehler in Kitkat
  • Kann ich meine vorhandenen python apps auf ASE portieren?
  • Cordova: Wie kann man die plattenspezifische config.xml-Datei festlegen, die nach dem Cordova-Build nicht überschrieben wird?
  • Android erstellen Sie eine "flache Schaltfläche"
  • Android wie manOnUiThread in anderen Klasse laufen?
  • 2 Solutions collect form web for “Bluetooth-Verbindung zwischen Android und Lego Mindstorm NXT”

    Also habe ich es gelöst und werde alles zeigen, wie es funktioniert, denn ich habe gesehen, dass viele Leute Probleme damit haben.

    Die Klasse umfasst 4 Funktionen:

    • Bluetooth aktivieren, wenn nicht aktiviert -> enableBT ()
    • Verbinden mit 2 NXTs -> connectToNXTs ()
    • Schreibe Nachricht an einen der NXTs -> writeMessage (byte msg, String nxt)
    • Lesen Sie Nachricht von einem der NXTs -> readMessage (String nxt)

    Hier ist der Code für das Android-Gerät (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; } } } 

    Um Nachrichten vom Android Smartphone zu erhalten, musst du einen Anruf auf der NXT-Seite haben. Hier ist der Code von der NXT-Seite, die die Verbindung vom Smartphone akzeptieren und Nachrichten von ihm lesen wird:

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

    Hoffe, das hilft anderen …

    Es gibt ein Dokument, das ich sehr nützlich fand http://wiki.tinyclr.com/images/d/df/LEGO_MINDSTORMS_NXT_Direct_commands.pdf

    Das MINDdroid Paket auf Github ist ein schöner Ort zu starten.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.