raspi_and_3g

ラズベリーパイで3Gシールドを使ってみました


ラズベリーパイで3Gシールドを使ってみましたので報告します。

  • 試してみたこと
ラズベリーパイに、温度センサと3Gシールドを接続して、温度の計測結果を定期的にIoTクラウドサービスxively.comへアップロードしました:

xivelySample.png

なお今回の実験では、Linux OSとして最新のraspbian(2014-01-07リリース)を使いました。バージョンによって、設定手順などが異なる場合がありますので、ご注意ください。

  Downloads

また、今回の実験では、ドライバやツール等をダウンロードしたり、更新する必要があります。そのため、設定する間だけはラズベリーパイ自体がインターネットに接続できる環境が必要です(有線またはWiFi)。

  • 補足
ラズベリーパイでは、Linuxが動作します。
Linuxでは、Arduinoとは異なり、ちゃんとしたTCP/IP等のプロトコルスタックが実装されています。このプロトコルスタックで使用できる3G通信モジュール(例えば、3G通信用のUSBドングルやWiFi用のUSBドングル等)を使ってインターネットに接続すると、Linux上の豊富な機能やコマンドが利用できます。

しかし、今回の3Gシールドとの接続では、UART(シリアル)を介して部分的にインターネットに接続する方法と取りました。そのため、インターネットに接続できると言っても、利用できる機能はかなり限定的ですのでご注意ください。(今回の実装方法で出来ることと言えば、指定したサーバへデータをPOSTする程度です)

  • 使用した温度センサ
ラズベリーパイは、ADCを持っていません。そこで、秋月電子で販売されているI2Cインタフェースの温度センサを使用しました。

  ADT7410

なお、ラズベリーパイのI2Cピン(SDA/SCL)は、既に1kオームの抵抗でプルアップされていますので、外部でプルアップする必要はありません。
(DHT22等の定番の温湿度センサは、特殊な1-Wireインタフェースで、タイミングにシビアな読み取り処理が必要ですので、ラズベリーパイのようなLinuxでは制御が難しいです。SPIやI2Cのインタフェースで接続するセンサを採用するのが無難です)

  • ラズベリーパイと3Gシールドをつなぐ
ラズベリーパイの26ピンコネクタを、Arduinoのピンに適当にマッピングするシールド?を作成しました。
UNOに準じて、下記のマッピングとしました。ただし、3GシールドはD4/D5をシリアルポートとして扱うので、トグルSWにてRX0/TX0をD0/D1またはD4/D5に切替できるようにしています。

Arduino Raspi 役割
D0 GPIO15 RX0
D1 GPIO14 TX0
D2 GPIO04  
D3 GPIO21  
D4 - (RX0)
D5 - (TX0)
D6 GPIO24  
D7 GPIO25  
D8 GPIO107  
D9 GPIO108  
D10 GPIO08 /CE0
D11 GPIO09 MISO
D12 GPIO10 MOSI
D13 GPIO11 SCLK
A0 -  
A1 -  
A2 -  
A3 -  
A4 GPIO00 SDA
A5 GPIO01 SCL
3V3 3V3 電源
5V 5V 電源
GND GND グラウンド

上記のマッピングとした場合、ラズベリーパイと3Gシールドは下記のように接続します:

Raspi 3Gシールド 説明
D4 D4 UART(RX)
D5 D5 UART(TX)
D6 D6 電源制御
D7 D7 電源制御
3V3 3V3  
GND GND  
- VIN ACアダプタ等で5~12V/1A以上を供給する

  • 3Gシールドに温度センサ(ADT7410)をつなぐ
秋月電子で販売されているADT7410モジュールを使う場合は、すべての半田ジャンパは開放(何もしない)のままで、下記の4ピンをジャンパ線等で3Gシールドに接続します:

ADT7410 3Gシールド 補足
VDD 3V3  
GND GND  
SDA A4  
SCL A5  

ミニブレッドボード等に温度センサモジュールを差して、そこからジャンパ線で3Gシールドのソケットに接続すると楽です。

  • ラズベリーパイでI2Cを使えるようにする
下記の操作を、rootユーザにて行ってください。

    • blacklistからi2cを外す
下記のファイルにある「i2c-bcm2708」の行をコメントアウト(行の先頭に「#」文字を挿入)する。
  /etc/modprobe.d/raspi-blacklist.conf

    • ロードモジュールにi2c-devを追加する
下記のファイルに、「i2c-dev」と記載した行を追加する。
  /etc/modules

    • i2c-toolsをダウンロードしてインストールする
下記のコマンドでI2Cの利用で便利なツールをインストールする。
  apt-get install i2c-tools

    • 再起動する
ラズベリーパイを再起動します。

    • 正しくドライバモジュールインストールできたかを確認する
rootユーザになって、lsmodコマンドで「i2c_dev」および「i2c_bcm2708」の2つが組み込まれていることを確認する。
また、2つのファイル「/dev/i2c-0」および「/dev/i2c-1」が作成されていることを確認する。

以上で、I2Cを使う準備は終わりです。

  • ラズベリーパイでUARTを使えるようにする
    • gettyをコメントアウトする
ファイル「/etc/inittab」にある下記の行の先頭に「#」文字を挿入して、コメントアウトする。

TO:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

    • 再起動する

以上で、UART0を使う準備は終わりです。

  • GPIO、I2C、UARTを簡単に使える関数を作る
GPIO(デジタル入出力)、I2C、UARTを簡単に使える関数群を定義してみました。main()関数を含むソースsample3g.cを含む、ソースファイル群をZIPで固めて下記に置きましたので、どうぞ自由に使ってください。

  sample3g.zip

各関数の使い方は、sample3g.cで定義しているmain()関数を参照ください。

  • 3Gシールドに命令を送る
今回の実験では、3Gシールドに対して、HTTP/POSTを発行する機能だけを使っています。
使い方は、sample3g.cのpostTemp()関数を参照してみてください。

postTemp()関数にある通り、3Gシールドは、UARTでコマンドを送出することで制御できます。その実行結果は、UARTからのレスポンスで受け取ることができます。
ただし、基本的にテキストデータとしてマイコン(今回はラズパイ)と3Gシールドはシリアル通信していますので、改行文字等の制御文字を送る時は、特殊な記法(例えば、$nなど)を使う必要があります。C言語では通常、\n等で表記しますが、3Gシールドでは円文字(\)の代わりにドル文字($)を使います。また、一度に送ることができるコマンド文字列は1KB以内となっています。

  • 最後に
本ページの記事を作成するに当たり、下記の書籍を参考としました。
いろいろと為になることが記載されていますので、興味のある方はぜひ購入されて読んでみてください。

 「お手軽ARMコンピュータ ラズベリーパイでI/O」、CQ出版社


  • 最終更新:2014-03-01 23:05:04

このWIKIを編集するにはパスワード入力が必要です

認証パスワード