概要

3GIM HAT(スリージムハット)は、ラズベリーパイ(Zero/Model A+/Model B+/2 Model B/3 Model B)で3GIMを簡単に利用できるようにするための拡張ボードです。
3GIM HATを利用することで、3G回線(FOMAサービス)を使って、簡単にどこからでもインターネットに接続することができます。
ラズベリーパイ Zeroと同サイズであるため、全体を非常にコンパクトなサイズに収容することができます。 3GIM HATの外観(3GIMを装着していない状態)は下記のようになっています。左の画像がボードの表側、右の画像がボードの裏面です。

3GIMを装着した状態では、下記のようになります。

なお、画像は試作品のものであり、基板の色やレイアウト・寸法等は、今後変更となる場合がありますのでご注意ください。

機能概要

3GIM HATは、下記の5つの機能を提供します:

  • 3GIMを使ったインターネット通信機能(USBまたはUART接続)
  • 3GIMの電源のON/OFF制御(GPIO23で制御)
  • 3GIMの電源供給機能(ラズパイの5V入力から3.7Vの電源を供給)
  • 4チャンネル/12bitのADC機能(SPIで制御)
  • HATボード上にLEDを配置(GPIO22で制御)

余分な機能を持たないため、IoTゲートウェイやセンサノードとして簡単に利用することができます。

機能詳細

  • 3GIMを使ったインターネット通信機能

USBまたはUART経由でラズベリーパイと接続することで、インターネット接続を行うことができます。 USB経由の場合は、ラズベリーパイと3GIM HATとをUSBケーブルで接続します。USB 3Gドングルと同様に、Linuxのwvdialコマンドを実行することで、WiFiやLANと同様にインターネットに接続することができます。

UART経由の場合は、3GIMをArduinoで使用する時と同様に、簡易な$コマンド1)を使ってHTTP/HTTPS通信やTCP/IP通信を行うことができます。また、3GIMにGPSアンテナを装着することで、位置情報を取得することもできます。 UART経由で3GIMとラズベリーパイを接続するには、3GIM HATに添付されている2つのジャンパを使用します。また、UARTを使用する場合には、/dev/ttyAMA0を利用するためにシリアルコンソールは利用できなくなります。 ジャンパは、下記の写真のようにボードの長手方向に向かって垂直方向に2つ装着してください。

  • 3GIMの電源のON/OFF制御

3GIMの電源は、GPIO23の信号をLOW/HIGHにすることでON/OFFすることができます(LOWでON、HIGHでOFF)。特にGPIO23を操作しない場合(デフォルト状態)は、通常、3GIMはOFF状態となります。 通信機能を利用する頻度が少ない場合や通信間隔が長い場合には、3GIMを使用しない時にOFFにすることで消費電力を抑えることができます。

  • 3GIMへの電源供給機能

3GIMの電源(VCC)は、ラズベリーパイの5Vピンから提供される電圧を3.7Vに降圧したものが利用されます。降圧には、変換効率の高いDC-DCコンバータを利用しているため、少ない発熱で電力を無駄なく利用することができます。 3GIMを装着した3GIM HATは、最大で600mA程度の電流を消費します。ラズベリーパイ自体の消費電流に加えて、600mAの電流を供給できる安定した電源を利用してください。

  • 4チャンネル/12bitのADC機能

ラズベリーパイにはADCがありません。3GIM HATを利用することで、4チャネル/12bitのADC入力を取り扱うことができます。ADCチップとして、Microchip社の MCP3204 を採用しています。

  • HATボード上にLEDを配置

GPIO22の信号をHIGH/LOWにすることでボード上の緑LEDを点灯/消灯することができます(HIGHで点灯、LOWで消灯)。GPIO22を操作しない場合(デフォルト状態)は、LEDは消灯状態となります。

3GIM HATの使い方

3GIM HATの使い方について説明します。
以下の説明では、ラズベリーパイにはすでにLinux(Raspbian等)が正しく導入されていることを前提とします。

  • 3GIMの電源の制御

3GIMの電源を制御するには、GPIO23ピンをデジタル出力として、LOWを出力することでON、HIGHを出力することでOFFにすることができます。
GPIOを制御するには様々な方法がありますが、ここではシェルから操作する例を説明します。GPIO23ピンをLOW(0)にして3GIMの電源をONにするには、piユーザで下記のコマンドを実行します。

