新しいものづくりがわかるメディア

RSS


今さらきけない「ラズパイってなんですか?」

今さらきけない「ラズパイってなんですか?」 第12回 キャラクターディスプレイモジュールって何ですか

ラズパイにはHDMI端子があり、ディスプレイに接続することでプログラミングなどさまざまな作業ができますが、温度や気圧、湿度の測定など、それほど大掛かりなモニタリングが必要ない場合は、「キャラクターディスプレイモジュール」という簡易モニターを使って値を表示できます。

キャラクターディスプレイモジュールとは、ドットマトリックス表示により、任意の文字列を表示させる仕組みで、8文字×2行や16文字×2行、20文字×2行など、決められた文字数の中で値を表示できます。イメージとしては電卓や液晶時計に近いでしょうか。

このキャラクターディスプレイモジュールにラズパイの値を表示させる仕組みとしてよく使われるのが「I2C」です。I2Cとは「アイ スクエアド シー」と読み、2本の信号線でデータをやりとりする仕組みです。2本の信号線は、シリアルデータ(SDA)とシリアルクロック(SCL)で構成されますが、電圧は最高で5Vまでとなっており、比較的使用される頻度が高いのは3.3Vとなっています。ここで気付いた方もいるかもしれませんが、ラズパイに用意されている電圧は3.3Vと5Vです。つまり、I2Cはラズパイで扱いやすい通信方式なのです。

ラズパイのGPIOには、このSDAとSCLが指定されています。3番ピン(GPIO2)がSDA、5番ピン(GPIO3)がSCLです。これに3.3Vの電源とGNDを接続すると、ラズパイからコントロールできるようになります。なおI2Cはデイジーチェーンという、複数のデバイスを数珠つなぎに接続して使えます。それぞれSCLとSDAの端子をつないでいけば、複数のデバイスをコントロールできます。

では実際に表示させてみましょう。ただ文字を表示させるだけでは面白くありませんので、秋月電子通商から発売されている「BME280使用 温湿度・気圧センサモジュールキット+I2Cバス用双方向電圧レベル変換モジュール(FXMA2102)セット」(以下、温湿度/気圧センサー)を利用して、温度と湿度、気圧を表示させます。利用するキャラクターディスプレイモジュールは、有機EL(OLED)を使って表示させる「有機ELキャラクタディスプレイモジュール 16×2行 白色」(以下、OLED)を使います。

温湿度/気圧センサーは正面から見て一番左側よりVDD(3.3Vを接続)、GND、未使用、SDA、未使用、SCLとなっています。ディスプレイモジュールは正面より見て一番左からGND、VCC(3.3V)、VDD接続、4~6番ピンまで未使用、SCL、SDA、SDAに接続、という形でつなぎます。

ラズパイと温湿度/気圧センサー、OLEDを接続した状態 ラズパイと温湿度/気圧センサー、OLEDを接続した状態
温湿度/気圧センサー。ピンの割り当ては左から①VDD(3.3Vを接続)、②GND、③未使用、④SDA、⑤未使用、⑥SCL 温湿度/気圧センサー。ピンの割り当ては左から①VDD(3.3Vを接続)、②GND、③未使用、④SDA、⑤未使用、⑥SCL
OLED。ピンの割り当ては左から①GND、②VDD(3.3V)、③GNDとジャンパーで接続、④~⑥番ピンまで未使用、⑦SCL、⑧SDA、⑨SDAとジャンパーで接続 OLED。ピンの割り当ては左から①GND、②VDD(3.3V)、③GNDとジャンパーで接続、④~⑥番ピンまで未使用、⑦SCL、⑧SDA、⑨SDAとジャンパーで接続

続いては測定データをOLEDに表示させましょう。これにはPythonのプログラムを利用します。なおその前の準備として、ラズパイにターミナルソフトからアクセスし、モジュールなどを組み込みます。以下のコマンドを実行してください。ターミナルソフトについては第6回を参考にしてください。

$ sudo pip install RPi.bme280

これは温湿度/気圧センサーに使われている「BME280」というセンサーを利用するためのモジュールです。続いてOLEDを利用するためのモジュールを組み込みます。

$ mkdir programs
$ cd programs
$ git clone https://github.com/YoutechA320U/RaspberryPi_Python_so1602_lib
$ cd RaspberryPi_Python_so1602_lib
$ cp so1602.py /home/pi/programs

これで「/home/pi/programs」以下にOLEDを利用するモジュールが組み込まれました。これらを踏まえて、以下のPythonプログラムを「/home/pi/programs」に格納します。プログラムはWindows上の「VisualStudio Code」などで記述し、「WinSCP」のようなファイル転送ソフトを使うのが便利です。このあたりは第8回を参考にしてください。

ラズパイに転送するプログラムの内容は以下の通りです。転送先は「/home/pi/programs」です。保存するファイル名は「sokutei.py」としましょう。

#!usr/bin/env python
# -*- coding: utf-8 -*-

import smbus2
import time
import bme280
import so1602

#パラメーターの設定
port = 1
address = 0x76
bus = smbus2.SMBus(port)
I2C_BUS_NUM = 1
i2c = bus
data = 0x40
address2 = 0x3e
command = 0x00
bme280.load_calibration_params(bus, address)
calibration_params = bme280.load_calibration_params(bus, address)
data = bme280.sample(bus, address, calibration_params)
so1602.setaddr(0x3c)

# OLED初期化
so1602.command(0x0c)
so1602.command(0x01)

# 気温と湿度、圧力のデータ
temp = str(round(data.temperature, 1))
hum = str(round(data.humidity, 1))
press = str(round(data.pressure, 1))

# OLED表示
so1602.command(0x80)
so1602.write("T=" + temp + "C")
so1602.command(0x89)
so1602.write("H=" + hum + "%")
so1602.command(0xa0)
so1602.write("P=" + press + "hPa")
print ("Temperature : %s C" % temp)
print ("Humidity    : %s %%" % hum)
print ("Pressure    : %s hPa" % press)

ラズパイにプログラムを転送したら、以下のコマンドを実行しましょう。

$ python /home/pi/programs/sokutei.py

いかがでしょうか。ターミナルソフトに温度と湿度、気圧が表示されると共に、最初に挙げた写真のように、OLEDにその値が表示されます。

OLEDやLCDモジュールで文字を表示させるのは結構大変で、使いたいディスプレイに利用できるモジュールがあるかないかが、かなり重要になります。ただしメジャーどころのLCDモジュールやOLEDにはたいていの場合、公開されているモジュールがありますので、それを利用するのが便利です。

ニュース

編集部のおすすめ

連載・シリーズ

注目のキーワード

もっと見る