2018年5月5日土曜日

Bluetooth BLE Module(CC41-A)とAndroidのペアリングで苦戦

何のついでだったか、
このBletooth v4.0 BLEのモジュールをポチっていました^^;
US$ 1.83(送料込み 2.12)でした。
Serialプロファイルだけだろうから、マーティーにもちょっと遊べるかなと思って。

届いたのは、これ!
透明のスミチューブ(ヒシチューブ)が被せてあります。
これを剥いでから使うのかと思いきや、そのままでいいようです。
亀の子基板は、一部の端子だけハンダ付けされているので脱落防止なのでしょう?
上下、各4箇所しかハンダ付けされていません、ちと不安が。
チップはTI、「CC2541」が品番のようです。
裏は、これ
「ZS-040」がボードの品番なのだろうか?
「ZS-040」とありますが、どうやら「HM-10」のCloneのようです。
で、まずは、ここのやり方でやってみることにします。
一応、Fritzingでブレッドボード図を作りました。
本当は、3.3V-5Vレベル変換がいりますが、直結で大丈夫らしい。
取り敢えずの実験なので実体は、これ^^;
Arduinoのスケッチは、コピペです m(_ _)m
*****
#include <SoftwareSerial.h>

 SoftwareSerial mySerial(8,9);

 void setup()
 {
    mySerial.begin(9600);
    Serial.begin(9600);
    delay(100);
 }

 void loop()
 {
    if (Serial.available()>0)
       mySerial.write(Serial.read());
    if (mySerial.available()>0)
       Serial.write(mySerial.read());
 }
*****

Arduino IDE v1.8.3を起動してArduino UNOにスケッチを書き込みます。
シリアルモニタで「AT」送信すると
「OK」が返ってきました。
色々調べているとコマンドが少しわかってきました。
「AT+VERSION」では、
「+VERSION=Firmware V3.0.6 Bluetooth V4.0 LE」とでました。
「AT+NAME」で
「+NAME=BT05」とでました。
「AT+PIN」すると
「+PIN=000000」
取り敢えず、先に進んでみます。
スマホ側の準備です。
その前にスマホ(Android)設定のBluetoothの所でペアリングしておきます。
「BT05」を発見してくれました。
が! ペアリングしてくれません?
一応、CONNECTはしているようなので先に行ってみます。
先の英語のサイトと同様に
Google.Playから「BLE Scanner」ってのをインストールします。
PCでサイトを開くとこれです。
スマホのアプリ、インストール完了!
BLE Scannerで右下の「Get Start」で起動します。
 「BT05」をタップします。
[CUSTOM SERVICE]をタップ
R:Read、W:Write、N:Nortfyのマークがでてきます。
一番上のWをタップ
Text送信の入力画面になります。
「Hello Marty」と入れてみます。[OK]すると
PC側のArduino IDEのシリアルモニタに
「Hello Marty」とでてきました!
通信は成功です。
どうやら、このアプリ BLE Scannerは、ペアリングしてなくても動作するんですね。
それにしてもペアリングできないのは、嫌です。
PC(Windows10 64bit)でペアリングしてみます。
まず「不明なデバイス」と検出されて
「接続済み」になり
 一瞬「Bluetooth LE Device xxxxx」とでて
 やっと「BT05」の名前がでて
