Communication entre Android et Arduino
via Bluetooth
ElAchèche Bedis
Introduction
La création d'un robot téléguidé, est cool! Mais, pourquoi dépenser encore du
temps et de l'argent sur une té...
Android et Bluetooth...
La plate-forme Android inclut le support du réseau Bluetooth, qui permet à un
dispositif sans fil ...
Android et Bluetooth...
Voici les étapes nécessaires pour pouvoir utiliser le Bluetooth dans Android
1 - Demander la permi...
Android et Bluetooth...
3 - Activer le Bluetooth : Il existe deux méthodes pour pouvoir le faire.
3.1 - Être gentil et dem...
Android et Bluetooth...
3.2 - Activer le Bluetooth tout seul comme un grand :
if (!bluetoothAdapter.isEnabled()) {
bluetoo...
Projet :
Le scénario de notre projet est le suivant :
Un visiteur arrive et sonne la porte à l'aide du bouton poussoir. Un...
Côté Arduino : Circuit
Composants :
- Carte Arduino Uno
- 2 LED
- Bouton poussoir
- 3 résistances 220Ω
- Module Bluetooth
Côté Arduino: Code
const int redLed = 4;
const int greenLed = 3;
const int btnPin = 2;
int buttonState;
int reading;
int l...
Côté Arduino: Code
void loop() {
reading = digitalRead(btnPin);
if (reading != lastButtonState) {
lastDebounceTime = milli...
Côté Android: UI
Absence du
Bluetooth
Réception
de données
Interface
principale
Côté Android: Code
ReceiverThread
~ Handler handler
+ void run()
Main
- BluetoothAdapter btAdapter
- BluetoothInterface my...
Côté Android: Code
public class Main extends Activity implements OnClickListener {
private BluetoothAdapter btAdapter = Bl...
Côté Android: Code
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (btA...
Côté Android: Code
@Override
public void onClick(View v) {
if (v == accept) {
myBTInterface.sendData("Y");
} else if (v ==...
Côté Android: Code
public void handleMessage(Message msg) {
String data = msg.getData().getString("receivedData");
if (dat...
Côté Android: Code
public class BluetoothInterface {
private BluetoothAdapter btAdapter = null;
private BluetoothDevice de...
Côté Android: Code
public BluetoothInterface(BluetoothAdapter bt, String address, Handler h,
final Context c) {
this.btAda...
Côté Android: Code
public void connectBT() {
Set<BluetoothDevice> pairedDevices = btAdapter.getBondedDevices();
if (paired...
Côté Android: Code
public void sendData(String message) {
try {
outStream.write(message.getBytes());
outStream.flush();
} ...
Côté Android: Code
private class ReceiverThread extends Thread {
Handler handler;
public ReceiverThread(Handler h) {
handl...
Côté Android: Code
@Override
public void run() {
while (true) {
try {
if (inStream.available() > 0) {
byte[] buffer = new ...
Merci de votre attention
ElAchèche Bedis
Upcoming SlideShare
Loading in...5
×

Communication entre android et arduino via bluetooth

2,382

Published on

La création d'un robot téléguidé, est cool! Mais, pourquoi dépenser du temps et de l'argent sur une télécommande. Comment, peut-on observer le fonctionnement du robot? La solution est dans votre poche! Lors de l'atelier, on va entamer la partie de la communication sans fil Android/Ardiuno via Bluetooth. La création de votre télécommande, et le suivi de l'état de votre robot via votre appareil n'a jamais été aussi facile.

Published in: Software
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,382
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
55
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Communication entre android et arduino via bluetooth

  1. 1. Communication entre Android et Arduino via Bluetooth ElAchèche Bedis
  2. 2. Introduction La création d'un robot téléguidé, est cool! Mais, pourquoi dépenser encore du temps et de l'argent sur une télécommande ? La solution et ici ! Saisissez juste votre smartphone de votre poche et allons-y !
  3. 3. Android et Bluetooth... La plate-forme Android inclut le support du réseau Bluetooth, qui permet à un dispositif sans fil d'échanger des données avec d'autres dispositifs Bluetooth. Votre smartphone Android doit avoir le Bluetooth bien évidement et doit tourner sur Android 2.0 minimum: les fonctions pour l'utilisation Bluetooth ne sont présentes dans le SDK qu'à partir de l'API 5.
  4. 4. Android et Bluetooth... Voici les étapes nécessaires pour pouvoir utiliser le Bluetooth dans Android 1 - Demander la permission d'utiliser le Bluetooth : <uses-permission android:name="android.permission.BLUETOOTH" /> 2 – Vérifier la présence du Bluetooth sur le terminal : BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (bluetoothAdapter == null) { // Le device ne possède pas la technologie Bluetooth } else { // Le device possède le Bluetooth }
  5. 5. Android et Bluetooth... 3 - Activer le Bluetooth : Il existe deux méthodes pour pouvoir le faire. 3.1 - Être gentil et demander la permission : if (!bluetoothAdapter.isEnabled()) { Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_CODE_ENABLE_BLUETOOTH); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode != REQUEST_CODE_ENABLE_BLUETOOTH) return; if (resultCode == RESULT_OK) { // L'utilisateur a activé le bluetooth } else { // L'utilisateur n'a pas activé le bluetooth } }
  6. 6. Android et Bluetooth... 3.2 - Activer le Bluetooth tout seul comme un grand : if (!bluetoothAdapter.isEnabled()) { bluetoothAdapter.enable(); } N.B : Il faut ajouter la permission suivante : <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> 4 - Obtenir la liste des devices déjà connus Set<BluetoothDevice> devices = bluetoothAdapter.getBondedDevices(); for (BluetoothDevice blueDevice : devices) { Toast.makeText(Activity.this, "Device " + blueDevice.getName(), 1000).show(); }
  7. 7. Projet : Le scénario de notre projet est le suivant : Un visiteur arrive et sonne la porte à l'aide du bouton poussoir. Une notification de joignabilité est envoyée à l'application Android pour que l'utilisateur décide s'il veut ouvrir la porte ou non. La réponse de l'utilisateur activera une de deux diodes LED (rouge/verte). La liaison Bluetooth se fait par le profil Bluetooth SPP (Serial Port Profile), qui permet d'émuler une connexion série. Cette méthode est donc compatible avec n'importe quel microcontrôleur ayant une interface série (Arduino pour notre cas).
  8. 8. Côté Arduino : Circuit Composants : - Carte Arduino Uno - 2 LED - Bouton poussoir - 3 résistances 220Ω - Module Bluetooth
  9. 9. Côté Arduino: Code const int redLed = 4; const int greenLed = 3; const int btnPin = 2; int buttonState; int reading; int lastButtonState = LOW; int incomingByte; long lastDebounceTime = 0; long debounceDelay = 50; void setup() { Serial.begin(9600); pinMode(greenLed, OUTPUT); pinMode(redLed, OUTPUT); pinMode(btnPin, INPUT); }
  10. 10. Côté Arduino: Code void loop() { reading = digitalRead(btnPin); if (reading != lastButtonState) { lastDebounceTime = millis(); // reset the debouncing timer } if ((millis() - lastDebounceTime) > debounceDelay) { if (reading != buttonState) { buttonState = reading; if (buttonState == HIGH) { Serial.write('K'); } } } lastButtonState = buttonState; if (Serial.available() > 0){ incomingByte = Serial.read(); if (incomingByte == 'Y'){ digitalWrite(greenLed, HIGH); } else if (incomingByte == 'N'){ digitalWrite(redLed, HIGH); } } }
  11. 11. Côté Android: UI Absence du Bluetooth Réception de données Interface principale
  12. 12. Côté Android: Code ReceiverThread ~ Handler handler + void run() Main - BluetoothAdapter btAdapter - BluetoothInterface myBTInterface - Button accept - Button decline - String adress - TextView status ~ Handler handler + void onClick(View) + void OnCreate(Bundle) + void onDestroy() BluetoothInterface - BluetoothAdapter btAdapter - BluetoothDevice device - ReceiverThread receiverThread - InputStream inSteam - OutputStream outSteam - String adress - static final UUID MY_UUID + BluetoothInterface(BluetoothAdapter, String, Handler, Context) + void closeBT() + void connectBT() + void sendData(String)
  13. 13. Côté Android: Code public class Main extends Activity implements OnClickListener { private BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter(); private BluetoothInterface myBTInterface = null; private Button accept, decline; private TextView status; private String address = "XX:XX:XX:XX:XX:XX"; // BT module MAC final Handler handler = new Handler() { public void handleMessage(Message msg) { ... } }; @Override public void onCreate(Bundle savedInstanceState) { ... } @Override public void onClick(View v) { ... } @Override public void onDestroy() { ... } }
  14. 14. Côté Android: Code @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (btAdapter == null) { setContentView(R.layout.no_bt); new Handler().postDelayed(new Runnable() { @Override public void run() { Main.this.finish(); } }, 3000); } else { setContentView(R.layout.main); myBTInterface = new BluetoothInterface(btAdapter, address, handler, Main.this); myBTInterface.connectBT(); accept = (Button) findViewById(R.id.accept); decline = (Button) findViewById(R.id.decline); status = (TextView) findViewById(R.id.satus); accept.setOnClickListener(this); decline.setOnClickListener(this); } }
  15. 15. Côté Android: Code @Override public void onClick(View v) { if (v == accept) { myBTInterface.sendData("Y"); } else if (v == decline) { myBTInterface.sendData("N"); } status.setText(R.string.foreveralone); accept.setEnabled(false); accept.setAlpha(0.5f); decline.setEnabled(false); decline.setAlpha(0.5f); } @Override public void onDestroy() { myBTInterface.closeBT(); super.onDestroy(); }
  16. 16. Côté Android: Code public void handleMessage(Message msg) { String data = msg.getData().getString("receivedData"); if (data.equals("K")) { status.setText(R.string.company); accept.setEnabled(true); accept.setAlpha(1f); decline.setEnabled(true); decline.setAlpha(1f); } }
  17. 17. Côté Android: Code public class BluetoothInterface { private BluetoothAdapter btAdapter = null; private BluetoothDevice device = null; private BluetoothSocket socket = null; private OutputStream outStream = null; private InputStream inStream = null; private String address; private static final UUID MY_UUID = UUID .fromString("00001101-0000-1000-8000-00805F9B34FB"); private ReceiverThread receiverThread; public BluetoothInterface(BluetoothAdapter bt, String address, Handler h, final Context c) { ... } public void connectBT() { ... } public void sendData(String message) { ... } public void closeBT() { ... } }
  18. 18. Côté Android: Code public BluetoothInterface(BluetoothAdapter bt, String address, Handler h, final Context c) { this.btAdapter = bt; this.address = address; this.receiverThread = new ReceiverThread(h); AsyncTask<Void, Void, Void> async = new AsyncTask<Void, Void, Void>() { ProgressDialog dialog = new ProgressDialog(c); protected void onPreExecute() { super.onPreExecute(); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setMessage("Enabeling Bluetooth, please wait..."); dialog.setCancelable(false); dialog.show(); } @Override protected Void doInBackground(Void... params) { if (!btAdapter.isEnabled()) btAdapter.enable(); while (!btAdapter.isEnabled()); return null; } @Override protected void onPostExecute(Void result) { dialog.dismiss(); dialog = null; } }; async.execute(); }
  19. 19. Côté Android: Code public void connectBT() { Set<BluetoothDevice> pairedDevices = btAdapter.getBondedDevices(); if (pairedDevices.size() > 0) { for (BluetoothDevice device : pairedDevices) { if (device.getAddress().equals(address)) { this.device = device; break; }}} try { socket = device.createInsecureRfcommSocketToServiceRecord(MY_UUID); socket.connect(); outStream = socket.getOutputStream(); inStream = socket.getInputStream(); receiverThread.start(); Log.i("connectBT","Connected device"); } catch (NullPointerException e) { Log.e("connectBT: NullPointer",e.toString()); } catch (IOException e) { Log.e("connectBT: IO",e.toString()); } }
  20. 20. Côté Android: Code public void sendData(String message) { try { outStream.write(message.getBytes()); outStream.flush(); } catch (NullPointerException e) { Log.e("sendData: NullPointer",e.toString()); } catch (IOException e) { Log.e("sendData: IO",e.toString()); } Log.i("SendData",message); } public void closeBT() { if (btAdapter.isEnabled()) btAdapter.disable(); Log.i("closeBt","Bluetooth disabled"); }
  21. 21. Côté Android: Code private class ReceiverThread extends Thread { Handler handler; public ReceiverThread(Handler h) { handler = h; } @Override public void run() { ... } }
  22. 22. Côté Android: Code @Override public void run() { while (true) { try { if (inStream.available() > 0) { byte[] buffer = new byte[10]; int k = inStream.read(buffer, 0, 10); if (k > 0) { byte rawdata[] = new byte[k]; for (int i = 0; i < k; i++) rawdata[i] = buffer[i]; String data = new String(rawdata); Message msg = handler.obtainMessage(); Bundle b = new Bundle(); b.putString("receivedData", data); msg.setData(b); handler.sendMessage(msg); }}} catch (IOException e) { Log.e("recieveData: IO",e.toString()); } }}}
  23. 23. Merci de votre attention ElAchèche Bedis
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×