« 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

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/94422/65382687

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 »