PIN入力の要求はなく、すんなり「ペアリング済み」になりました。
デバイスマネージャーには、
「Bluetooth LE 汎用属性サービス」「BT05」が入りました。
うまくいったと思いきや、
デバイスドライバのCOMの所に
「Bluetooth リンク経由の標準シリアル (COMx)」ができているはずなのに
な~んにもできないのです。
「その他のBluetoothオプション」からCOMポートから
追加しようとしてもできないのです。
「Bluetooth Handsfree Service」ってのを開始してみるもダメ。
家族のWindows8.1でも仮想COMポートができません。
ペアリングするだけなのです。
他にも色々手を尽くしてみましたが、仮想COMポートができてくれません(´-﹏-`;)

マーティーは、Bluetoothなど無線系は得意としておりません。
ペアリングしているのに仮想COMポートができないのは、
ひょっとしてAndroid専用だったりするのだろうか?
端末のシリアルのSPP Profileは、親機側のOSに依存しないと思うのですが...
一旦、Windowsの方は、置いといて
スマホの方に戻ってペアリングを試みます。

.....やっと見つけました!
ここにペアリング方法の設定についてTYPE0~3があると書いてあります。
*****
AT+TYPE0: Do not require passcode, don’t pair (default)
AT+TYPE1: Do not require passcode, but do pair
AT+TYPE2: Require passcode, don’t pair
AT+TYPE3: Require passcode and pair
*****
早速、AT+TYPEすると
「+TYPE=0」が返ってきました。
ということは、「Passcode要求せず、ペアリングもしない」モードなのです。
なんでWindowsでは、ペアリングしたんだろう?
AT+TYPE3: Require passcode and pair の
「Passcode要求してからペアリングする」モードにしてみます。
設定できました!
ついでにPasscode(PIN)を「123456」にします。
OKでました。
ちなみに「AT+PIN1234」と4桁にするとエラーがでて設定できません。
で、スマホで検索すると
ペア設定のリクエストがでてくるようになりました!
一応、先のアプリ BLE Scannerで日本語を送信してみると、
大丈夫です。
これでペアリングできるようになりました。

実は、調べている途中で見つけた、これ
「Bluetooth Module + Arduino UNO + RGB-LEDを
 スマホアプリから色変化される」ってのをやりたくなったのです。

手持ちの3色LED、Arduino UNOとBluetooth Moduleを配線して
Arduino UNOにスケッチを書き込んで
スマホに「Color LED Controller」ってのを入れ、いざ!

ペアリングのキーを入力する所まで順調に行ったのに
この「Error 507 Unable to connect... 」エラーが出るのです。
ペアリングは、成功しているようなのですが、数秒後に切れるんです。
他の似たようなアプリも試しましたが同じくダメなのです。
ちなみにマーティのスマホはAndroid Version 5.1です。
さきの英語のサイトには、「HM-10にFAKE品がある」とあります。
マーティーが買ったのは、真中のと同じなので、FAKEのようですね~(-_-;)
CLONEではなくFAKEなんですかね~
www.hangar42.nl/hm10より
このPDF、HM-10関連のDatasheetを見つけました。
P1に本物とフェイクの見分け方があります。
水晶発振子があるのが本物とのこと。
マーティーのは、上の写真の真中の水晶発振子のランドだけなのです。
P6にHM-01~15まであります。
どうりでAliExpressに色んな種類があるわけです。
マーティーのは、CC2541がついているのでHM-10かHM-11で
基板サイズを測ると、HM-10フェイクということになります。

水晶なしのフェイクでも動くようなのですが...

PDFをずっと見ていくとATコマンドの詳細解説があります。

正規品では、ATコマンドの最後に「?」を付けるのですが
マーティーのは、「?」を付けると応答してくれません。
「AT+TCON」ってのが怪しいのですが、このコマンドは応答がありせん。

「AT+HELP」すると、このModuleのATコマンド一覧がでてきました。
正規品に比べるとコマンドが少ないです。
*****
**********************************************************
* Command             Description            *
* ---------------------------------------------------------------- *
* AT                  Check if the command terminal work normally  *
* AT+RESET            Software reboot    *
* AT+VERSION          Get firmware, bluetooth, HCI and LMP version *
* AT+HELP             List all the commands            *
* AT+NAME             Get/Set local device name                    *
* AT+PIN              Get/Set pin code for pairing                 *
* AT+PASS             Get/Set pin code for pairing                 *
* AT+BAUD             Get/Set baud rate                    *
* AT+LADDR            Get local bluetooth address    *
* AT+ADDR             Get local bluetooth address    *
* AT+DEFAULT          Restore factory default    *
* AT+RENEW            Restore factory default    *
* AT+STATE            Get current state    *
* AT+PWRM             Get/Set power on mode(low power)     *
* AT+POWE             Get/Set RF transmit power     *
* AT+SLEEP            Sleep mode                     *
* AT+ROLE             Get/Set current role.                    *
* AT+PARI             Get/Set UART parity bit.                     *
* AT+STOP             Get/Set UART stop bit.                       *
* AT+START            System start working.    *
* AT+IMME             System wait for command when power on.    *
* AT+IBEA             Switch iBeacon mode.                    *
* AT+IBE0             Set iBeacon UUID 0.                        *
* AT+IBE1             Set iBeacon UUID 1.                        *
* AT+IBE2             Set iBeacon UUID 2.                        *
* AT+IBE3             Set iBeacon UUID 3.                        *
* AT+MARJ             Set iBeacon MARJ .                        *
* AT+MINO             Set iBeacon MINO .                        *
* AT+MEA              Set iBeacon MEA .                        *
* AT+NOTI             Notify connection event .                    *
* AT+UUID             Get/Set system SERVER_UUID .                *
* AT+CHAR             Get/Set system CHAR_UUID .                *
* -----------------------------------------------------------------*
* Note: (M) = The command support slave mode only.     *
* For more information, please visit http://www.bolutek.com        *
* Copyright@2013 www.bolutek.com. All rights reserved.    *
**********************************************************
*****

「AT+RENEW」で工場出荷状態に戻してみると
「NAME=CC41-A」とでてきました。
この状態で試すも動作状況は変わりません。

ん~ん、わかりませんね~
スマホのBLE Scannerでは、接続を保って、しかもBONDEDしているのに
Bluetooth設定画面では「ペアリングされたデバイスの所」ではなく
使用可能なデバイスの所」にあってペアリングされてないのです。
アプリ単体でペアリングすればいいようなのです。

ペアリングされていない(一旦ペアリングして切れた)状態では、
BLE Scannerでは、BT05はリストに出てきますが
(この状態でもNOT BONDEDだが接続され、動作する)
Color LED Controllerでは、Bluetooth設定上でペアリングされてないデバイスは
リストにでてこないのです。
アプリの作りの仕様なのかな?

ここに
「Take care that its a BLE module that it cant be visible for not bluetooth 4.0 systems. Over an Android device you need a version 4.3 or higher to make sure that the hardware is BLE compatible and then you need specialized apps that support BLE (The most apps are designed with normal bluetooth API, not BLE).」

Google先生に訳してもらいうと、
「bluetooth 4.0システムでは表示されないBLEモジュールに注意してください。 Androidデバイスでは、ハードウェアがBLEと互換性があり、BLEをサポートする特殊なアプリケーションが必要であることを確認するにはバージョン4.3以上が必要です(ほとんどのアプリケーションはBLEではなく通常のBluetooth APIで設計されています)。」
これかな?!
結局アプリ側の問題なのだろうか?
BLE Scannerは、ペアリングして動いているし。
マーティのスマホはAndroid Version 5.1だし。

ここにHM-10とCC41-Aの違いが説明してあります。

ここにTIのCC2541のDatasheetのPDFがあるけど、ちょっと読む気になりません。

ここには、TIチップCC2541側の問題だとあります。
「this device uses an outdated TI library causing pairing problems」
「このデバイスは古いTIライブラリを使用してペア設定の問題を引き起こします」
マーティーの症状は、そこのTYPE3の報告に非常によく似ています。
これが一番怪しいですね~

最後の手段は、この
「How to flash genuine HM-10 firmware on CC2541」
  (make genuine HM-10 from CC41)」でFirmware書き換えかな!?
マーティーのも工場出荷時に戻したらこのNAME=CC41-Aだったし。
V540のFull FirmwareでCCloaderってのを使えばいいらしい。

ここにあるFirmwareは、UPGRADE版だけなので要注意です。

Firmwareの入れ替えは、期待大ですが、別の機会にすることにします。
ちょっと遊ぶだけのつもりだったので、英語ばっかしだし、疲れてきて
リンクを書き留めておくだけになっております(´-﹏-`;)

また、捜索中に
「BLE modules like HM-10 does not have a pairing mode. They connect directly through the app」のが、2、3ありました。

このボードは、2つをMaster/Slaveで対抗接続専用なのかも?
1個しか買ってないので、その実験もできず、もう一個買うまではお蔵入りかな?
ここに「2つのHC-05をMasterとSlaveにしてペアリングする手順」があります。

水晶発振子の付いたHM-10正規品と思われるものは、高値ですね~
たかが水晶1個なのにUS$ 5程に跳ね上がります。2.5倍にもなるのです。

とりあえず、Bluetooth 2.0のボード
チップは、Bluetoothの元祖CSR社のをポチっておきます。1個ですが。

今回は、敗戦ですね~

0 件のコメント: