Posted at

RaspberryPizeroでbluetoothシリアル通信をする方法

More than 1 year has passed since last update.


RaspberryPiとAndroidスマホをBluetoothで通信させたい


  • RaspberryPizeroがある

  • 小さいからスマホと無線で連携させたい

  • wifiはアクセスポイントが必要&スマホはインターネットにつなぎたい


RaspberryPizeroの紹介


  • 小型パソコンと言われるRaspberryPiのさらに小型版

  • 小さいけどLinuxが動作可能

  • バージョンが上がってRaspberryPi用のカメラを接続できるようになった(要zero用カメラケーブル)


Bluetoothでシリアル通信


  • Bluetoothの通信方法の一つ(詳しい説明は割愛)

  • Androidのサンプルアプリの一部を修正するだけで通信できる(簡単)


作ったもの,作り方


RaspberryPizero編


  • 初期設定はRaspberryPizeroの設定が必要なため,直接かssh接続できるようにしとく

  • BluetoothのUSBドングルが必要

  • OSはRaspbian

  • Bluetoothライブラリの導入

sudo apt-get install bluez

sudo apt-get install bluetooth blueman bluez-tool



  • Bluetoothのペアリング


    • ペアリングするデバイス(今回はAndroid)を検索可能状態にしておく

    sudo bluetoothctl -a
    
    scan on //ペアリング対象のアドレスを確認
    scan off
    pair <ペアリング対象のアドレス>
    trust <ペアリング対象のアドレス> //次回起動時に自動接続



  • BluetoothのSPP(シリアル通信)設定


    • /etc/systemd/system/dbus-org.bluez.serviceに以下の記述を追加(設定後再起動した方が良い)

    ExecStart=/usr/lib/bluetooth/bluetotthd -C
    
    ExecStartPost=/usr/bin/sdptool add SP



  • Bluetoothのシリアル接続をC言語から利用する


    • ライブラリ導入

    sudo apt-get install libbluetooth-dev
    

    gcc <.cファイル> -o <出力ファイル> -lbluetooth
    


    • 出力されたファイルを実行することでBluetoothサーバーとしてペアリングしたデバイスからの接続を待つ状態になる




Androidアプリ編


  • AndroidStudioを利用

  • 起動時にImport an Android code sampleからBluetooth Chatを選択してプロジェクトを作成


  • コードの修正


    • サンプルプロジェクトをBlueotthのシリアル通信に対応させます

    • BluetoothChatService.javaの50,51行目を以下のように変更(シリアル通信用にUUIDを変更)

    private static final UUID MY_UUID_SECURE =
    
    UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");


    • デバッグなどでRaspberryPizeroとペアリングしたAndroidデバイスにインストール




接続


  • RaspberryPizeroで作成したrfcomm-serverプログラムを起動

  • AndroidにインストールしたBluetotth Chatアプリを起動

  • AndroidアプリのConnect a device - secureまたはBluetoothのマークからペアリングしたRaspberryPizeroを選択

  • テキストボックスに文字を入力してsendを押す

  • 入力文字と同じ文字が帰ってきたらシリアル通信成功!

Screenshot_2016-10-09-17-50-02.png


今後の課題


  • 初期のペアリング設定にsshか直接入力が必要なためもっと簡単にペアリングしたい

  • 複数デバイスからの接続や別のBluetoothプロトコル通信と併用して何か作りたい