Conexión bluetooth Android con Arduino





Buenas este es el primer tutorial enlazado a mis segundo blog CursoArduinoMega.
Este tutorial consiste conectar a través de una conexión bluetooth tu dispositivo Android con el Arduino.
Vamos a enviar y recibir información.
Desde el celular Android, vamos a tener dos botones. ON OFF que van encender o apagar respectivamente
Desde el Arduino vamos a enviar 1, 2,3, 4. Ahora utilizamos estos numeros pero podría ser cualquier tipo de información como la temperatura y la humedad de un DHT11 
Todos los demás botones es puramente demostrativo que otras funcionalidades se le pueden agregar.

Fuentes: wingoodharry arduino

Configurar HC06

Comencemos con arduino
//#include "DHT.h"
//#define DHTPIN 7
//#define DHTTYPE DHT11
//DHT dht(DHTPIN, DHTTYPE);
 
int led = 13; //led Rojo de prueba de conexión

float voltageValue[4] = {0,0,0,0};
char inbyte = 0; //Char para leer el led
 
void setup() {
  // initialise serial communications at 9600 bps:
  Serial.begin(9600);
  pinMode(led, OUTPUT);
  digitalWrite(led, LOW);
  //dht.begin();
}
 
void loop() {
  getVoltageValue();
  //when serial values have been received this will be true
  
  if (Serial.available() > 0)
  {
    inbyte = Serial.read();
    Serial.println(inbyte);
    if (inbyte == '2')
    {
      digitalWrite(led, LOW); //LED off
      voltageValue[0] = 0;
    }
    if (inbyte == '1')
    {
      digitalWrite(led, HIGH); //LED on
      voltageValue[0] = 1;
    }
  }
  sendAndroidValues();
  delay(2000); 
}
 
void getVoltageValue()
{
  voltageValue[0] = 1; //led
  voltageValue[1] = 2;
  voltageValue[2] = 3;
  voltageValue[3] = 4;
  
}

//enviar los valores por el dipositivo android por el modulo Bluetooth
void sendAndroidValues()
 {
  Serial.print('#'); //hay que poner # para el comienzo de los datos, así Android sabe que empieza el String de datos
  for(int k=0; k<4; k++)
  {
    Serial.print(voltageValue[k]);
    Serial.print('+'); //separamos los datos con el +, así no es más fácil debuggear la información que enviamos
  }
 Serial.print('~'); //con esto damos a conocer la finalización del String de datos
 Serial.println();
 delay(10);        //agregamos este delay para eliminar tramisiones faltantes
}


Ahora la conexión.
Nota: En código anterior no declaramos el TX y RX (recibir e enviar información) porque vamos a usar D0 y D1. En caso contrario deberíamos declararlo como en el siguiente ejemplo (ver)
SoftwareSerial BT(10,11); //10 RX, 11 TX.

  • TXD: Transmisión de datos.
  • RXD: Recepción de datos a un voltaje de 3,3V.

Muestro dos opciones. Ambas funcionan.
Lo más importante, cual es muy fácil de equivocarse si uno trabajo apurado, rápido.
Es que 
  • el RXD hc06 va con el TX0 del arduino
  • el TXD hc06 va con el RX0 del arduino
como muestro en las imágenes



Fotos reales





Y sin mas preámbulos a los que nos interesa el código de Android

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.tatoado.ramabluewingood" >

    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".DeviceListActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".MainActivity"></activity>
    </application>

</manifest>

device_name.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="18sp"
    android:padding="5dp">

</TextView>

activy_main.xml (esto tiene que estar dentro de un linearlayout o relative o como gusten, para no ser muy largo solo puse lo esencial en este layout)
 <Button
    android:id="@+id/buttonOn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="LED ON" />

<Button
    android:id="@+id/buttonOff"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="LED OFF />

<TextView
    android:id="@+id/sensorView0"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
<TextView
    android:id="@+id/sensorView1
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
<TextView
    android:id="@+id/sensorView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
<TextView
    android:id="@+id/sensorView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

