ラズパイ3を使って、搭載されたWifiと搭載されたBluetoothを併用してみました。BLEのモジュール(nRF51822)を用意して、iBeconとして定期的にBecon電波を出力させる。Beconには、Major ValueとMinor Valueという領域が存在するので、この領域に任意のデータを入れて電波出力させてみます。
次に、ラズパイ側ではBecon電波を受け取った後、データをクラウドサーバーへWifiにてUPします。これで、ラズパイに搭載されたWifiとBluetoothを併用させることができるわけですが、さてどんなもんでしょう。
同じ2.4Ghz帯域なので、混信する可能性は十分にあります。
Bluetoothの干渉について最初に、ラズパイ3のWifi設定で引っかかるところが出てきます。まず、wpa_supplicant.confファイルに、wifiで接続したい機器の設定をします。
|python|
cat wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP
network={
ssid="hogehoge"
psk="hogepass"
}
||<
次に、/etc/network/interfacesを編集します。
|python|
$ cat /etc/network/interfaces
iface wlan0 inet dhcp
||<
指定したWifi機器が、ポケットWifiなどのモバイル機器だと上手く接続できず、自宅のルーターは接続が上手くいく。DHCPの設定を止めて、固定IPアドレスで接続してみると、モバイル機器でも上手く接続できる。具体的には、/etc/network/interfacesに固定アドレスを設定する。
|python|
$ cat /etc/network/interfaces
iface wlan0 inet static
address 192.168.0.1
netmask 255.255.255.0
gateway 192.168.0.1
||<
上述のアドレスは、適当な番地を記載しています。実際のアドレスは、接続する機器のアドレスを確認して設定する必要があります。固定のIPアドレスを設定して接続をすると、モバイル機器でもWifi接続ができました。
さて、本題はWifiとBluetoothが併用できるのか?という事なので、漸く確認できる環境が整いました。現状ではモバイルwifi経由で、ネットに接続できる事が確認できました。次は、Becon端末のデータをラズパイが受信して、モバイル経由で指定のサーバーへデータ送信できるかどうかです。
Becon電波を出力させて、任意のデータを放出します。ラズパイ側もBluetoothが動作しており受信環境は整っている状態です。しかし、一向にサーバーにはデータが届きません、、、試しにpingコマンドでgoogle.comへ接続確認を行ってみます。
||
ping google.com
||<
きちんと応答が返ってきましたので、ラズパイのWifiはネットにアクセスできる状態である事がわかりました。となると、BLEの通信が上手く行かない可能性が高いと推察できます。ここで、WifiとBluetoothが干渉している可能性をもう少し絞り込みするべく、Wifiを有線接続に変更してみます。これだと、Wifiでネット接続していないので、ラズパイボード上(近辺)での干渉は無いものと考えられます。
先ほど編集したファイル/etc/network/interfacesとwpa_supplicant.confの記述を消去して初期状態に戻します。ラズパイを再起動させて、ラズパイを有線LANでネット接続させます。この状態でBecon端末から電波を出力させてみます。
すると、、、きちんとサーバーへBecon端末のデータが届きました。無線接続と有線接続で、通信結果が変わったことになります。ラズパイボード上には、WifiとBluetoothの石が搭載されており、両者の扱う電波帯は2.4GHzなので、Beconが出力したBluetoothのデータが、Wifiとの干渉によって潰されてしまった可能性が高いと考えています。今回の挙動から見るに、無線接続時においては、Wifiは常時接続できていた様なので、Becon電波に乗せたBluetoothのデータが受信できなくなってしまったのだと思います。より正確に原因を探る為には測定器や実験環境を整える必要があるのですが、簡易的な検証ではこの様な結果となりました。