Table of Contents
はじめに
どうもumiushiです。
ようやく触ることができたので(エレパでも取り扱ってる商品なのに…)、かねてより気になっていた Raspberry Pi をつかっていろいろ遊んで見たいと思う。
ただこのままではかなり扱いづらいため(下記写真を見てもらえればわかるが、センサ類は全くついてない)、IoT 学習ハットなるものを使って楽させてもらう。

なお今回は Raspbian をすでにインストールしているので、インストール方法はここでは紹介しない。
必要な場合はこのあたりが参考になるので辿って調べてほしい。
(基本的にはイメージファイルをダウンロードして、dd コマンドなどで書き込む形になるはず)
IoT 学習ハット?
高知工業高等専門学校の今井教授らが開発した、Raspberry Pi Zero W を使ってIoTに関するアレコレを簡単に学ぶことができるようになるキット。
よく使うであろうセンサ類や、表示に使えるLCDなどがあらかじめはんだ付けされてるため、とても手軽に Raspberry Pi Zero W を触ることができる。
Raspberry Pi の GPIO を塞がないので、ハットをつけた状態でも追加でセンサ類を接続できるのも特徴。

エレパで売ってることを知ってる人はどれくらいいるんだろうか?
光らせてみる
とりあえず最初なので光らせてみることにする。
なお操作は Python2 で行う。Python3 ではないので注意。
LED を光らせるためのコードを下記に示す。
# -*- coding: utf-8 -*- import RPi.GPIO as GPIO import time import random GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) P_RED = 17 # 赤色LEDのピン番号 GPIO.setup(P_RED, GPIO.OUT) GPIO.output(P_RED, True) time.sleep(1) GPIO.output(P_RED, False) GPIO.cleanup()
特に難しい部分はなく、LED のようにオン・オフの二値で表されるものは、単純に GPIO.output で操作してやると動作する。

ま、こんなものだろう。

音を鳴らす
IoT 学習ハットにはスピーカーが接続されているので、これも鳴らしてみる。
このスピーカーは、交流波形の電流を流すことで音を鳴らすことができ、周波数を変更することもできる。
コードは次のようにした。
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
# C3からC4までの周波数
tones = [261.626, 293.665, 329.628, 349.228, 391.995, 440.0, 493.883, 523.251]
P_BUZZER = 23  # ブザーのピン番号
GPIO.setup(P_BUZZER, GPIO.OUT)
try:
    for tone in tones:
        p = GPIO.PWM(P_BUZZER, tone)
        p.start(50)
        time.sleep(0.1)
        p.stop()
except KeyboardInterrupt:
    GPIO.cleanup()
GPIO.cleanup()
ブザーに関しては画像を掲載しても重たいので省略する。
うまくいくと、ものすごい勢いでドから高いドまで駆け上る感じに聞こえるはず。
LCD に表示する
IoT 学習ハットで一番目立つのはこの液晶ディスプレイだろう。
なんとこれに文字やら数字やらを表示させることができるというから驚きだ。
このディスプレイ(AQM0802A-RN-GBW)は I2C で通信するので、それ用のライブラリを用意する。
とりあえず次のように作ってみた(色んなサイトにあったI2C通信のサンプルと、データシートを参考にした)。
import smbus
import time
class Display:
    def __init__(self, i2cbus=1, addr=0x3e):
        self.i2c = smbus.SMBus(i2cbus)
        self.addr = addr
        self.i2c.write_byte_data(self.addr, 0, 0x38)
        self.i2c.write_byte_data(self.addr, 0, 0x39)
        self.i2c.write_byte_data(self.addr, 0, 0x14)
        self.i2c.write_byte_data(self.addr, 0, 0x7e)
        self.i2c.write_byte_data(self.addr, 0, 0x55)
        self.i2c.write_byte_data(self.addr, 0, 0x6c)
        time.sleep(0.2)
        self.i2c.write_byte_data(self.addr, 0, 0x0d) # カーソル付きでセット
        self.clear()
    def clear(self):
        self.i2c.write_byte_data(self.addr, 0, 0x01)
        time.sleep(0.002)
    def display(self, msg):
        self.i2c.write_i2c_block_data(self.addr, 0x40, map(ord, msg) )
    def pos(self, row, col):
        self.i2c.write_byte_data(self.addr, 0, 0x80 | (0x40 if row > 0 else 0) | col)
このライブラリを使って、次のように記述することで表示できる。
# -*- coding: utf-8 -*-
from Display import Display
import time
disp = Display()
disp.clear()
disp.display('Hello')
disp.pos(1,0)
disp.display(' World!')
time.sleep(1)
disp.clear()

これで取得したデータを表示できるようになった。
終わりに
Raspberry Pi でできることを IoT 学習ハットを使うことで簡単に遊ぶ学ぶことができた。
Raspberry Pi や IoT 学習ハットはエレパでも取り扱っているので、興味のある人は問い合わせてほしい(宣伝)。
なおこの Raspberry Pi に関する話はもしかしたら次回に続くかもしれないので、期待せずに待っていてほしい。
ちょっとタイムリーな話題として、12月15日(土)より高知市のオーテピアにある高知みらい科学館にて、サイエンスクラブ「高知IoTクラブ」というものが開催されるらしい(全6回)。
https://otepia.kochi.jp/science/event.cgi?id=20181117085341dy2lqy
今回取り上げたIoT学習ハットを使用するみたいなので、興味のある中学生(申し込み対象は中学生なので注意)がいたら参加して体験してほしい。