device_list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <TextView android:id="@+id/title_paired_devices"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Seleccione un dispositivo btSerial "
        android:visibility="gone"
        android:background="#666"
        android:textColor="#fff"
        android:paddingLeft="5dp"
    />
    <ListView android:id="@+id/paired_devices"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:stackFromBottom="false"
        android:layout_weight="1"
    />

    <TextView
        android:id="@+id/connecting"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/infoText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Si no hay dispositivos en la lista, por favor enlaza tu dispositivo en la configuración de Android"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:layout_margin="5dp"
        android:textSize="18dp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center">

    </LinearLayout>

</LinearLayout>

MainActivity.java
       

            package com.tatoado.ramabluewingood;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;
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.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

    Button btnOn, btnOff;
    TextView txtArduino, txtString, txtStringLength, sensorView0, sensorView1, sensorView2, sensorView3;
    TextView txtSendorLDR;
    Handler bluetoothIn;

    final int handlerState = 0;             //used to identify handler message
    private BluetoothAdapter btAdapter = null;
    private BluetoothSocket btSocket = null;
    private StringBuilder recDataString = new StringBuilder();

    private ConnectedThread mConnectedThread;

    // SPP UUID service - this should work for most devices
    private static final UUID BTMODULEUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

    // String for MAC address
    private static String address = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        //Link the buttons and textViews to respective views
        btnOn = (Button) findViewById(R.id.buttonOn);
        btnOff = (Button) findViewById(R.id.buttonOff);
        txtString = (TextView) findViewById(R.id.txtString);
        txtStringLength = (TextView) findViewById(R.id.testView1);
        sensorView0 = (TextView) findViewById(R.id.sensorView0);
        sensorView1 = (TextView) findViewById(R.id.sensorView1);
        sensorView2 = (TextView) findViewById(R.id.sensorView2);
        sensorView3 = (TextView) findViewById(R.id.sensorView3);

        txtSendorLDR = (TextView) findViewById(R.id.tv_sendorldr);


        bluetoothIn = new Handler() {
            public void handleMessage(android.os.Message msg) {
                if (msg.what == handlerState) {          //if message is what we want
                    String readMessage = (String) msg.obj;                                                                // msg.arg1 = bytes from connect thread
                    recDataString.append(readMessage);              //keep appending to string until ~
                    int endOfLineIndex = recDataString.indexOf("~");                    // determine the end-of-line
                    if (endOfLineIndex > 0) {                                           // make sure there data before ~
                        String dataInPrint = recDataString.substring(0, endOfLineIndex);    // extract string
                        txtString.setText("Datos recibidos = " + dataInPrint);
                        int dataLength = dataInPrint.length();       //get length of data received
                        txtStringLength.setText("Tamaño del String = " + String.valueOf(dataLength));

                        if (recDataString.charAt(0) == '#')        //if it starts with # we know it is what we are looking for
                        {
                            String sensor0 = recDataString.substring(1, 5);             //get sensor value from string between indices 1-5
                            String sensor1 = recDataString.substring(6, 10);            //same again...
                            String sensor2 = recDataString.substring(11, 15);
                            String sensor3 = recDataString.substring(16, 20);

                            if(sensor0.equals("1.00"))
                            sensorView0.setText("Encendido"); //update the textviews with sensor values
                            else
                                sensorView0.setText("Apagado"); //update the textviews with sensor values
                            sensorView1.setText(sensor1);
                            sensorView2.setText(sensor2);
                            sensorView3.setText(sensor3);
                            //sensorView3.setText(" Sensor 3 Voltage = " + sensor3 + "V");
                        }
                        recDataString.delete(0, recDataString.length());      //clear all string data
                        // strIncom =" ";
                        dataInPrint = " ";
                    }
                }
            }
        };

        btAdapter = BluetoothAdapter.getDefaultAdapter();       // get Bluetooth adapter
        checkBTState();


        // Set up onClick listeners for buttons to send 1 or 0 to turn on/off LED
        btnOff.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                mConnectedThread.write("2");    // Send "0" via Bluetooth
                Toast.makeText(getBaseContext(), "Apagar el LED", Toast.LENGTH_SHORT).show();
            }
        });

        btnOn.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                mConnectedThread.write("1");    // Send "1" via Bluetooth
                Toast.makeText(getBaseContext(), "Encender el LED", Toast.LENGTH_SHORT).show();
            }
        });
    }


    private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws IOException {

        return  device.createRfcommSocketToServiceRecord(BTMODULEUUID);
        //creates secure outgoing connecetion with BT device using UUID
    }

    @Override
    public void onResume() {
        super.onResume();

        //Get MAC address from DeviceListActivity via intent
        Intent intent = getIntent();

        //Get the MAC address from the DeviceListActivty via EXTRA
        address = intent.getStringExtra(DeviceListActivity.EXTRA_DEVICE_ADDRESS);

        //create device and set the MAC address
        //Log.i("ramiro", "adress : " + address);
        BluetoothDevice device = btAdapter.getRemoteDevice(address);

        try {
            btSocket = createBluetoothSocket(device);
        } catch (IOException e) {
            Toast.makeText(getBaseContext(), "La creacción del Socket fallo", Toast.LENGTH_LONG).show();
        }
        // Establish the Bluetooth socket connection.
        try
        {
            btSocket.connect();
        } catch (IOException e) {
            try
            {
                btSocket.close();
            } catch (IOException e2)
            {
                //insert code to deal with this
            }
        }
        mConnectedThread = new ConnectedThread(btSocket);
        mConnectedThread.start();

        //I send a character when resuming.beginning transmission to check device is connected
        //If it is not an exception will be thrown in the write method and finish() will be called
        mConnectedThread.write("x");
    }

    @Override
    public void onPause()
    {
        super.onPause();
        try
        {
            //Don't leave Bluetooth sockets open when leaving activity
            btSocket.close();
        } catch (IOException e2) {
            //insert code to deal with this
        }
    }

    //Checks that the Android device Bluetooth is available and prompts to be turned on if off
    private void checkBTState() {

        if(btAdapter==null) {
            Toast.makeText(getBaseContext(), "El dispositivo no soporta bluetooth", Toast.LENGTH_LONG).show();
        } else {
            if (btAdapter.isEnabled()) {
            } else {
                Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                startActivityForResult(enableBtIntent, 1);
            }
        }
    }

    //create new class for connect thread
    private class ConnectedThread extends Thread {
        private final InputStream mmInStream;
        private final OutputStream mmOutStream;

        //creation of the connect thread
        public ConnectedThread(BluetoothSocket socket) {
            InputStream tmpIn = null;
            OutputStream tmpOut = null;

            try {
                //Create I/O streams for connection
                tmpIn = socket.getInputStream();
                tmpOut = socket.getOutputStream();
            } catch (IOException e) { }

            mmInStream = tmpIn;
            mmOutStream = tmpOut;
        }


        public void run() {
            byte[] buffer = new byte[256];
            int bytes;

            // Keep looping to listen for received messages
            while (true) {
                try {
                    bytes = mmInStream.read(buffer);         //read bytes from input buffer
                    String readMessage = new String(buffer, 0, bytes);
                    // Send the obtained bytes to the UI Activity via handler
                    bluetoothIn.obtainMessage(handlerState, bytes, -1, readMessage).sendToTarget();
                } catch (IOException e) {
                    break;
                }
            }
        }
        //write method
        public void write(String input) {
            byte[] msgBuffer = input.getBytes();           //converts entered String into bytes
            try {
                mmOutStream.write(msgBuffer);                //write bytes over BT connection via outstream
            } catch (IOException e) {
                //if you cannot write, close the application
                Toast.makeText(getBaseContext(), "La Conexión fallo", Toast.LENGTH_LONG).show();
                finish();

            }
        }
    }
}