pi@raspberrypi:~ $ sudo echo "23" > /sys/class/gpio/export
pi@raspberrypi:~ $ sudo echo "out" > /sys/class/gpio/gpio23/direction
pi@raspberrypi:~ $ sudo echo "0" > /sys/class/gpio/gpio23/value

同様に、3GIMの電源をOFFにするには下記のコマンドを実行します。

pi@raspberrypi:~ $ sudo echo "1" > /sys/class/gpio/gpio23/value
  • 3GIMを使ったインターネット接続(USB接続の場合)

3GIMのUSBコネクタとラズベリーパイのUSBコネクタをケーブルで接続することにより、USB経由で3GIMを利用することができます。 具体的な利用方法は、3GIM(V2)をラズパイで使用する を参照ください。

  • 3GIMを使ったインターネット接続(UART接続の場合)

3GIM HAT上のピンをジャンパで接続することにより、UART経由で3GIMを利用することができます。 UARTは実際にはLinux上のデバイスファイル“/dev/ttyAMA0”と接続されますので、このデバイスファイルに対してコマンドを書き込んで結果を読み込むことで、すべての$コマンドを実行することができます。

/dev/ttyAMA0“デバイスファイルに対してコマンドを送ったり、レスポンスを受け取ったりするには、例えばminicomコマンド(ターミナルエミュレータ)を使用します。minicomコマンドは、Raspbianには標準で含まれていませんので、別途「sudo apt-get install minicom」を実行してインストールする必要があります。minicom等のターミナルエミュレータを使って3GIMを利用する場合、一つ注意すべき点があります。3GIMがサポートする$コマンドは、コマンドの終了文字としてLF(0x0a)を最後に送る必要があります。しかし、minicomの場合は改行文字として0x0aを設定することができないため、$コマンドに続けてEnterキーを押下しても実行されず、何のレスポンスも返ってきません。このような場合は、Enterキーを押下する代わりに、Ctrl-Jを押下して明示的にLF(0x0a)コードで終端させる必要があります。

  • ADCの使い方

3GIM HATに搭載されているADCチップ(MCP3204)を使って、0~3.3Vの範囲の入力電圧を12bitのデジタル値として読み取ることができます。 MCP3204をラズベリーパイで使用する方法はたくさんありますが、以下ではPythonを使ってCH0の入力電圧を定期的に読み取り、コンソールへ出力するサンプルを示します。下記の内容のファイルを、例えばadc.pyという名前で作成して、このファイルを次のようにroot権限で実行します。

pi@raspberrypi:~ $ sudo ./adc.py 0

“adc.py”の内容:

#!/usr/bin/env python

import time
import sys
import spidev

spi = spidev.SpiDev()
spi.open(0, 1)

def readAdc(channel):
    adc = spi.xfer2([1, (8 + channel) << 4, 0])
    data = ((adc[1] & 7) << 8) + adc[2]
    return data

def convertVolts(data):
    volts = (data * 3.3) / float(1023)
    volts = round(volts,4)
    return volts

if __name__ == '__main__':
    if (len(sys.argv) == 1):
        ch = 0
    else:
        ch = int(sys.argv[1])
    try:
        while True:
            data = readAdc(ch)
            print("adc  : {:8} ".format(data))
            volts = convertVolts(data)
            print("volts: {:8.2f}".format(volts))
            time.sleep(0.5)
    except KeyboardInterrupt:
        spi.close()
        sys.exit(0)

上記のpythonプログラムを実行すると、0.5秒おきにCH0の入力電圧を読み取り、コンソール(標準出力)へ出力します。プログラムを実行する際に指定するパラメータを1~3で指定することで、CH1~3ピンの入力電圧を調べることもできます。

  • LEDの点灯・消灯

3GIMの電源の制御と同様にして、GPIO22ピンを制御することでLEDを点灯・消灯させることがだきます。 GPIO22ピンをHIGHにするとLEDは点灯し、LOWにするとLEDは消灯します。GPIO22に対して特に操作を行わないデフォルト状態では、LEDは消灯しています。

LEDを点灯させる

pi@raspberrypi:~ $ sudo echo "22" > /sys/class/gpio/export
pi@raspberrypi:~ $ sudo echo "out" > /sys/class/gpio/gpio22/direction
pi@raspberrypi:~ $ sudo echo "1" > /sys/class/gpio/gpio22/value

