6
votes

Connexion automatique aux périphériques Bluetooth appariés sur Android

Je veux connecter mon téléphone Android (2.3.6 Samsung Remarque) à un périphérique Bluetooth incorporé (module UART RN-42 BT sur Arduino). Commencé avec l'exemple Bluetoothchat et disposez du dispositif embarqué associé au téléphone. Jusqu'à présent, tous semblent bien fonctionner, les appareils sont connectés et les données sont transmises d'Android à un périphérique embarqué. Ce qui me manque toujours, c'est que les appareils se connectent automatiquement une fois que les deux sont dans la plage.

Utilisation du débogueur Je vois que le périphérique intégré est "hôte" ou dans son terme "esclave" et l'Android étant un client, en tant que Android émettant une demande de connexion.


0 commentaires

3 Réponses :


0
votes

Alors j'ai compris le "truc". Premièrement, le téléphone mobile est défini sur uniquement pour accepter les connexions et le périphérique intégré qui a une alimentation en ligne pour la connexion automatique. Le changement consistait à définir le périphérique intégré de "hôte" en mode "client" avec auto-connexion.

Le prochain obstacle a été l'Android devait avoir le code d'acceptation dans un service, sinon la connexion ne fonctionnerait que si la demande a été rendue active. Avec la mise en contact de la pièce de code dans un service, l'application peut être non active et l'accessoire intégré serait connecté. Le code sera partagé dans Instructable: Entrez la description de la liaison ici


1 commentaires

Donc, par exemple, savez-vous comment puis-je faire pour vous connecter à mon périphérique Bluetooth le plus proche avec seulement activer Bluetooth mannalement?



0
votes

Code complet et instructions dans: http://www.instructables.com/id/missed- appels-et-SMS-notifier-accessoire /

Il inclut non seulement le code, mais également une explication sur la manière dont cela fonctionne et la description du montage.


0 commentaires

3
votes

J'ai une configuration similaire (téléphone Android Galaxy S3 4.0 et RN-42 BT connectée à Arduino Uno) Je suis capable de coupler l'Android et le Bluetooth et se connecter depuis l'Android à la RN-42 BT (J'utilise l'application BlueTerm pour test) Cependant, je suis incapable de se connecter à partir de la RN-42 BT au téléphone Android. J'ai suivi les innstructions et l'exemple de code dans: http: // www.instructables.com/id/Missed-calls-and-SMS-Notifier-Accessory/