DeviceListActivity.java
       

            package com.tatoado.ramabluewingood;

import java.util.Set;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;


public class DeviceListActivity extends Activity {
    // Debugging for LOGCAT
    private static final String TAG = "DeviceListActivity";
    private static final boolean D = true;
    
  
    // declare button for launching website and textview for connection status
    Button tlbutton;
    TextView textView1;
    
    // EXTRA string to send on to mainactivity
    public static String EXTRA_DEVICE_ADDRESS = "device_address";

    // Member fields
    private BluetoothAdapter mBtAdapter;
    private ArrayAdapter mPairedDevicesArrayAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.device_list);
    }
    
    @Override
    public void onResume() 
    {
     super.onResume();
     //*************** 
     checkBTState();

     textView1 = (TextView) findViewById(R.id.connecting);
     textView1.setTextSize(40);
     textView1.setText(" ");

     // Initialize array adapter for paired devices
     mPairedDevicesArrayAdapter = new ArrayAdapter(this, R.layout.device_name);

     // Find and set up the ListView for paired devices
     ListView pairedListView = (ListView) findViewById(R.id.paired_devices);
     pairedListView.setAdapter(mPairedDevicesArrayAdapter);
     pairedListView.setOnItemClickListener(mDeviceClickListener);

     // Get the local Bluetooth adapter
     mBtAdapter = BluetoothAdapter.getDefaultAdapter();

     // Get a set of currently paired devices and append to 'pairedDevices'
     Set pairedDevices = mBtAdapter.getBondedDevices();

     // Add previosuly paired devices to the array
     if (pairedDevices.size() > 0) {
      findViewById(R.id.title_paired_devices).setVisibility(View.VISIBLE);//make title viewable
      for (BluetoothDevice device : pairedDevices) {
       mPairedDevicesArrayAdapter.add(device.getName() + "\n" + device.getAddress());
      }
     } else {
      String noDevices = "Ningun dispositivo pudo ser emparejado";
      mPairedDevicesArrayAdapter.add(noDevices);
     }
  }

    // Set up on-click listener for the list (nicked this - unsure)
    private OnItemClickListener mDeviceClickListener = new OnItemClickListener() {
        public void onItemClick(AdapterView av, View v, int arg2, long arg3) {

         textView1.setText("Conectando...");
            // Get the device MAC address, which is the last 17 chars in the View
            String info = ((TextView) v).getText().toString();
            String address = info.substring(info.length() - 17);

            // Make an intent to start next activity while taking an extra which is the MAC address.
   Intent i = new Intent(DeviceListActivity.this, MainActivity.class);
            i.putExtra(EXTRA_DEVICE_ADDRESS, address);
   startActivity(i);   
        }
    };

    private void checkBTState() {
        // Check device has Bluetooth and that it is turned on
      mBtAdapter=BluetoothAdapter.getDefaultAdapter(); // CHECK THIS OUT THAT IT WORKS!!!
        if(mBtAdapter==null) { 
         Toast.makeText(getBaseContext(), "El dispositivo no soporta Bluetooth", Toast.LENGTH_SHORT).show();
        } else {
          if (mBtAdapter.isEnabled()) {
            Log.d(TAG, "...Bluetooth Activado...");
          } else {
            //Prompt user to turn on Bluetooth
            Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enableBtIntent, 1);
 
            }
          }
        }
}

