PIC24FJ64GB002(Android)

  Bluetooth USB(Ver 4.0)ドングルを介してPIC24FJ64GB002とAndroid携帯をBLE無線接続します。使用した携帯はXperia xz2 compact(Android10)とXperia Ace II(Android13)です。また、使用したドングルはBUFFALO社のBSBT4D200です。

目次


アンドロイドHOGP(道半ば)

PIC24FJ64GB002とアンドロイド携帯をHOGPプロファイルで無線接続します。 PIC回路の写真と回路図はPIC回路の章にあります。また、同章に書いてあるMPLAB Code Configurator(MCC)開発環境も整えます。なお、デバック情報を得るためには「USB シリアル変換器」が必要になります。

  Android10携帯(OSがAndroid10の携帯の意)と接続するためのPIC回路用ファームウェアは、keyboardLE_MCC_Android10.X.zip(LEキーボード)とmouseLE_MCC_Android10.X.zip(LEマウス)です。また、Android13携帯と接続するためのPIC回路用ファームウェアは、keyboardLE_MCC_Android12.X.zip(LEキーボード)とmouseLE_MCC_Android12.X.zip(LEマウス)です。

接続・操作方法:

1.解凍して出てきたフォルダーはMCCインストール時に作られるMPLABXProjectsフォルダーに入れます。MPLAB XでファームウェアをPICに書き込みます。「USB シリアル変換器」を使ってデバック情報をPCに(Tera Term画面上に)出力する場合は、main.cの中にある//#define DEBUG_MODEのコメント//を消してください。

2.最初の接続は、PIC回路にて、タクトスイッチ(SW1)を押しながら電源を入れます。電源を入れた後、タクトスイッチは2秒程度押したままにします。その後はタクトスイッチを放してもかまいません。

3.アンドロイド携帯から接続を開始します。BluetoothをONにしたアンドロイド携帯において、まず「設定」アイコンをタップします。そして、「機器接続」をタップ、「+新しい機器とペア設定する」の箇所をタップします。すると、「YTK-LE」や「YTM-LE」と書かれたアイコンが現れるので、これをタップします。PIC回路上のLED(D1)が点灯すると接続完了です。

  ①LEキーボード:PIC回路とアンドロイド携帯を接続した後、適当なテキストエディタを開き、PICの2、3、6、7ピン(ファームウェアでプルアップしています)のいずれかをGNDに接続すると、それぞれ、a、b、A、Bなる文字がエディタ画面に現れます。 (*注意)

  ②LEマウス:PIC回路とアンドロイド携帯の接続が完了するとマウスカーソルが円を描きます。

4.2回目以降の接続(再接続)は、タクトスイッチ(SW1)を離したまま、PIC回路の電源を入れるだけです。接続が完了するとPIC回路上のLED(D1)が点灯します。 PIC電源を切ってから接続できるまで約10秒掛かります。

問題点:

  ① Android10携帯では、PIC24FJ64GB002の処理速度が遅いせいか、本来Android10から送られて来る命令の順番が一定していないように見えます。どんな順番で命令が来ても処理できるように「割り込み」処理をしなければいけません。Android11携帯では、この種の問題はありません。

 ② 使用したAndroid10と13携帯では、LEキーボードもLEマウスも問題なく動作してしています。ただ、両アンドロイド携帯から見て、何故かPIC回路はHID機器として認識されません(UsbManagerクラスの関数では認識されません)。

 ➂ 再接続に要する時間は約10秒です。現時点では、この時間の短縮はできていません。Windows10の場合と同じように付加回路で、この時間を短くしようと試みたのですが、再接続できなくなったり、再接続に要する時間が短くならなかったりします。つまり、付加回路では(電源を直前に切断命令を出すことでは)、再接続時間を短くすることはできませんでした

 ④ Android11携帯では、directed advertisingによる再接続ができませんでした。理由がわかりません。

参考まで:

  main.cの中に

unsigned char PAIR_RES[7]={0x02,0x03,0x00,0x01,0x10,0x03,0x01}

なる配列がありますが、これはPairing Response命令のコード部分(0x02)とそれに続くデータ部分です。Andorid10と11携帯ではResolvable Private Addressを使用します。だた、これを使用するためには、データ部分の最後から2バイト目(Initiator Key Distribution)の下から2ビット目(IdKey)を1としなければ再接続はできません。ここでは0x03としています。


アンドロイド・カスタムサービス

PIC24FJ64GB002とアンドロイド携帯をカスタムサービスで無線接続し、データの送受信を行います。一度に送受信できるデータは20バイトに制限しています。PIC回路の写真と回路図はPIC回路と「USB シリアル変換器」にあります。

