Android和Lego Mindstorm NXT之间的蓝牙连接
-
12-11-2019 - |
题
有人知道,如何在Android和Lego-minnstorm-nxt之间建立蓝牙连接? 两个NXT之间的连接工作正常。但另一个连接类型喜欢不那么容易。 我正在使用Lejos固件0.85和Android SDK工具(2.2 Froyo)。
解决方案
所以我已经解决了它,并将展示它是如何工作的,因为我已经看到很多人都有问题。
该类包括4个功能:
- 蓝牙启用如果之前未启用 - > EnableBT()
- 连接到2 nxts - > connecttonxts()
- 将消息写入NXTS - > Writemessage之一(字节Msg,String NXT)
- 从一个nxts - > readmessage(String nxt)中的读取消息
以下是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; } } }
从Android智能手机获取消息,您必须在NXT端上读取呼叫。 这是nxt-side wich的代码将接受从智能手机和读取消息的连接:
.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(); }
希望这将有助于他人...
其他提示
有一个我发现非常有用的文件 http://wiki.tinyclr.com/images/d/df/lego_mindstorms_nxt_direct_commands.pdf
github上的Minddroid包是一个很好的开始。
不隶属于 StackOverflow