76 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. Esta muito bom....
    5 estrelas, parabens ramiro

    ResponderEliminar
  3. la app android lo hiciste en android estudio? podrias subir el proyecto o enviarmelo en mi correo linus.kow.2012@gmail.com, aun soy nuevo en esto de la programacion y necesitava hacer una app parecida a la tuya para la universidad, te lo agradeceria bastante.

    ResponderEliminar
    Respuestas
    1. ahí esta. Arriba donde dice "github" esta todo el código de Android y Arduino.

      Eliminar
  4. muy buena acotacion porque mayor mente hacen app inventor y es limitado los estilo para hacer app, espero que publiques mas

    ResponderEliminar
  5. muy buena acotacion porque mayor mente hacen app inventor y es limitado los estilo para hacer app, espero que publiques mas

    ResponderEliminar
  6. Buenas, muy buen aporte pero me salen algunos errores en el archivo java del DeviceListActivity, me sale tres errores

    mPairedDevicesArrayAdapter = new ArrayAdapter(this, R.layout.device_name);

    En el device name y en

    String noDevices = getResources().getText(R.string.none_paired).toString();

    en el none_paired


    ResponderEliminar
  7. Respuestas
    1. https://github.com/patriotaSJ/Bluetooth.git

      Eliminar
    2. debajo de la imagen dice "download from github" le tenias que hacer click ahí, todo los tutoriales son iguales.
      Una captura
      Descarga del código
      Video explicativo
      Código

      Eliminar
  8. hola ramiro es un buen aporte lo que haces pero oye me podrás explicar un poco a detalle sobre android studio en como utilizar el bluetooth en verdad te agradeceré si me apoyas

    ResponderEliminar
  9. Genial, Me gusta mucho el blog, esto es realmente innovador!!
    Sigue asi Ramiro!!

    ResponderEliminar
  10. Hola, el tutorial esta muy bueno, parabens;;;;;;;


    Com que programa é que gravas tus videosdos tutoriais...

    Agradeco respoesta puede ser por email jose_magalhaes_1997@hotmail.com

    Obrigado...

    ResponderEliminar
  11. Hola es muy buen tutorial, si quiero mandar texto en vez de 0 y 1, quiero mandar on and off. Intente cambiarle directamente al codigo y no pasa nada :(

    ResponderEliminar
  12. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  13. Genial!!! Muy bueno!!! Gracias a tí he podido finalizar mi proyecto de automatización de mi coche ( control de alumbrado automático, control de velocidad, multimedia...) con un Arduino Mega y una tablet de 7" Android. Era mi primer proyecto con Android Studio y casi tiro la toalla. Me ha costado cambiar mi metodología de programación (antes lo hacia todo con Visual Estudio) a Java, pero gracias a este blog, se me han abierto un montón de posibilidades.
    De nuevo muchas gracias y por favor, continúa así. A ver si algún día puedo hacer algún aporte tan bueno.

    ResponderEliminar
    Respuestas
    1. fua, muchas gracias. Es el mejor comentario que me han hecho. Saludos, que bueno haber sido de ayuda.

      Eliminar
  14. Buenas Ramiro, esta super bueno el tutoríal, muchísimas gracias.
    Como podría desarrollar una aplicacion que reciba al mismo tiempo información de dos bluetooth diferentes.
    Saludos

    ResponderEliminar
  15. Buenas Ramiro

    Ante todo felicitarte y darte las gracias porque me esta sirviendo de mucha ayuda tu proyecto porque tengo que hacer una app parecida a la que has hecho.

    Tengo dos dudas que preguntarte:

    1º) El archivo device_main, que esta vacío, ¿para qué sirve?
    2º) El archivo device_name, te crea un texto con el dispositivo que ya tienes vinculado en tu dispositivo, ¿no?

    Gracias

    ResponderEliminar
    Respuestas
    1. Sirve para todo, menos para nada.

      Eliminar
    2. Si claro. La puedes enviar por wasap o por gmail.com

      Eliminar
  16. Hola Ramiro

    Me ha encantado el post y te agradezco el código ya que me sirve de mucho, sigue así.

    Tengo una duda que plantearte, ¿con tu código puedo recibir datos de forma seguida o hay que añadir algun código?

    Gracias

    ResponderEliminar
  17. Me salvaste la vida. Saludos desde Venezuela

    ResponderEliminar
  18. Excelente Muchas gracias, tengo una pregunta como se podria usar el bluetooth en un service para que se pueda recibir informacion de arduino sin necesidad de tener abierta la aplicacion

    ResponderEliminar
  19. Excelente post!! Una pregunta, como hago para implementar la conexión bluetooth en varias activities y no perder la conexion?

    ResponderEliminar
  20. excelente aporte camarada...sigue asi y gracias por compartir toda esta informacion es de gran utilidad....

    ResponderEliminar
  21. Hola Ramiro,

    el código me ha ayudado mucho para finalizar mi proyecto de carrera de control de un exoesqueleto para rehabilitación de los dedos desde un movil o tablet. Eres parte de él, asi que puedes sentirte orgulloso!

    Muchas gracias de nuevo!

    ResponderEliminar
  22. Hola saludos Soy Novato en este tema y la verdad me descargue tu codigo Android pero no logro entender la estructura q le ahs puesto yno se ejecuta Por favor si tal vez podrias hacer un video me salvarias la vida literalmente

    ResponderEliminar
  23. Genial, tendras idea de como mandar una variable? apenas estoy descubriendo Android Studio. He logrado guardar un numero con EditText pero sigo sin poderlo mandar por Bluetooth.

    ResponderEliminar
  24. Hola, necesitaria usar tu codigo para un proyecto en el que tengo que enviar un array bidimensional desde android a arduino, queria saber si con tu codigo funcionaba. No entiendo mucho de codigo de conexionado. Muchas gracias!

    ResponderEliminar
  25. Parece algo interesante, acabo de empezar a dominar Android así que todo lo que he leído me ha parecido realmente útil para hacerme una mejor idea, gracias por compartir

    ResponderEliminar
  26. Genial el laburo que te mandaste man! un saludo

    ResponderEliminar
  27. Me gusto mucho tu aporte estimado.
    Y para los que piden ayuda con temas que no son de este post o son personales: Agradezcan que alguien comparta su conocimiento y no lo presionen con pedidos fuera de lugar.
    Hay que poner de nuestro trabajo personal y ser dadores de soluciones y no de mas problemas.

    ResponderEliminar
  28. Me gusto mucho tu aporte estimado.
    Y para los que piden ayuda con temas que no son de este post o son personales: Agradezcan que alguien comparta su conocimiento y no lo presionen con pedidos fuera de lugar.
    Hay que poner de nuestro trabajo personal y ser dadores de soluciones y no de mas problemas.

    ResponderEliminar
  29. Hola amigo muy buena aportación pero podrías explicarme este método checkBTState
    estoy tratando de desglosarlo.

    ResponderEliminar
  30. El curso me parece complicad mismo siguiendo los pasos. Sin embargo para quien ya tenga una idea de programación lo verá más sencillo y fácil. De todos modos dar la enhorabuena por compartir en publico.

    ResponderEliminar
  31. Excelente video.
    La verdad me parece excelente para tu Tesis.
    Sasludos desde el Curso Enarm Virtual.

    ResponderEliminar
  32. Buenas tardes Ingeniero.

    De ante mano gracias por el tutorial, para mi ha sido muy util. Quisiera saber si me podrias resolver una duda.

    Creé una app en AndroidStrudio para hacer un switcheo on/off a una bomba de agua en un tanque de agua, en la aplicación tengo basicamente 2 botones, al boton qué me enciende la bomba le he asignado un valor de '1' y al qué me apaga la bomba le definí el valor de '0'.

    Seguidamente a estó del lado de arduino, creé una varibale con el nombre 'state',para asignar los valores qué me llegan desde la app, la variable 'state' la inicializo con el valor igual a '0', luego preguntó en un condicional "if", sí ha establecido la conexión bluetooth entre el dispositivo y el arduino, de ser afirmativa la sentencia, vuelvo a preguntar en una sentencia por el valor del botón qué se halla pulsado en la app.
    Sí el boton pulsado ha sido '1', prendo la bomba de agua, de lo contrario sí ha sido
    '0' apago la bomba. El skecth de arduino qué tengo hasta ahora para el switch on/off y la comunicación entre el celular y arduino por BT es el siguiente:

    #define WPump1_Ch1 10
    int state = 0;
    int Altura=0;
    int Diametro=0;

    void setup() {
    //Velocidad del puerto Serial
    Serial.begin (9600);
    pinMode(WPump1_Ch1, OUTPUT);//BOMBA DE AGUA
    digitalWrite(WPump1_Ch1, HIGH);
    }

    void loop() {
    if (Serial.available() > 0) {
    state = Serial.read();
    }
    if ( state == 1 ) {
    digitalWrite(WPump1_Ch1, LOW);
    }
    else if (state == 0) {
    digitalWrite(WPump1_Ch1, HIGH);
    }


    }


    Tengo una inquietud aun y quísiera saber sí me puedes ayudar a resolverla.

    al tener la bomba de agua en un recipiente cilíndrico me gustaría mostrar la capacidad del mismo en un textview en la app, para eso tendría qué crear 2 variables del lado Arduino qué me almacenen los valores de la altura y el diámetro, previamente ingresados en 2 text_box de la App de AndroidStudio, cosa qué haun no lo he logrado hacer, me gustaría saber sí esto es posible y sí me podrias explicar la forma de hacerlo, te lo agradecería enormemente.

    ResponderEliminar
  33. Hola que tal, muy buen proyecto, excelente aporte. el codigo esta muy completo.

    ResponderEliminar
  34. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  35. Muchas Gracias Bro n.n Me sirvio mucho (Solo tome lo relacioado con android) excelente trabajo Sigue Asi

    ResponderEliminar
  36. hola muy buen tutorial gracias tengo un problema cuando trato de apagar el led o encender no envia nada del android al arduino pero si recibe datos del arduino al android de antemano gracias por tu respuesta

    ResponderEliminar
  37. Hola, he cargado el proyecto y me ha hecho instalar una imagen de android nueva y unas tools, hasta ahí todo correcto. Pero al ejecutar la aplicación, la instala en el emulador pero me da el error : Unfortunately, Rama Blue Wingood has stopped. Alguna idea? Gracias

    ResponderEliminar
    Respuestas
    1. Perdón, creo que era que tengo que usarlo sobre un móvil físico y no uno virtual. Por si le sirve a alguien.

      Eliminar
  38. Gracias por el proyecto,pero no he logrado obtener los datos que envia arduino en la aplicacion android, trado de enviar los estados del led a la app android y no lo logro

    ResponderEliminar
  39. en realidad es una estafa, los codigos de android tienen errores. Para andar buscando errores y perder el tiempo es mejor hacerlo de cero. En la carpeta de github no esta la carpeta de recursos asi que sólo es perder el tiempo, si vas a compartir, hazlo bien...sino no hagas perder el tiempo a los demás

    ResponderEliminar
    Respuestas
    1. si para ti es una perdida de tiempo, entonces hazlo tu!

      Eliminar
    2. Que te lo den compilado, en la cuenta de playstore y los beneficios también te los den a tí, no te molestes en buscar siquiera un recurso.Simplemente por el hecho de compartir el conocimiento se merece como mínimo las gracias.
      Muy buen aporte y muchas gracias.

      Eliminar
  40. Buenas excelente tu trabajo me ayudado mucho..... eh usado tu codigo para el envio de datos de unos sensores el problema es que esos datos no se visualizan en los texview tal vez alguna idea de que podria ser?????

    ResponderEliminar
  41. Excelente trabajo ! Gracias !

    ResponderEliminar
  42. una consulta y este parametro mConnectedThread.write("x"); cual es la funcion que cumple me podrias ayudar gracias

    ResponderEliminar
  43. este parametro cual es la funcion que cumple mConnectedThread.write("x");espero tu respuesta gracias

    ResponderEliminar
  44. me podrias explicar que funcion cumple este comando mConnectedThread.write("x");espero tu respuesta

    ResponderEliminar
  45. make a android app without code and with your mobile.click the link
    http://ethobleo.com/2gy5

    ResponderEliminar
  46. Hola amigo, no se si sigas activo o no, pero bueno, mi duda es como obtengo los datos de un sensor de temperatura a mi aplicacion (Android Studio).
    la parte de arduino es en la que soy novato

    ResponderEliminar
  47. Hola amiguito, podrias enviarme el codigo de la app para comunicarse con arduido por medio de bluetoo ya que tengo que hacer un proyecto donde guarde los datos de sensor de humedad y temperatura, te lo agredeceria mucho ya es que es un proyecto de la escuela, gracias.mi correo es isabelllehdez@gmail.com

    ResponderEliminar
  48. Hola Ramiro muy buen aporte, tengo dudas de cómo leer los valores de humedad de suelo por medio de una aplicación que estoy desarrollando en Android studio, veras, me lee los valores en el motor de serie ardruino pero no logro q los muestre en la aplicación, me podrías indicar alguna manera de hacerlo?

    ResponderEliminar
  49. Para los que quieren una conexión rápida con tan solo 4 líneas miren este video..
    https://youtu.be/ByXr0ArhlQk

    ResponderEliminar
  50. hola buenas tardes! sabes de que ya tengo el código, pero tengo un error que no se como arreglarlo, esta en deviceListActivity. Me podrias decir que es lo que se intenta hacer en el for, tiene adentro BluetoothDevice Device: pairedDevices).

    ResponderEliminar
  51. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  52. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  53. prueba cambiando esta linea
    Set pairedDevices = mBtAdapter.getBondedDevices();
    Por Set pairedDevices = mBtAdapter.getBondedDevices();

    ResponderEliminar
  54. POR FAVOR LEA !! Hola chicos !!! Soy Caro, vivo en Ohio, EE. UU. Tengo 32 años, estoy muy feliz de haber recibido mi tarjeta de cajero automático en blanco de Adriano. Mi tarjeta de cajero automático en blanco puede retirar $ 4,000 por día. Lo obtuve de Él la semana pasada y ahora he retirado alrededor de $ 10,000 gratis. El cajero automático en blanco retira dinero de cualquier cajero automático y no tiene nombre porque está en blanco, solo su PIN estará en él, no se puede rastrear y ahora tengo dinero para negocios, compras y suficiente dinero para mí y mi familia. vivo. Estoy muy contento y feliz de haber conocido a Adriano porque conocí a cinco personas antes que él y no pudieron ayudarme. Pero estoy feliz ahora que Adriano envió la tarjeta a través de DHL y la recibí en dos días. Obtenga su propia tarjeta de él en este momento, la está dando por una pequeña tarifa para ayudar a las personas, incluso si es ilegal, pero ayuda mucho y nadie es atrapado o rastreado. Estoy feliz y agradecido con Adriano porque cambió mi historia de repente. La tarjeta funciona en todos los países. Es una buena noticia. La dirección de correo electrónico de Adriano es adrianohackers01@gmail.com

    ResponderEliminar
  55. POR FAVOR LEA !! Hola chicos !!! Soy Caro, vivo en Ohio, EE. UU. Tengo 32 años, estoy muy feliz de haber recibido mi tarjeta de cajero automático en blanco de Adriano. Mi tarjeta de cajero automático en blanco puede retirar $ 4,000 por día. Lo obtuve de Él la semana pasada y ahora he retirado alrededor de $ 10,000 gratis. El cajero automático en blanco retira dinero de cualquier cajero automático y no tiene nombre porque está en blanco, solo su PIN estará en él, no se puede rastrear y ahora tengo dinero para negocios, compras y suficiente dinero para mí y mi familia. vivo. Estoy muy contento y feliz de haber conocido a Adriano porque conocí a cinco personas antes que él y no pudieron ayudarme. Pero estoy feliz ahora que Adriano envió la tarjeta a través de DHL y la recibí en dos días. Obtenga su propia tarjeta de él en este momento, la está dando por una pequeña tarifa para ayudar a las personas, incluso si es ilegal, pero ayuda mucho y nadie es atrapado o rastreado. Estoy feliz y agradecido con Adriano porque cambió mi historia de repente. La tarjeta funciona en todos los países. Es una buena noticia. La dirección de correo electrónico de Adriano es adrianohackers01@gmail.com

    ResponderEliminar
  56. Alguna idea del porque la clase de java BluetoothAdapter.java este todo en rojo?

    ResponderEliminar
  57. HAGA RICO CON EL USO DE TARJETA ATM EN BLANCO DE
    (besthackersworld58@gmail.com)
    ¿Alguien ha oído hablar de la tarjeta de cajero automático en blanco? Una tarjeta de cajero automático que le permite retirar efectivo de cualquier cajero automático del mundo. No se requiere nombre, no se requiere dirección y no se requiere cuenta bancaria. La tarjeta Atm ya está programada para dispensar efectivo desde cualquier cajero automático en todo el mundo. Escuché sobre esta tarjeta de cajero automático en línea, pero al principio no le presté atención porque todo parece demasiado bueno para ser verdad, pero estaba convencido y sorprendido cuando mi amigo en mi lugar de trabajo obtuvo la tarjeta del proveedor de la tarjeta de cajero automático de garantía. Ambos fuimos al centro de cajeros automáticos y confirmamos que realmente funciona, sin demora lo probé. Desde entonces, he estado retirando de $ 1,500 a $ 5,000 diariamente de la tarjeta de cajero automático en blanco y esta tarjeta realmente ha cambiado mi vida financieramente. Acabo de comprar un coche caro y estoy pensando en comprarme una casa. Para aquellos interesados ​​en ganar dinero rápido deben contactarlos en: Dirección de correo electrónico: besthackersworld58@gmail.com o WhatsApp él en +1 (323) -723-2568

    ResponderEliminar
  58. Quiero agradecer mucho a Kelvin Ericksson por hacerme vivir una vida mejor y más estándar ... Obtuve la tarjeta de cajero automático del servicio de entrega ... Quiero usar este medio para decirle a cualquiera que viva en EE. UU. Y EUROPA para tomar la decisión correcta hoy Kelvin Ericksson es real ... LAS TARJETAS DE ATM PROGRAMADAS son reales y funcionan perfectamente
    CONTACTO CON KELVIN ERICKSSON: BLANKATMMASTER5555@GMAIL.COM
    QUÉ-APLICACIÓN: +3197005033695

    ResponderEliminar