Android + Arduino Bluetooth Datenübertragung

Ich kann meine Android-app zum herstellen einer Verbindung über Bluetooth zu meinem Arduino. Jedoch kann keine übertragung von Daten zwischen Ihnen. Unten ist mein setup und code:

HTC Android v2.2, Bluetooth mate gold-modem, Arduino Mega (ATmega1280)

Android-Java-code:

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-Code:

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

Ich habe versucht, mit 115200 und 9600 der Baudraten, und ich habe versucht, die Einstellung der bluetooth-rx und tx-pins als input/output und output/input. Der Arduino empfängt serielle Daten vom PC, kann aber nicht senden Sie es an die Android - (ich kann das sehen, weil der flashLED () - Methode).

Android können nicht senden Sie alle Daten an allen (an den Arduino. Allerdings sind Sie beide verbunden, weil die grüne Leuchte am modem leuchtet auf und erlischt und die rote led blinkt, wenn ich die Verbindung schließen. Die sendData () - Methode nicht eine exception zu werfen, weil sonst showMessage("SENDEN FEHLGESCHLAGEN"); erscheinen würde.

Außerdem habe ich in meiner manifest .xml -

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8" />

Jede Hilfe wäre sehr geschätzt werden!

Code entnommen aus:

http://bellcode.wordpress.com/2012/01/02/android-and-arduino-bluetooth-communication/

Kommentar zu dem Problem - Öffnen
Dein code ist in Ordnung, die haben einen Blick von den Schritten: zuerst senden einer Verbindungsanforderung an externes Gerät einmal signal akzeptiert, wird es zurück zu senden akzeptieren das signal und die Verbindung erfolgreich, aber wir sind nicht in der Lage, die eingehenden Daten in regelmäßigen Abständen.Bedeutet, dass nach einiger Zeit die Verbindung erfolgreich hergestellt. So könnten Sie mir sagen, wie man regelmäßige eingehende Daten von einem anderen externen Gerät. Vielen Dank im Voraus... Kommentarautor: Ricky Khatri
hey Hallo.Ich habe Arduino-Gerät und sendet es mir, Modbus-RTU-Daten.Wie kann ich Lesen, dass die Daten über bluetooth? Ich bin fertig mit der Bluetooth-Kopplung. Aber wenn ich Schreibe "mmInputStream.verfügbar()" return me '0' Wert. Bitte helfen Sie mir als sooon wie möglich. Vielen Dank im Voraus. Kommentarautor: Lawrance

InformationsquelleAutor der Frage Backwards_Dave | 2012-04-26

Schreibe einen Kommentar