GithubHelp home page GithubHelp logo

jp-yaegashi / b-art Goto Github PK

View Code? Open in Web Editor NEW

This project forked from idt12312/b-art

0.0 0.0 0.0 1.67 MB

UARTをBLEで飛ばすモジュール

License: MIT License

C 98.33% C++ 1.25% Assembly 0.42%

b-art's Introduction

概要

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にデータを流します。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.