Android10携帯(OSがAndroid10の携帯の意)と接続するためのPIC回路用ファームウェアはcustomLE_MCC_Android10.X.zipで、Android13携帯と接続するためのPIC回路用ファームウェアはcustomLE_MCC_Android12.X.zipです。

接続・操作方法:

1.解凍して出てきたフォルダーはMCCインストール時に作られるMPLABXProjectsフォルダーに入れます。MPLAB XでファームウェアをPICに書き込みます。「USB シリアル変換器」を使ってデバック情報をPCに(Tera Term画面上に)出力する場合は、main.cの中にある//#define DEBUG_MODEのコメント//を消してください。

2.最初の接続は、PIC回路にて、タクトスイッチ(SW1)を押しながら電源を入れます。電源を入れた後、タクトスイッチは2秒程度押したままにします。その後はタクトスイッチを放してもかまいません。

3.アンドロイド携帯から接続を開始します。BluetoothをONにしたアンドロイド携帯において、まず「設定」アイコンをタップします。そして、「機器接続」をタップ、「+新しい機器とペア設定する」の箇所をタップします。すると、「YTG-LE」と書かれたアイコンが現れるので、これをタップします。PIC回路上のLED(D1)が点灯すると接続完了です。

4.アンドロイド10携帯用のアプリケーション・ソフトウェアはcustomLE_Android.zipで、アンドロイド13携帯用のアプリケーション・ソフトウェアはcustomLE_Android12.zipです。 携帯上でこれを実行すると以下の図のように、2つのエディット・テキストと1個のSENDボタンを持つ画面が現れます。 例えば上のエディット・テキストに123と入れてSENDボタンをタップすると、下のエディット・テキストに223と現れれば正常に動作しています。送信された文字列のうち、第1番目の文字だけが変わったもの(アスキーコードで1足されたもの)が現れるはずです。

5.2回目以降の接続(再接続)は、タクトスイッチ(SW1)を離したまま、PIC回路の電源を入れます。HOGPとは異なり、接続を開始するためにはアンドロイド携帯用のアプリケーション・ソフトウェアを起動する(アイコンをタップするだけ)必要があります。ただ、アプリケーション・ソフトウェアがすでに起動されており、かつ、そのActivityが表示中ならば、一端ホームキーなどを押して非表示にしてからアイコンをクリックします。接続が完了するとPIC回路上のLED(D1)が点灯します。SENDボタンを操作するのは、この点灯を確認した後にします。

上にも書きましたが、PICの電源を切ってから再接続可能となるまでの時間は約10秒です。10秒待ってからアプリケーション・ソフトウェアを起動するのが良いと思います。すぐアプリケーション・ソフトウェアを起動すると再接続できません。その時は、アプリケーション・ソフトウェアを一端終了して再び起動すると良いと思います。アプリケーション・ソフトウェアの終了、起動をLEDが点灯するまで繰り返して10秒経つのを待つというのも手です。

注意:再接続の場合、アンドロイド携帯用のアプリケーション・ソフトウェアを再起動する必要があるようです。ソフトウェアの中のOnStop関数を参照ください。間違った使い方をしているかも知れません。

再起動に関して参考にしたサイト:

戌印-INUJIRUSHI

経緯:

PIC回路にてLE一般的HID(HOGP)は実現できています。しかし、今のところ、Android携帯からはPIC回路をUSB機器として認識できないので(UsbManagerクラスの関数で認識できない)、データの入出力ができないでいます。そこで、PIC回路をGeneric Access サービスとカスタムサービスだけを持つBLE機器を作った次第です。

参考にしたサイト:

khwadahiramineいわてぃ

参考まで:

  Xperia Ace II(Android12)は、それと接続するBluetooth機器に対してServer Supported Features(キャラクタリススティック:UUID=0x2B3A)情報を求めて来ます。これに対し、存在しないと応答しました。Xperia Ace II(Android12)のBluetoothバージョンは5.0なのに、5.2から導入されたEnhanced Attribute protocol (EATT)のサポートと関連しているServer Supported Feature情報を求める理由が理解できていません。

  mouseLE_MCC_Android12.X.zipはシーケンシャル処理でしたが、一部「割り込み」処理にしてみました。それが、mouseLE_INT_Android12.X.zipです。「USB シリアル変換器」を使ってデバック情報をPCに(Tera Term画面上に)出力する場合は、read_write.cの中にある//#define DEBUG_MODEのコメント//を消してください。


戻る