Send Data From Arduino to Android App via Bluetooth

40,466

you forgot to declare the mode (int ) in data on line 14

    SoftwareSerial blueToothSerial(RxD, TxD);  
int led = 9 ;
int in1Pin = 10;
int in2Pin = 12;
int in3Pin = 11;
int in4Pin = 13;
int data = 100;
Share:
40,466
Burak
Author by

Burak

Updated on November 18, 2020

Comments

  • Burak
    Burak over 3 years

    Hello i can send data from android to arduino but i cant send data from arduino to android via Bluetooth on procesing i dont get any Error but I cant see anything on display of android app.. i used for blueToothSerial.print(XXX); for arduino side .. and used text(readMessage , width,heigth); for processing side. Please check it out . Where is my fault ? . What am I missing ? Thanks in Advance

    ** on arduino side**

    #include <SoftwareSerial.h>
    #include <Stepper.h>
    #define RxD 6 // This is the pin that the Bluetooth (BT_TX) will transmit to the Arduino (RxD)
    #define TxD 7 // This is the pin that the Bluetooth (BT_RX) will receive from the Arduino (TxD)
    #define DEBUG_ENABLED 1
    #define RELAY 4
    
    SoftwareSerial blueToothSerial(RxD, TxD);  
    int led = 9 ;
    int in1Pin = 10;
    int in2Pin = 12;
    int in3Pin = 11;
    int in4Pin = 13;
    data = 100;
    Stepper motor(512, in1Pin, in2Pin, in3Pin, in4Pin);  
    /*----------------------SETUP----------------------------*/
    void setup() { 
    
    
    
    Serial.begin(9600);//low Serial communication via USB cable to computer (if required)
    pinMode(RxD, INPUT); // Setup the Arduino to receive INPUT from the bluetooth shield on Digital Pin 6
    pinMode(TxD, OUTPUT); // Setup the Arduino to send data (OUTPUT) to the bluetooth shield on Digital Pin 7
    pinMode(13, OUTPUT); // Use onboard LED if required.
    pinMode(9,OUTPUT);
     motor.setSpeed(30);
     pinMode(RELAY,OUTPUT);
    setupBlueToothConnection(); //Used to initialise the Bluetooth shield
    
    
    } 
    
    
    /*----------------------LOOP----------------------------*/
    void loop() { 
    digitalWrite(13, LOW); //Turn off the onboard Arduino LED
    char recvChar;
    while (1) {
    if (blueToothSerial.available()) {//check if there's any data sent from the remote bluetooth shield
    recvChar = blueToothSerial.read();
    Serial.print(recvChar); // Print the character received to the Serial Monitor (if required)
    
    //If the character received = 'r' , then change the RGB led to display a RED colour
    if (recvChar=='r') {
        motor.step(300);
        digitalWrite(led,HIGH);23
    
    
    delay(500);
    
    }
    
    //If the character received = 'g' , then change the RGB led to display a GREEN colour
    if (recvChar=='g') {
      digitalWrite(led,LOW);
      motor.step(-300);
    
    
    }
    
    //If the character received = 'b' , then change the RGB led to display a BLUE colour
    if (recvChar=='b') {
    
    digitalWrite(led,HIGH);
     digitalWrite(RELAY,HIGH);
    }
    
    //If the character received = 'x' , then turn RGB led OFF
    if (recvChar=='x') {
    digitalWrite(led,LOW);
     digitalWrite(RELAY,LOW);
    }
    }
    
    //You can use the following code to deal with any information coming from the Computer (serial monitor)
    if (Serial.available()) {
    recvChar = Serial.read();
    
    //This will send value obtained (recvChar) to the phone. The value will be displayed on the phone.
    blueToothSerial.print(recvChar);
    blueToothSerial.print("burak:");
    blueToothSerial.print(data); // data which is defined begin of sketch
    
    }
    }
    } 
    
    
    
    //The following code is necessary to setup the bluetooth shield ------copy and paste----------------
    void setupBlueToothConnection()
    {
    blueToothSerial.begin(9600);// BluetoothBee BaudRate to default baud rate 38400
    blueToothSerial.print("\r\n+STWMOD=0\r\n"); //set the bluetooth work in slave mode
    blueToothSerial.print("\r\n+STNA=HC-05\r\n"); //set the bluetooth name as "SeeedBTSlave"
    blueToothSerial.print("\r\n+STOAUT=1\r\n"); // Permit Paired device to connect me
    blueToothSerial.print("\r\n+STAUTO=0\r\n"); // Auto-connection should be forbidden here
    delay(2000); // This delay is required.
    blueToothSerial.print("\r\n+INQ=1\r\n"); //make the slave bluetooth inquirable 
    Serial.println("The slave bluetooth is inquirable!");
    delay(2000); // This delay is required.
    blueToothSerial.flush();
    }
    

    And i have processing sketch .

    *on processing side *

    /* BluetoothApp1: Written by ScottC on 25 March 2013 using 
     Processing version 2.0b8
     Tested on a Samsung Galaxy SII, with Android version 2.3.4
     Android ADK - API 10 SDK platform
     Apwidgets version: r44 */
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.widget.Toast;
    import android.view.Gravity;
    import android.bluetooth.BluetoothAdapter;
    import android.bluetooth.BluetoothDevice;
    
    import java.util.UUID;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import android.os.Handler;
    import android.os.Message;
    import android.util.Log;
    
    import android.bluetooth.BluetoothServerSocket;
    import android.bluetooth.BluetoothSocket;
    import apwidgets.*;
    public BluetoothSocket scSocket;
    
    
    //Used for the GUI**************************************
    APWidgetContainer widgetContainer; 
    APButton redButton, greenButton, blueButton, offButton,yeniButton;
    String buttonText="";
    int buttonWidth=0;
    int buttonHeight=0;
    int n=4; //number of buttons
    int gap=10; //gap between buttons
    
    boolean foundDevice=false; //When true, the screen turns green.
    boolean BTisConnected=false; //When true, the screen turns purple.
    String serverName = "ArduinoBasicsServer";
    
    // Message types used by the Handler
    public static final int MESSAGE_WRITE = 1;
    public static final int MESSAGE_READ = 2;
    String readMessage="";
    
    //Used to send bytes to the Arduino
    SendReceiveBytes sendReceiveBT=null;
    
    //Get the default Bluetooth adapter
    BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
    
    /*The startActivityForResult() within setup() launches an 
     Activity which is used to request the user to turn Bluetooth on. 
     The following onActivityResult() method is called when this 
     Activity exits. */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     if (requestCode==0) {
     if (resultCode == RESULT_OK) {
     ToastMaster("Bluetooth simdi acildi");
     } 
     else {
     ToastMaster("Programi kullanabilmek icin Bluetoot acmalisiniz!!!");
     }
     }
    }
    
    
    /* Create a BroadcastReceiver that will later be used to 
     receive the names of Bluetooth devices in range. */
    BroadcastReceiver myDiscoverer = new myOwnBroadcastReceiver();
    
    
    /* Create a BroadcastReceiver that will later be used to
     identify if the Bluetooth device is connected */
    BroadcastReceiver checkIsConnected = new myOwnBroadcastReceiver();
    
    
    
    // The Handler that gets information back from the Socket
    private final Handler mHandler = new Handler() {
     @Override
     public void handleMessage(Message msg) {
     switch (msg.what) {
     case MESSAGE_WRITE:
     //Do something when writing
     break;
     case MESSAGE_READ:
     //Get the bytes from the msg.obj
     byte[] readBuf = (byte[]) msg.obj;
     // construct a string from the valid bytes in the buffer
     readMessage = new String(readBuf, 0, msg.arg1);
     break;
     }
     }
    };
    
    
    
    void setup() {
     orientation(LANDSCAPE);
    
     //Setup GUI********************************
     buttonWidth=((width/n)-(n*gap));
     buttonHeight=(height/2);
     widgetContainer = new APWidgetContainer(this); //create new container for widgets
     yeniButton = new APButton(700,600,(buttonWidth/2),(buttonHeight/2),"Yeni buton");
      redButton =new APButton(0,0 ,400,400, "PERDE YUKARI"); //Create a RED button
    // redButton =new APButton((buttonWidth*(n-4)+(gap*1)), gap, buttonWidth, buttonHeight, "RED"); //Create a RED button
     greenButton = new APButton((buttonWidth*(n-3)+(gap*2)), gap, buttonWidth, buttonHeight, "GREEN"); //Create a GREEN button
     blueButton = new APButton((buttonWidth*(n-2)+(gap*3)), gap, buttonWidth, buttonHeight, "BLUE"); //Create a BLUE button
     offButton = new APButton((buttonWidth*(n-1)+(gap*4)), gap, buttonWidth, buttonHeight, "OFF"); //Create a OFF button
     widgetContainer.addWidget(redButton); //place red button in container
     widgetContainer.addWidget(greenButton); //place green button in container
     widgetContainer.addWidget(blueButton);//place blue button in container
     widgetContainer.addWidget(offButton);//place off button in container
     widgetContainer.addWidget(yeniButton);
     background(0); //Start with a black background
    
    
     /*IF Bluetooth is NOT enabled, then ask user permission to enable it */
     if (!bluetooth.isEnabled()) {
     Intent requestBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
     startActivityForResult(requestBluetooth, 0);
     }
    
     /*If Bluetooth is now enabled, then register a broadcastReceiver to report any
     discovered Bluetooth devices, and then start discovering */
     if (bluetooth.isEnabled()) {
     registerReceiver(myDiscoverer, new IntentFilter(BluetoothDevice.ACTION_FOUND));
     registerReceiver(checkIsConnected, new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED));
    
     //Start bluetooth discovery if it is not doing so already
     if (!bluetooth.isDiscovering()) {
     bluetooth.startDiscovery();
     }
     }
    }
    
    
    void draw() {
     //Display a green screen if a device has been found,
     //Display a purple screen when a connection is made to the device
     if (foundDevice) {
     if (BTisConnected) {
     background(170, 50, 255); // purple screen
     }
     else {
     background(10, 255, 10); // green screen
     }
     }
    
    
     //Change the text based on the button being pressed.
     text(buttonText, 10, buttonHeight+(buttonHeight/2));
    
     //Display anything received from Arduino
     text(readMessage, 10, buttonHeight+(buttonHeight/2)+30);
    }
    
    
    
    /* This BroadcastReceiver will display discovered Bluetooth devices */
    public class myOwnBroadcastReceiver extends BroadcastReceiver {
     ConnectToBluetooth connectBT;
    
     @Override
     public void onReceive(Context context, Intent intent) {
     String action=intent.getAction();
     ToastMaster("Eylem:" + action);
    
     //Notification that BluetoothDevice is FOUND
     if (BluetoothDevice.ACTION_FOUND.equals(action)) {
     //Display the name of the discovered device
     String discoveredDeviceName = intent.getStringExtra(BluetoothDevice.EXTRA_NAME);
     ToastMaster("Bulunan Cihaz: " + discoveredDeviceName);
    
     //Display more information about the discovered device
     BluetoothDevice discoveredDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
     ToastMaster("getAddress() = " + discoveredDevice.getAddress());
     ToastMaster("getName() = " + discoveredDevice.getName());
    
     int bondyState=discoveredDevice.getBondState();
     ToastMaster("getBondState() = " + bondyState);
    
     String mybondState;
     switch(bondyState) {
     case 10: 
     mybondState="BOND_NONE";
     break;
     case 11: 
     mybondState="BOND_BONDING";
     break;
     case 12: 
     mybondState="BOND_BONDED";
     break;
     default: 
     mybondState="INVALID BOND STATE";
     break;
     }
     ToastMaster("getBondState() = " + mybondState);
    
     //Change foundDevice to true which will make the screen turn green
     foundDevice=true;
    
     //Connect to the discovered bluetooth device (SeeedBTSlave)
     if (discoveredDeviceName.equals("HC-05")) {
     ToastMaster("BAGLANIYOR!!");
     unregisterReceiver(myDiscoverer);
     connectBT = new ConnectToBluetooth(discoveredDevice);
     //Connect to the the device in a new thread
     new Thread(connectBT).start();
     }
     }
    
     //Notification if bluetooth device is connected
     if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) {
     ToastMaster("CIHAZINIZ BAGLANDI");
     int counter=0;
     while (scSocket==null) {
     //do nothing
     }
     ToastMaster("scSocket" + scSocket);
     BTisConnected=true; //turn screen purple 
     if (scSocket!=null) {
     sendReceiveBT = new SendReceiveBytes(scSocket);
     new Thread(sendReceiveBT).start();
     String red = "r";
     byte[] myByte = stringToBytesUTFCustom(red);
     sendReceiveBT.write(myByte);
     }
     }
     }
    }
    
    public static byte[] stringToBytesUTFCustom(String str) {
     char[] buffer = str.toCharArray();
     byte[] b = new byte[buffer.length << 1];
     for (int i = 0; i < buffer.length; i++) {
     int bpos = i << 1;
     b[bpos] = (byte) ((buffer[i]&0xFF00)>>8);
     b[bpos + 1] = (byte) (buffer[i]&0x00FF);
     }
     return b;
    }
    
    public class ConnectToBluetooth implements Runnable {
     private BluetoothDevice btShield;
     private BluetoothSocket mySocket = null;
     private UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
    
     public ConnectToBluetooth(BluetoothDevice bluetoothShield) {
     btShield = bluetoothShield;
     try {
     mySocket = btShield.createRfcommSocketToServiceRecord(uuid);
     }
     catch(IOException createSocketException) {
     //Problem with creating a socket
     Log.e("ConnectToBluetooth", "Error with Socket");
     }
     }
    
     @Override
     public void run() {
     /* Cancel discovery on Bluetooth Adapter to prevent slow connection */
     bluetooth.cancelDiscovery();
    
     try {
     /*Connect to the bluetoothShield through the Socket. This will block
     until it succeeds or throws an IOException */
     mySocket.connect();
     scSocket=mySocket;
     } 
     catch (IOException connectException) {
     Log.e("ConnectToBluetooth", "Error with Socket Connection");
     try {
     mySocket.close(); //try to close the socket
     }
     catch(IOException closeException) {
     }
     return;
     }
     }
    
     // Will allow you to get the socket from this class
     public BluetoothSocket getSocket() {
     return mySocket;
     }
    
     /* Will cancel an in-progress connection, and close the socket */
     public void cancel() {
     try {
     mySocket.close();
     } 
     catch (IOException e) {
     }
     }
    }
    
    
    
    private class SendReceiveBytes implements Runnable {
     private BluetoothSocket btSocket;
     private InputStream btInputStream = null;
     ;
     private OutputStream btOutputStream = null;
     String TAG = "SendReceiveBytes";
    
     public SendReceiveBytes(BluetoothSocket socket) {
     btSocket = socket;
     try {
     btInputStream = btSocket.getInputStream();
     btOutputStream = btSocket.getOutputStream();
     } 
     catch (IOException streamError) { 
     Log.e(TAG, "Error when getting input or output Stream");
     }
     }
    
     public void run() {
     byte[] buffer = new byte[1024]; // buffer store for the stream
     int bytes; // bytes returned from read()
    
     // Keep listening to the InputStream until an exception occurs
     while (true) {
     try {
     // Read from the InputStream
     bytes = btInputStream.read(buffer);
     // Send the obtained bytes to the UI activity
     mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer)
     .sendToTarget();
     } 
     catch (IOException e) {
     Log.e(TAG, "Error reading from btInputStream");
     break;
     }
     }
     }
    
     /* Call this from the main activity to send data to the remote device */
     public void write(byte[] bytes) {
     try {
     btOutputStream.write(bytes);
     } 
     catch (IOException e) { 
     Log.e(TAG, "Error when writing to btOutputStream");
     }
     }
    
     /* Call this from the main activity to shutdown the connection */
     public void cancel() {
     try {
     btSocket.close();
     } 
     catch (IOException e) { 
     Log.e(TAG, "Error when closing the btSocket");
     }
     }
    }
    
    
    
    /* My ToastMaster function to display a messageBox on the screen */
    void ToastMaster(String textToDisplay) {
     Toast myMessage = Toast.makeText(getApplicationContext(), 
     textToDisplay, 
     Toast.LENGTH_SHORT);
     myMessage.setGravity(Gravity.CENTER, 0, 0);
     myMessage.show();
    }
    
    
    
    
    //onClickWidget is called when a widget is clicked/touched
    void onClickWidget(APWidget widget) {
     String sendLetter = "";
    
     //Disable the previous Background colour changers
     foundDevice=false;
     BTisConnected=false;
    
     if (widget == redButton) { //if the red button was clicked
     buttonText="RED";
     background(255, 0, 0);
     sendLetter = "r";
     }
     else if (widget == greenButton) { //if the green button was clicked
     buttonText="GREEN";
     background(0, 255, 0);
     sendLetter = "g";
     }
     else if (widget == blueButton) { //if the blue button was clicked
     buttonText="BLUE";
     background(0, 0, 255);
     sendLetter = "b";
     }
     else if (widget == offButton) { //if the off button was clicked
     buttonText="OFF";
     background(0);
     sendLetter = "x";
     }
      else if (widget == yeniButton) { //if the off button was clicked
     buttonText="yeni buton";
     background(100,100,100);
     sendLetter = "y";
     }
    
     byte[] myByte = stringToBytesUTFCustom(sendLetter);
     sendReceiveBT.write(myByte);
    }
    
  • Burak
    Burak almost 10 years
    yes thanks but the data is just for example . i cant see also 'burak' . i tried a lot also with int . still have problem