I programmé le 42 BT pour servir en tant que client et en mode de connexion automatique (SR, 3). Dans mon code Android, le BluetoothSerialService (équivalent au code exemple PhoneInfoServer) est coincé dans la AcceptThread sur: socket = mmServerSocket.accept (); Je joins les morceaux de codes suivants qui sont liés au problème de connexion: p>

  1. code Arduino qui définit le mode de connexion à auto et initiés une connexion avec le téléphone Android li>
  2. code Android BluetoothSerialService AcceptThread qui écoute entrant connexion li>
  3. Messages LogCat qui montrent que le code est bloqué en attente pour connexion entrante li> Ol>

    Dans Google BluetoothChat démo app il y a une option pour rendre le téléphone découvrable de sorte qu'un autre téléphone peut s'y connecter. Je cherche quelque chose de similaire pour une connexion série Bluetooth. Je cherchais une application sur Google Play qui permettra de tester listenning à une demande de connexion entrante à partir d'un périphérique série Bluetooth, mais n'a pas trouvé une telle application. Est-ce que quelqu'un savoir d'une telle application? P>

    Cordialement, Avner p>

    1. code Arduino qui définit le mode de connexion à l'auto et initie une connexion avec le téléphone Android p>

      // The mac address of the android phone
      $$$SR,04FE3144A0A4\r
      
      // Force a complete reboot of the device (similar to a power cycle).
      $$$R,1\r
      
      // SM,3 - mode=auto
      // SO,Z - Extended Status String, Setting this string enables status messages to be sent to the local serial port.
      // --- - exit command mode (three minus signs).
      $$$SM,3\rSO,Z\r---\r
      
    2. Android BluetoothSerialService AcceptThread code> Code qui écoute les connexions entrantes p>

          // ...
      12-09 01:04:38.765: I/BluetoothSerialServiceAcceptThread(16175): BEG AcceptThread::AcceptThread
      12-09 01:04:38.765: I/BluetoothSerialServiceAcceptThread(16175): AcceptThread constructor trying to create listening socket
      12-09 01:04:38.765: V/BluetoothSocket.cpp(16175): initSocketNative
      12-09 01:04:38.765: V/BluetoothSocket.cpp(16175): ...fd 49 created (RFCOMM, lm = 0)
      12-09 01:04:38.765: V/BluetoothSocket.cpp(16175): initSocketFromFdNative
      12-09 01:04:38.775: D/BluetoothUtils(16175): isSocketAllowedBySecurityPolicy start : device null
      12-09 01:04:38.775: V/BluetoothSocket.cpp(16175): bindListenNative
      12-09 01:04:38.775: V/BluetoothSocket.cpp(16175): ...bindListenNative(49) success
      12-09 01:04:38.785: D/BluetoothSerialServiceAcceptThread(16175): AcceptThread: Listening BT Socket Insecure created
      12-09 01:04:38.785: D/BluetoothSerialServiceAcceptThread(16175): mmServerSocket: android.bluetooth.BluetoothServerSocket@41af72c8
      12-09 01:04:38.785: D/BluetoothReadService(16175): END start
      12-09 01:04:38.795: I/BluetoothSerialServiceAcceptThread(16175): BEG BluetoothSerialService::run
      12-09 01:04:38.795: D/BluetoothSerialServiceAcceptThread(16175): AcceptThread.run: socket type:Insecure
      12-09 01:04:38.795: I/BluetoothSerialServiceAcceptThread(16175): mState: 1
      12-09 01:04:38.795: I/BluetoothSerialServiceAcceptThread(16175): socket before mmServerSocket.accept(): null
      12-09 01:04:38.795: V/BluetoothSocket.cpp(16175): acceptNative
      12-09 01:04:38.855: I/MainActivity(16175): mBtStatus: android.widget.ImageView@41adc698
      12-09 01:04:38.855: I/MainActivity(16175): In case: BluetoothSerialService.STATE_LISTEN
      12-09 01:04:38.855: D/MainActivity(16175): Beg onCreateOptionsMenu
      12-09 01:04:38.885: D/memalloc(16175): ion: Mapped buffer base:0x5d760000 size:3768320 offset:0 fd:57
      12-09 01:04:38.925: D/CLIPBOARD(16175): Hide Clipboard dialog at Starting input: finished by someone else... !
      // ...
      
    3. Messages LogCat qui montrent que le code est en attente bloqué pour une connexion entrante p>

      // ...
          private class AcceptThread extends Thread
          {
              // The local server socket
          static private final String TAG = "BluetoothSerialServiceAcceptThread";
              private final BluetoothServerSocket mmServerSocket;
              private String mSocketType;
      
      
              /** Creates an thread for accepting incoming Bluetooth connections
               * @param secure    Currently ignored, but suppose to represent the mode of socket.
               * All communication is currently done over insecure socket 
               */
              public AcceptThread(boolean secure) {
                  Log.i(TAG, "BEG AcceptThread::AcceptThread");
      
                  BluetoothServerSocket tmp = null;
                  mSocketType = secure ? "Secure":"Insecure";
      
                  // Create a new listening server socket
                  try {
                  Log.i(TAG, "AcceptThread constructor trying to create listening socket");
      
                      if (!secure) {
                          // This is for Android 2.2
                          // tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME_INSECURE, BT_SPP_UUID);
      
                          // This is for Android 2.3 but testing the above on 2.3 device showed it to be working.
                          tmp = mAdapter.listenUsingInsecureRfcommWithServiceRecord(NAME_INSECURE, BT_SPP_UUID);
                      }
      
                      Log.d(TAG, "AcceptThread: Listening BT Socket " + mSocketType + " created");
                  }
                  catch (IOException e)
                  {
                      Log.e(TAG, "AcceptThread: Listening BT Socket Type: " + mSocketType + " listen() failed " + e.getMessage());
                      acceptProblem();
                  }
                  mmServerSocket = tmp;
      
                  Log.d(TAG, "mmServerSocket: " + mmServerSocket);
      
              } // public AcceptThread
      
      
              public void run() {             
                  Log.i(TAG, "BEG BluetoothSerialService::run");
      
                  if (mmServerSocket == null)
                  {
                  Log.e(TAG, "AcceptThread.run: No server socket");
                  return;
                  }
      
                  Log.d(TAG, "AcceptThread.run: socket type:" + mSocketType);
                  setName("AcceptThread" + mSocketType);
      
                  BluetoothSocket socket = null;
      
                  Log.i(TAG, "mState: " + mState);
      
                  // Listen to the server socket if we're not connected
                  while (mState != STATE_CONNECTED)
                  {
                      Log.i(TAG, "socket before mmServerSocket.accept(): " + socket);
      
                      try
                      {
                          // This is a blocking call and will only return on a
                          // successful connection or an exception
                          socket = mmServerSocket.accept();
                          Log.d(TAG, "AcceptThread.run: returned from accept");
                      }
                      catch (IOException e)
                      {
                          Log.e(TAG, "AcceptThread.run: Socket Type: " + mSocketType + "accept() failed " + e.getMessage());
                          break;
                      }
      
                      Log.i(TAG, "socket after mmServerSocket.accept(): " + socket);
      //...
      


3 commentaires

Ceci est une information utile, mais cela ne semble pas être une réponse


L'application PhoneInfo sur l'Android a la possibilité d'afficher l'adresse MAC BT. Juste pour m'assurer, vérifiez-le. De plus, j'ai remarqué que vous n'avez pas fait la commande C sur le terminal avec le module BT. S'il vous plaît essayez ça. Autant que je me souvienne du code fonctionne dans une communication non sécurisée de toute façon (sur le côté Android)


J'ai trouvé une solution de contournement pour le problème du téléphone Android (Galaxy S3 4.0.3) ne pouvant pas servir de serveur pour une connexion automatique. J'ai ajouté une option pour le téléphone Android d'agir en tant que client et d'initier insécurité RFComsocket sur le RN-42 BT. Remplacement de CreaterFCOMMSockettoservicerecord avec CreateInsecureurFCOMMSocketoservicerecord dans une connexion SUCCEFELL. La lumière BT RN-42 devient verte et le périphérique communique sans avoir à pointer dans le mot de passe (1234).