IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Android Discussion :

Android - carte HC05 BlueTooth : problème pour envoyer un message


Sujet :

API standards et tierces Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut Android - carte HC05 BlueTooth : problème pour envoyer un message
    Bonjour,
    malgré de nombreux essais et de nombreuses recherches sur le net, je n'arrive pas en transmettre un seul caractère de ma tablette Android vers une carte HC05 BlueTooth:
    Mes 2 appareils sont bien reconnus et appairés. La demande de connexion semble bien se passer mais lorsque j'arrive à la procédure d'envoi, le prog se plante.
    "lettre" est un String que je saisis dans un EditText
    Etant débutant en Java, je suis sûr que je me plante allègrement, mais si je pouvais avoir un peu d'aide.
    Voici la procédure qui plante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        public void envoiMessage (View v) {
            lettre = this.cmd.getText().toString();
             try {
                sendStream.write(lettre.getBytes());
                sendStream.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    Merci
    Michel

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 141
    Par défaut
    Pas de message d'erreur dans la console ?

    Peut être mettre le code dans un thread pour que ça soit en asynchrone déjà.

    Côté Arduino tu traites comment la fin de message ?

  3. #3
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut
    Merci pour cette réponse.
    J'ai du mal à comprendre pourquoi lancer un "thread" puisque cette procédure est appelée lorsque j'appuie sur un bouton d'envoi?
    En fait c'est cette instruction qui plante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sendStream.write(lettre.getBytes());
    car si je remplace celle-ci par un "Toast" cela fonctionne.

    Le code côté Arduino, tout simple, est le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    #include <SoftwareSerial.h>
    const int btTx = 2;
    const int btRx = 3;
    const int led10 = 10;
    const int led11 = 11;
    const int led12 = 12;
    const int led13 = 13;
    char c = ' ';
     
    SoftwareSerial btLien(btTx, btRx); // HC05_RX, HC05_TX
     
    void setup() {
      pinMode(led10,OUTPUT);
      pinMode(led11,OUTPUT);
      pinMode(led12,OUTPUT);
      pinMode(led13,OUTPUT);
      Serial.begin(38400);
      Serial.println("Liaison PC OK");
      // set the data rate for the SoftwareSerial port
      btLien.begin(38400);
      Serial.println("Liaison BT OK");
    }
     
    void loop() {
      if (btLien.available()){
        c=btLien.read();
        Serial.write(c);
      }
      if (Serial.available()){
        c = Serial.read();
        btLien.write(c);
      }
      if ((c == 'A') || (c == 'B') || (c == 'C') || (c == 'D')) { 
        switch (c) {
          case 'A': digitalWrite(led10,HIGH);
                    break;
          case 'B': digitalWrite(led11,HIGH);
                    break;
          case 'C': digitalWrite(led12,HIGH);
                    break;
          case 'D': digitalWrite(led13,HIGH);
                    break;
        }
        delay(1000);
        digitalWrite(led10,LOW);
        digitalWrite(led11,LOW);
        digitalWrite(led12,LOW);
        digitalWrite(led13,LOW);
      }
    }
    Comme tu le vois, pour l'instant je n'essaie d'envoyer qu'un seul caractère.
    Si nécessaire, je peux poster tout mon code Java?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 141
    Par défaut
    Côté Arduino, ça me semble bon.

    Je pencherai pour un problème de connexion au device.
    L'appairage est nécessaire, mais non suffisant.

    Comment tu te connectes au device ? tu fais un scan au préalable ?

    Si ça plante côté Droid, tu dois avoir une stack dans la console Android Studio.
    Ou adb logcat en console.

  5. #5
    Membre éclairé
    Homme Profil pro
    bricoleur
    Inscrit en
    Octobre 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : bricoleur
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 406
    Par défaut
    Je me permets de t'envoyer le code Java car je n'arrive pas à trouver où se situe l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    package mormic.bluetest2;
     
    import android.bluetooth.BluetoothSocket;
    import android.support.v7.app.ActionBarActivity;
    import android.bluetooth.BluetoothAdapter;
    import android.bluetooth.BluetoothDevice;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ListView;
    import android.widget.TextView;
    import android.widget.Toast;
    import android.widget.AdapterView.OnItemClickListener;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.ArrayList;
    import java.util.Set;
    import java.util.UUID;
     
    public class MainActivity extends ActionBarActivity implements OnItemClickListener {
        BluetoothSocket mmSocket = null;
        BluetoothAdapter ba = BluetoothAdapter.getDefaultAdapter();
        Set<BluetoothDevice> devices = ba.getBondedDevices();
        BluetoothDevice [] tbDevices = (BluetoothDevice[]) devices.toArray(new BluetoothDevice[devices.size()]);
        OutputStream sendStream = null;
        Button btlst, btEnvoi;
        ListView lv;
        TextView msgSelect;
        EditText cmd;
        ArrayList<String> listItems = new ArrayList<String>();
        public String lettre;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Context context = getApplicationContext();
     
            btlst = (Button)findViewById(R.id.btListe);
            btEnvoi = (Button) findViewById(R.id.envoi);
            lv = (ListView)findViewById(R.id.liste);
            msgSelect = (TextView)findViewById(R.id.select);
            cmd = (EditText)findViewById(R.id.commande);
            //Est-ce que le Bluetooth est supporté
            if (ba == null)
                Toast.makeText(context, "Pas de Bluetooth", Toast.LENGTH_SHORT).show();
            else {
                    //Si oui est-ce que le Bluetooth est en fonction
                if (!ba.isEnabled()) {
                    Toast.makeText(context, "Le Bluetooth est présent mais n'est pas activé", Toast.LENGTH_LONG).show();
                    //Rend le Bluetooth actif
                    Intent active = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                    startActivityForResult(active, 0);
                }
                else
                    Toast.makeText(context,ba.getName() + "\n" + ba.getAddress(),Toast.LENGTH_LONG).show();
            }
        }
        //affiche une liste des équipements apairés
        public void afficheListe(View v){
            for (BluetoothDevice bd : devices) {
                listItems.add(bd.getName() + "\n" + bd.getAddress());
           }
            final ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1, listItems);
            lv.setAdapter(adapter);
            lv.setOnItemClickListener(this);
        }
        //sélectionne un équipement
        public void onItemClick (AdapterView<?>adapter, View v, int position, long id) {
                 // Affichage des données de l'équipement sélectionné dans un textview
            msgSelect.setText("Position " + Integer.toString(position) + "\n" + listItems.get(position));
            //Crée le socket
           try {
                mmSocket = tbDevices[position].createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
            } catch (IOException e) {
                e.printStackTrace();
            }
            connect();
        }
     
        public void connect() {
            new Thread() {
                @Override public void run() {
                    try {
                        mmSocket.connect();
                    } catch (IOException connectException) {
                        try {
                            mmSocket.close();
                        } catch (IOException closeException) { }
                        return;
                    }
                }
            }.start();
        }
     
        public void envoiMessage (View v) {
            lettre = this.cmd.getText().toString();
             try {
                sendStream.write(lettre.getBytes());
                sendStream.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
     
        public void cancel() {
            try {
                mmSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
     
    }
    Je joins aussi un fichier contenant le message d'erreur apparaissant dans logcat lorsque j'essaie d'envoyer un "D"

    Merci de ton aide

    Michel
    Fichiers attachés Fichiers attachés

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 141
    Par défaut
    Ok, le log est clair : ta socket est null.

    Un conseil pour l'initialisation de tes var BT passe par des méthodes avec du code asynchrone (pas via init static)
    et check bien l'état avec du logcat pour avoir des trace pour les différents états.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème pour envoyer un message
    Par HDThoreau dans le forum Débuter
    Réponses: 7
    Dernier message: 29/09/2012, 22h11
  2. Problème pour envoyer un e-mail
    Par Djohn dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/07/2007, 18h59
  3. Problème pour envoyer un formulaire
    Par gloop1 dans le forum Langage
    Réponses: 20
    Dernier message: 03/05/2007, 14h20
  4. [outlook express] problème pour envoyer messages
    Par Piccolo_son dans le forum Outlook Express / Windows Mail
    Réponses: 3
    Dernier message: 08/02/2007, 21h14
  5. Réponses: 1
    Dernier message: 03/12/2005, 16h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo