BLEモジュール SH-HC-08を買って試してみてるのだが、なぜか他のBLEデバイスとの接続ができない。
DSD TECH SH-HC-08 Bluetooth 4.0 BLE UART Arduino互換iOSデバイス用シリアルワイヤレスモジュール (Amazon)
説明の紙に書いてある公式サイトからデータシートがダウンロードできる。
→ DSD TECH Official Website DSD TECH Bluetooth 4.0 ble module SH-HC-08 datasheet and user guide
まず、このモジュールをWindows PCにつなぐために、FT232を内蔵したUSB-UART I/Fも手に入れて、接続した。
TX,RX,VCC(3.3V),GNDの4本の信号線を接続した。
PCでターミナルソフトを使ってCOMポートを開いて動作させてみた。(ボーレート設定は9600bps。)
「AT」と送信すると、BLEモジュールから「OK」が返ってきた。
USB-UARTとBLEモジュールとの接続は問題なさそうだ。
データシートにはATコマンドが載っているのだが、MasterとSlaveを切り替えるコマンドが載っていない。デフォルトでSlaveになっている。BLEの場合MasterはCentral、SlaveはPeripheralと書くらしいのだが、慣れないので以下併記する。
そして、データシートに載っているATコマンドのいくつかは動作しない感じだ。「AT+RESET」とか「AT+RENEW」が動かない。
データシートに載っているApplication例の回路図は、GPSモジュールの出力をこのBLEモジュール(Slave ==Peripheral)につないでBLEで他の機器にワイヤレスで出力するという使い方を説明している。
Slave(Peripheral)で使って、UARTをBLEにそのまま送信するという使い方をする場合、初期設定のままで使うことができるようだ。
BLE scannerでシリアル出力を読み出す方法とかもネットで探すと方法が見つかった。
→ SH-HC-08 Test Manual for Android – osoyoo.com
ただし、自分の場合はこのモジュールをMaster(Central)として使いたいので、あまり関係ない。
—
SHが付かないHC-08のモジュールも他から出ていて、それらはファームウェアが異なっていて、ATコマンドも違うらしい。あるいは同じメーカー内でも出荷時期でファームウエアのバージョン違いで通らないコマンドがあるのかもしれない?
他から出ているモジュール用のATコマンドのマニュアルを見ていろいろと試してみた結果、AT+ROLEコマンドというのがあるのを見つけた。
購入したSH-HC-08でも、「AT+ROLE1」でMaster (Central) モードに切り替えができて、「AT+ROLE0」でSlave(Peripheral)モードに切り替えできた。「AT+ROLE?」で現在のモードを確認できる。
そして、Master(Central)モードに切り替えた後、「AT+SCAN」コマンドを使うと、周囲のBLEデバイスをスキャンするようだ。
試してみたが、数秒スキャンをしていて結果が出力されるものの、結果として1つもBLEデバイスが見つからないという残念な状態だ。
(もしデバイスを見つけたとしても、接続のためのATコマンドも分からないが。)
このBLEモジュールは、Master側(Central側)としてはうまく動かない品物のようだ。
(追記、2台のSH-HC-08を使って片方でAT-ROLE1としてAT+SCANのコマンドを実行すると、もう1台のSH-HC-08と接続がされた。SH-HC-08同士ならばMaster-SlaveというかCentral-Peripheralの接続ができるらしい。他のモジュールとか他の機器とは繋げない親機ということだ。)
—
汎用的なMaster側 (Central側) として使いたい場合、HM-10とかのBLEモジュールを買ったほうがよさそうだ。
kakoさん、こんにちは。
検索でこの記事を見つけました。素敵なブログですね。
HC-08をマスターモードにする方法を教えて頂き、ありがとうございます。
BLEで、通信したかったので、たまたまHC-08を2個購入していました。
これらの間で通信するには、一方をマスターモードにしなければならないことに気づき
その方法を探していました(データシートに記述がないのはひどいですね)。
2個ともパワーオンして、一方をマスターモードに変更、SCANを実行すると、他方とコネクト状態に
なることを発見しました。
この状態のまま、マスター側(FT232RL/USB、Tera Term)から文字を送信すると、
スレーブ側(Aruduino nano)で、それを受信できます。