मैं अपने एंड्रूनो में ब्लूटूथ के माध्यम से कनेक्ट करने के लिए अपना एंड्रॉइड ऐप प्राप्त कर सकता हूं। हालांकि उनके बीच कोई डेटा प्रसारित नहीं किया जा सकता है।एंड्रॉइड + आर्डिनो ब्लूटूथ डेटा ट्रांसफर
एचटीसी एंड्रॉयड v2.2, ब्लूटूथ दोस्त सोने मॉडम, Arduino मेगा (ATmega1280)
एंड्रॉयड जावा कोड:
package com.example.BluetoothExample;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.TextView;
import android.widget.EditText;
import android.widget.Button;
import android.widget.Toast;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Set;
import java.util.UUID;
public class BluetoothExampleActivity extends Activity {
TextView myLabel;
EditText myTextbox;
BluetoothAdapter mBluetoothAdapter;
BluetoothSocket mmSocket;
BluetoothDevice mmDevice;
OutputStream mmOutputStream;
InputStream mmInputStream;
Thread workerThread;
byte[] readBuffer;
int readBufferPosition;
int counter;
volatile boolean stopWorker;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button openButton = (Button)findViewById(R.id.open);
Button sendButton = (Button)findViewById(R.id.send);
Button closeButton = (Button)findViewById(R.id.close);
myLabel = (TextView)findViewById(R.id.label);
myTextbox = (EditText)findViewById(R.id.entry);
//Open Button
openButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try {
findBT();
openBT();
}
catch (IOException ex) { }
}
});
//Send Button
sendButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try {
sendData();
}
catch (IOException ex) {
showMessage("SEND FAILED");
}
}
});
//Close button
closeButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try {
closeBT();
}
catch (IOException ex) { }
}
});
}
void findBT() {
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if(mBluetoothAdapter == null) {
myLabel.setText("No bluetooth adapter available");
}
if(!mBluetoothAdapter.isEnabled()) {
Intent enableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBluetooth, 0);
}
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
if(pairedDevices.size() > 0) {
for(BluetoothDevice device : pairedDevices) {
if(device.getName().equals("FireFly-108B")) {
mmDevice = device;
break;
}
}
}
myLabel.setText("Bluetooth Device Found");
}
void openBT() throws IOException {
UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb"); //Standard //SerialPortService ID
mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
mmSocket.connect();
mmOutputStream = mmSocket.getOutputStream();
mmInputStream = mmSocket.getInputStream();
beginListenForData();
myLabel.setText("Bluetooth Opened");
}
void beginListenForData() {
final Handler handler = new Handler();
final byte delimiter = 10; //This is the ASCII code for a newline character
stopWorker = false;
readBufferPosition = 0;
readBuffer = new byte[1024];
workerThread = new Thread(new Runnable() {
public void run() {
while(!Thread.currentThread().isInterrupted() && !stopWorker) {
try {
int bytesAvailable = mmInputStream.available();
if(bytesAvailable > 0) {
byte[] packetBytes = new byte[bytesAvailable];
mmInputStream.read(packetBytes);
for(int i=0;i<bytesAvailable;i++) {
byte b = packetBytes[i];
if(b == delimiter) {
byte[] encodedBytes = new byte[readBufferPosition];
System.arraycopy(readBuffer, 0, encodedBytes, 0, encodedBytes.length);
final String data = new String(encodedBytes, "US-ASCII");
readBufferPosition = 0;
handler.post(new Runnable() {
public void run() {
myLabel.setText(data);
}
});
}
else {
readBuffer[readBufferPosition++] = b;
}
}
}
}
catch (IOException ex) {
stopWorker = true;
}
}
}
});
workerThread.start();
}
void sendData() throws IOException {
String msg = myTextbox.getText().toString();
msg += "\n";
//mmOutputStream.write(msg.getBytes());
mmOutputStream.write('A');
myLabel.setText("Data Sent");
}
void closeBT() throws IOException {
stopWorker = true;
mmOutputStream.close();
mmInputStream.close();
mmSocket.close();
myLabel.setText("Bluetooth Closed");
}
private void showMessage(String theMsg) {
Toast msg = Toast.makeText(getBaseContext(),
theMsg, (Toast.LENGTH_LONG)/160);
msg.show();
}
}
Arduino कोड: नीचे मेरी सेटअप और कोड है
#include <SoftwareSerial.h>
int bluetoothTx = 45;
int bluetoothRx = 47;
SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);
void setup() {
//pinMode(45, OUTPUT);
//pinMode(47, INPUT);
pinMode(53, OUTPUT);
//Setup usb serial connection to computer
Serial.begin(9600);
//Setup Bluetooth serial connection to android
bluetooth.begin(115200);
bluetooth.print("$$$");
delay(100);
bluetooth.println("U,9600,N");
bluetooth.begin(9600);
}
void loop() {
//Read from bluetooth and write to usb serial
if(bluetooth.available()) {
char toSend = (char)bluetooth.read();
Serial.print(toSend);
flashLED();
}
//Read from usb serial to bluetooth
if(Serial.available()) {
char toSend = (char)Serial.read();
bluetooth.print(toSend);
flashLED();
}
}
void flashLED() {
digitalWrite(53, HIGH);
delay(500);
digitalWrite(53, LOW);
}
मैंने बॉड दरों के लिए 115200 और 9600 का उपयोग करने का प्रयास किया है, और मैंने ब्लूटूथ आरएक्स और टीएक्स पिन को सेट करने का प्रयास किया है इनपुट/आउटपुट और आउटपुट/इनपुट। Arduino पीसी से सीरियल डेटा प्राप्त कर रहा है लेकिन इसे एंड्रॉइड को नहीं भेज सकता (मैं इसे FlashLED() विधि के कारण देख सकता हूं)।
एंड्रॉइड Arduino के लिए कोई भी डेटा नहीं भेज सकता है। हालांकि वे दोनों जुड़े हुए हैं क्योंकि मॉडेम पर हरी रोशनी चालू हो जाती है और बंद हो जाती है और जब मैं कनेक्शन बंद करता हूं तो लाल एलईडी चमकती है। SendData() विधि अपवाद नहीं फेंकती है क्योंकि अन्यथा दिखाएं मैसेज ("विफल भेजें"); प्रदर्शित होगी।
मैं अपने प्रकट .xml में इस राशि
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8" />
किसी भी मदद की बहुत सराहना की जाएगी!
कोड से लिया:
http://bellcode.wordpress.com/2012/01/02/android-and-arduino-bluetooth-communication/
आपका कोड ठीक काम कर रहा है चरणों का एक नज़र डालें: पहले जब आप सिग्नल स्वीकार कर लेते हैं तो बाहरी डिवाइस पर कनेक्शन अनुरोध भेजते हैं, यह वापस स्वीकार सिग्नल और कनेक्शन सफल भेज देगा लेकिन हम समय-समय पर आने वाले डेटा को प्राप्त करने में सक्षम नहीं हैं। बाद में सफल कनेक्शन के कुछ समय। तो क्या आप मुझे बता सकते हैं कि आवधिक आने वाले डेटा को किसी अन्य बाहरी डिवाइस से कैसे प्राप्त किया जाए। अग्रिम धन्यवाद ... –
हे हाय। मेरे पास Arduino डिवाइस है और यह मुझे मॉडबस आरटीयू डेटा भेजता है। मैं ब्लूटूथ पर उस डेटा को कैसे पढ़ सकता हूं? मैं ब्लूटूथ जोड़ी के साथ किया गया है। लेकिन जब मैं "mmInputStream.available()" लिखता हूं तो यह मुझे '0' मान देता है। कृपया जितनी जल्दी हो सके मेरी मदद करें। अग्रिम में धन्यवाद। – Lawrance