« ESP-WROOM-32のBluetooth Classic SPP接続に成功 | Main | 2 in 1 タブレットPC ECS LIVA TE10EA3 »

June 07, 2017

ESP-WROOM-32のBluetooth Classic SPP接続 Windowsも大丈夫!

ESP-WROOM-32のBluetooth Classic SPP接続だが、前回は、Windowsだと SPP 接続できないと書いた。が、この10日ほどの間に、GitHub の btstack が何回かアップデートされており、今日試したら、Windowsとも問題なく接続できたので、報告する。

要は、GitHub の btstack が良くなっただけで、私は何もしていない。
前回と全く同じ「patch.patch.gz」をダウンロードして、作業は次の通りする。

$ cd ~/
$ git clone https://github.com/bluekitchen/btstack.git
$ patch -p1 -d btstack < patch.patch
$ cd btstack/port/esp32/
$ ./create_examples.py
$ cd spp_counter/
$ make all
$ make flash << ESP-WROOM-32をUSB接続していれば、書き込まれる >>

これで、前回と同じく Android と接続できるだけではなく、Ubuntu も GUIでペアリングできるようになったし、Windows も接続できる。
私は、Windows 10で試したが、普通にWindows設定・デバイスの Bluetooth でペアリングした後、デバイスマネージャーで、どの COM番号に割り当てられたか確認し、Putty や TeraTerm でオープンすると「BTstack counter (数字)」が送られてくる。
(MACでの動作確認していないのは、単にMAC環境が手元にないだけのことなのは前回と同じ)

Bluetooth SPP を使ったプログラムのやり方

と、これだけでは、寂しいので、Bluetooth SPP を使ったプログラムのやり方を説明しよう。

$ cd ~/
$ git clone https://github.com/bluekitchen/btstack.git
$ patch -p1 -d btstack < patch.patch
$ cd btstack/port/esp32/
$ ./create_examples.py
<< ここまでは上と同じ >>
$ cd ~/
$ cp -rp btstack/port/esp32/spp_counter ./spp_test

さて、必要なファイルは以下の通り

spp_test
├── Makefile
├── components
│   └── btstack
│   ├── component.mk
│   ├── include
│   │   └── btstack_config.h
│   └── main.c
├── main
│   ├── component.mk
│   └── spp_counter.c <= spp_test.c にファイル名変更
└── sdkconfig

・ spp_test/Makefile に2箇所ある「spp_counter」を「spp_test」に変更
・ spp_test/main/spp_test.c に2箇所ある「spp_counter」を「spp_test」に変更
・ spp_test/components/btstack/component.mkの「BTSTACK_ROOT := ../../../btstack」に

本当は、BTSTACK_ROOTを絶対パスで指定したいのだけど、何故か相対パスでしか動かなかった。絶対パスで設定する方法を知っている人がいたら、教えてください。

後は、make して、書き込むだけ。

$ cd spp_test/
$ make all
$ make flash << ESP-WROOM-32をUSB接続していれば、書き込まれる >>

さて、プログラム本体は、spp_test/main/spp_counter.c で、データを送信している部分は、 rfcomm_send(rfcomm_channel_id, (uint8_t*) lineBuffer, strlen(lineBuffer)); だ。

まあ、想像が付くと思うが、rfcomm_channel_id がSPPドライバ番号で、続いてバッファのポインタと送信バイト数だ。戻り値が「0」なら正常に送信できた事になる。
試してみたら、バッファの中はテキストだけではなく、バイナリーでも問題なく、rfcomm_send() の戻り値が「0」以外のときは、バッファの中身が一切送られていないだけだ。
送る時間間隔を短くし、バンバン連続して送ったら、最大25kバイト/秒で送ることができた。

受信の方は、「case RFCOMM_DATA_PACKET:」あたりらしいのだが、まだ試したことはない。
誰か、確認したら、教えてください。

と言うわけで、ESP-WROOM-32 の Bluetooth Classic SPP接続も使えそうになってきた。
これからが楽しみである。

|

« ESP-WROOM-32のBluetooth Classic SPP接続に成功 | Main | 2 in 1 タブレットPC ECS LIVA TE10EA3 »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack


Listed below are links to weblogs that reference ESP-WROOM-32のBluetooth Classic SPP接続 Windowsも大丈夫!:

« ESP-WROOM-32のBluetooth Classic SPP接続に成功 | Main | 2 in 1 タブレットPC ECS LIVA TE10EA3 »