UARTをBLEで飛ばすモジュール
C C++ Other
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
doc
firmware
pcb
.gitignore
LICENSE
README.md

README.md

概要

B-ARTはXbee ZigBeeモジュールみたいにUARTを無線で飛ばすモジュールです。 マイコンのプログラムを追加で書くことなく、UARTのTXとRXだけをつなげるだけでUARTを無線化できます。 無線部分はBLE(Bluetooth Low Energy)で実装をしています。

非常に小さいことが特徴で、開発中の基板に挿して簡単に使える無線モジュールをコンセプトに開発をしています。 (現状、秋月で買えるどの無線モジュールよりも小さいはず)

B-ARTにはType-PとType-Uの2種類があり、Type-Pはピンヘッダ、Type-UはUSBコネクタがついています。 Type-Pには4pinのピンヘッダが付いていて、3.3V-GND-TX-RX の4本を接続するだけで使うことができます。 Type-UにはPCに直接挿せるUSBコネクタと、FTDIのUSB-UART変換IC(FT234XD)が載っています。 FT234XDのおかげでPCにさすとシリアルポートとして認識されるので、 普段シリアルポートを使うときと全く変わることなく使うことができます。

B-ARTの裏面にはType-P、Type-UともにDIPスイッチがあり、そこからIDを設定できます。 IDが同じ相手を選択して通信をするので、同じ環境にB-ARTが何組もあってもIDさえ違えば混線が起きないようになっています。

使用例

例えば小さい走行ロボットを無線を使ってデバッグする時にB-ARTは役立つでしょう。 走行をさせるときに有線だと線が邪魔になり、Xbeeなどはモジュールが大きすぎて載せられないという状況です。

下の写真は現在制作中のマイクロマウスの機体MIZUHOv2に B-ART TypePを挿しているところです。

B-ARTは非常に小さく軽いので、マイクロマウスの機体に乗せても走行時にそれほど問題にはなりません。 基板に4pinのコネクタさえつけておけばほしい時にだけB-ARTを挿して使うことができます。

使い方

DIPスイッチの設定

B-ARTのType-PとType-Uの基板の裏にはDIPスイッチが4bit分あり、 1bitはクライアント動作をするかサーバー動作をするか、3bitはIDを意味していています。

DIPスイッチ 意味
1 0:client動作 1:server動作
2 ID bit2
3 ID bit1
4 ID bit0

B-ARTは通信においてはType-PであるかType-Uであるかは関係なく、 同じIDを持つサーバーとクライアントが1対1で通信できるという仕組みになっています。 なので、同じIDを持っていさえすれば、

  • TypeU <-> TypeU
  • TypeP <-> TypeP
  • TypeU <-> TypeP

の全ての組み合わせで通信が可能です。

TypePのセットアップ

4pinのピンヘッダ(というよりスルーホール)があり、それぞれのpinは次のような意味を持っています。

B-ARTは最大30mAくらいの電流を必要とするので、それに耐えられるような電源につないでください。

電源・IOの電圧は3.3Vであることに注意してください

TypeUのセットアップ

パソコンのUSBに挿すだけです。

電源を入れる

電源を入れると クライアント動作に設定されているB-ARTは赤色LEDが、 サーバー動作に設定されているB-ARTは緑色のLEDが光ります。

サーバーとクライアントの接続

サーバー側とクライアント側に同じIDを持たせた状態で電源を入れると自動的に接続されます。 接続された瞬間にB-ARTに乗っている緑と赤の両方のLEDが一瞬点滅します。

一旦切断されても、接続可能な状態になると自動で接続されます。

データを送受信する

UARTにデータを流すとサーバー側、クライアント側どちらからでももう片方に送信されます。 その際にLEDが点滅するので、LEDを見ることで正常に動作しているかが分かります。

UARTの通信仕様

以下の設定でのみ動作します。

|--------------|-----------| | Baudrate | 115200bps | | Data size | 8bit | | Start bit | 1bit | | Stop bit | 1bit | | Parity | なし | | Flow control | なし | | 信号レベル | 3.3V |

※UART側からデータを連続して送り続けると、データが欠損する可能性があります。 確実に連続して送信できるのは70byteくらいです。 それ以上のデータが連続する場合は、70byteくらいごとに間隔をあけてください。

基板

TypeP

回路図

アートワーク

TypeU

USB周りの回路図

マイコン周りの回路図

アートワーク

ファームウェア

最新のファームウェアのバイナリ

最新のビルドされたバイナリはbinディレクトリに入っています。

開発環境

Eclipseのプロジェクトごとリポジトリにあげてあるので、 きっとEclipseにimportするだけで動かすことができます。

動作

起動時にDIPスイッチの状態を読み取って(main.c)、サーバー動作(main_server.c)をするか、 クライアント動作(main_client.c)をするかを決定しています。

BLEの操作はNordicのサンプルにある、NUSを参考にしています。 SDKにあるble_nusとble_nus_cをもとにble_bartsとble_barts_cを書いています。(名前を変えただけ)

サーバー動作

GATTサーバーとして、次のようなサービスを立てます。

AttributeType Name Permissions UUID
Service BART Service Read 20yy0001-DA04-4C71-ADBE-6CA269E7E983
Characteristic TX Write 20yy0002-DA04-4C71-ADBE-6CA269E7E983
Characteristic RX Notify 20yy0003-DA04-4C71-ADBE-6CA269E7E983

TXにwriteするとUARTからデータが出力され、 UARTにデータが入るとRXをsubscribeしているデバイスにNotifyします。

UUIDのyyはID(3bit)を16進数に変換したものが入ります。

クライアント動作

自分と同じIDをもつサーバーを探します。 このとき、サーバーのもつServiceのUUID(上の表のyy)をもとに同じIDのものを検索します。

同じIDのサーバーが見つかったらConnectし、RXのCharactericics(notify)をsubscribeします。

後はUARTからデータが来たらサーバーのRXにwriteをし、サーバーからnotifyが来たらUARTにデータを流します。