ESP32が2Fのモジュールを1Fで受信できなかったので、PIC32MX+USBドングル(CSR)でbtstackを使って実装しなおしてみました。
ESP32は-80dBmより低くなると受信できないようです。
btstackはgoogle codeにあったころの昔のものです。
とりあえずgattのコードをベースにアドバタイズをダンプするプログラムを作ってみました。
* adv. event: evt-type 0, addr-type 1, addr XX:XX:XX:31:34:D8,
rssi -90, length adv 18, data: 02 01 06 0E FF 69 09 D8 34 31 XX XX XX 90 03 04 9B 42
* adv. event: evt-type 4, addr-type 1, addr XX:XX:XX:31:34:D8,
rssi -88, length adv 10, data: 09 16 3D FD 54 00 E4 04 9B 42
アドレスのダンプが逆になっています。
二つのイベントがあり、最初の方だけ飛んでくることもあります。
二つ目の方にはバッテリーの情報が含まれますが、一つ目は温度と湿度の情報だけが入っています。
10年位前にPIC32MXにポートしてあったancsのコードをいじって作ってみました。
二つ目のバッテリーの情報を取っておいて、一つ目のイベントでシリアル出力するようにしました。フォーマットはESP32のものと一緒にしました。
アドバタイズを受け取るとシリアル出力して、一時間に200回くらい受け取れてます。
実は当初USBドングルを3.3Vで動かしていたら、あまり調子が良くなく、5Vにしたら元気になりました。
btstackはgithubに引っ越してメンテされているようです。
古いコードを使っているので、ソースは公開しません。
一時間ごとのアドバタイズの受信回数を集計してみました。最後のフィールドが回数です。
2024-09-28|00:00:00|26.36|73.82|100.0|185.0
2024-09-28|01:00:00|27.76|69.92|100.0|197.0
2024-09-28|02:00:00|28.62|66.72|100.0|180.0
2024-09-28|03:00:00|29.11|64.55|100.0|190.0
2024-09-28|04:00:00|29.36|64.0|100.0|169.0
2024-09-28|05:00:00|29.19|62.05|100.0|179.0
2024-09-28|06:00:00|28.79|61.94|100.0|189.0
2024-09-28|07:00:00|28.21|62.47|100.0|200.0
2024-09-28|08:00:00|27.47|63.45|100.0|177.0
2024-09-28|09:00:00|26.79|65.0|100.0|170.0
2024-09-28|10:00:00|26.2|65.85|100.0|174.0
2024-09-28|11:00:00|25.72|66.6|100.0|175.0
2024-09-28|12:00:00|25.35|67.48|100.0|182.0
2024-09-28|13:00:00|25.08|68.3|100.0|181.0
2024-09-28|14:00:00|24.86|69.72|100.0|181.0
2024-09-28|15:00:00|24.65|70.8|100.0|177.0
2024-09-28|16:00:00|24.43|71.94|100.0|178.0
2024-09-28|17:00:00|24.22|72.0|100.0|173.0
2024-09-28|18:00:00|24.0|72.0|100.0|176.0
2024-09-28|19:00:00|23.84|72.03|100.0|173.0
2024-09-28|20:00:00|23.69|73.0|100.0|166.0
2024-09-28|21:00:00|23.61|73.69|100.0|172.0
2024-09-28|22:00:00|23.88|74.0|100.0|162.0
2024-09-28|23:00:00|24.14|73.33|100.0|166.0
ちょっとアンテナの位置を変えただけで、受信状態が大きく変化するようです。また時間ごとの変動もかなり大きいです。ビーコンなので瞬時に評価できないので、難しいです。