今さらきけない「ラズパイってなんですか?」
今さらきけない「ラズパイってなんですか?」 第12回 キャラクターディスプレイモジュールって何ですか
ラズパイにはHDMI端子があり、ディスプレイに接続することでプログラミングなどさまざまな作業ができますが、温度や気圧、湿度の測定など、それほど大掛かりなモニタリングが必要ない場合は、「キャラクターディスプレイモジュール」という簡易モニターを使って値を表示できます。
今さらきけない「ラズパイってなんですか?」
第12回 キャラクターディスプレイモジュールって何ですか
第11回 抵抗? コンデンサー? IC? ラズパイで扱う電子パーツについて教えて!
第10回 ラズパイでLチカって何ですか
第9回 ラズパイでWindowsとやり取りするにはどうしたらいいですか
第8回 「Windowsでラズパイを使う」って何ですか
第7回 ラズパイで使う「コマンド」って何ですか
第6回 ターミナルソフトって何ですか
第5回 GPIOって何ですか? 機能や役割は?
第4回 ラズパイを使う準備って何をしたらいいですか
第3回 Raspberry Pi OSって何ですか
第2回 ラズパイってどうしたら使えますか
第1回 ラズパイってなんですか
一覧ページへ
キャラクターディスプレイモジュールとは、ドットマトリックス表示により、任意の文字列を表示させる仕組みで、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に表示させましょう。これには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にはたいていの場合、公開されているモジュールがありますので、それを利用するのが便利です。