LEDを消灯させる

pi@raspberrypi:~ $ sudo echo "0" > /sys/class/gpio/gpio22/value


ダウンロード・技術情報

  • 3GIM HAT(V1)の回路図

  • ラズベリーパイ入門のお勧めの本

   「実例で学ぶRaspberry Pi電子工作」、ブルーバックス出版部、金丸隆志著
→ Pythonを使ったプログラミングが電子工作例としてしっかり学べる良書です。おススメ。

作例紹介


1. 温度を定期的に計測してクラウドサービスにアップして可視化する


ラズパイ+3GIM HAT+3GIM+アナログ温度センサ(LM61CIZ)で、温度を30秒おきにクラウドサービスM2XにアップロードするIoTサービスを作ってみました。いうなれば、「IoTのLチカ」みたいなモノです。
M2Xは米AT&Tが提供しているIoT向けクラウドサービスで、使いやすく豊富な機能が特長です。 簡単な登録を行うだけで、若干の制約があるものの、10デバイス分の無料利用枠を試用できます。 また、ラズパイでよく利用されるPythonのライブラリなども提供されており、簡単に利用することができます。

  • まず、M2Xのサイト にアクセスして、ユーザ登録を行います。
  • ユーザ登録が完了したら、右上のメニューから「Account settings」ページを開いて、「PRIMARY API KEY」の文字列をコピーします。
  • この「PRIMARY API KEY」を、下記のPythonスクリプト”upM2X.py“の中の<Primary Api Key>の位置にペーストします。
import os
import time
import sys
import spidev

from m2x.client import M2XClient

spi = spidev.SpiDev()
spi.open(0, 1)

def readAdc(channel):
        adc = spi.xfer2([1, (8 + channel) << 4, 0])
        data = ((adc[1] & 7) << 8) + adc[2]
        return data

def convertMVolts(data):
        volts = (data * 3300) / float(1023)
        return volts

def getTemperature():
        return (convertMVolts(readAdc(3)) - 600.0) / 10.0

client = M2XClient(key='<Primary Api Key>')

device = client.create_device(
        name='Room Temperature',
        description='Store current temperature every 30 seconds',
        visibility='public'
)

stream = device.create_stream('temperature')

try:
        while True:
                t = getTemperature()
                print("t  : {:4} ".format(t))
                stream.add_value(t)
                time.sleep(27)

except KeyboardInterrupt:
        spi.close()
        sys.exit(0)

※このスクリプトは起動するたびに一つのデバイスをM2Xサービスに登録します。そのため何度も実行すると多数のデバイスができてしますので、そのような時にはM2XのDevices画面で余計なデバイスを削除してください。

  • 次にハードウェアを組み立てます。

 用意するものは、下記の通りです:

  • ラスベリーパイ Zero/A+/B+/2 B/3 B のいずれか一つ
  • 3GIM HAT 1個
  • 3GIM(V2/V2.1) 1個(3Gフレキアンテナ、利用できるマイクロSIMカード)
  • アナログ温度センサ LM61CIZ 1個
  • HDMIのディスプレイ
  • USBキーボード、USBマウス

 写真にある通り、3GIM HATのアナログ入力コネクタに、3本足の温度センサを差し込みます。


 また、3GIM(V2)を3GIM HATに装着して、USBケーブルでラズパイと接続しておきます。

  • 3GIMを使ってインターネット接続を行います。

 接続方法・手順は、3GIM(V2)をラズパイで使用する を参考にしてください。また3GIMの電源は、上記の「3GIM HATの使い方」にある方法でONにしておいてください。

  • Pythonスクリプト”upM2X.py“を動かします。

 インターネット接続している状態で、root権限でupM2X.pyを動かします。

sudo python ./upM2X.py
  • アップロードした温度データを折れ線グラフで見てみる。

 M2Xサイトでログインして、Devices画面で、「Room Temperature」デバイスを選択すると、  「temperature」というStreamで温度の折れ線グラフを見ることができます。



お買い求め

ご購入はこちらから 3GIM HATの販売ページ(Amazon.co.jp)

1) 詳細は3GIM(V2/V2.1)のマニュアルを参照のこと。