名刺サイズの超小型PC「ラズパイ」で遊ぶ(第3回)
ラズパイで作る「気温・湿度・気圧センサー」 有機ELディスプレイを取り付け(2/2 ページ)
取り付けたら正常に認識しているか、「i2cdetect」コマンドで確かめましょう。
$ i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- 76 --
上記のように、「0x3c(SO1602)」「0x76(BME280)」が表示されていれば大丈夫です。表示されない場合は配線を見直してください。
気象データを測定する
早速、気象データを測定してみましょう。前回で使ったPythonのプログラムを使ってもいいのですが、BM280を使えるモジュールがあるので、今回はこちらを使います。また、SO1602についてもGitHubにモジュールが公開されているのでこれも使います。
事前の準備として、それぞれのモジュールをインストールします。以下のコマンドを入力します。
$ sudo pip install RPi.bme280
$ sudo pip install smbus2
これでBME280がモジュールから使えるようになりました。次はSO1602です。以下のように、その他のプログラムと一緒に「programs」というディレクトリを作ってそこに格納します。
$ 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
これでprogramsディレクトリにso1602.pyをコピーできました。so1602用モジュールですが、Pythonのプログラム内に以下のように記できます。
import so1602 #モジュールをインポート
so1602.setaddr(0x3c) #スレーブアドレスを0x3Cに設定
so1602.command(0x0c) #so1602をオン
so1602.command(0x01) #so1602をリセット
so1602.command(0x80) #カーソルを1行目の先頭に
so1602.command(0xa0) #カーソルを2行目の先頭に
この命令をプログラム内に入れることで、さまざまな設定ができます。これを踏まえ、データを測定するプログラム本体を記述しましょう。ここではファイル名を「sokuteikekka.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)
# LCD初期化
so1602.command(0x0c)
so1602.command(0x01)
# 気温と湿度、圧力のデータ
temp = str(round(data.temperature, 1))
hum = str(round(data.humidity, 1))
press = str(round(data.pressure, 1))
# LCD表示
so1602.command(0x80)
so1602.write("T=" + temp + "C")
9
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)
以前紹介したプログラムよりもかなりシンプルになりました。実際に動かしてみましょう。ディスプレイに表示されるのと同時に、コンソール画面にもデータを出すようにしています。
コンソールから以下のコマンドを入力します。するとOLEDモジュールとコンソール画面に気温、湿度、気圧の測定値が表示されます。
$ python /home/pi/programssokuteikekka.py
【訂正:2019年10月25日午後8 初出時、「$ python sokuteikekka.py」と表記していましたが、正しいものに変更しました。訂正してお詫びいたします】
さて、これで気象データが測定できるようになったので、crontabを使って定期的に表示するようにしましょう。そうすればPCいらずですね。
$ crontab -e
以上を入力してcrontabのエディター画面を立ち上げたら、以下のように入力します。
*/10 * * * * python /home/pi/programs/sokuteikekka.py
最初の「*/10」は「10分おきに」という意味です。このように入力しておくと10分おきにPythonのプログラムが走り、データを表示してくれるようになります。
$ python weatherdata.py
今回は気象データをディスプレイに表示しましたが、この他のデータ、例えば照度計を取り付けて明るさを測定し、その値をディスプレイに表示することも可能です。以上のプログラムを参考に改変してチャレンジしてみてください。
Copyright © ITmedia, Inc. All Rights Reserved.
名刺サイズの超小型PC「ラズパイ」で遊ぶ
今やスマートフォンアプリで何でも完結できてしまう時代。しかし、一から自分の手でデバイスを作り上げ、試行錯誤しながらアイデアを具現化する楽しさは格別です。この連載では、テーマや用途にあわせてマイクロコンピュータ(マイコン)と呼ばれる名刺サイズの超小型PC「Raspberry Pi」(通称ラズパイ)の活用方法から具体的な工作手順までを紹介します。
この記事の著者
関連記事
こんなメディアも見られています
ITmedia NEWSに関連する情報をお探しであれば、こちらのメディアもお役に立てるかもしれません。
SpecialPR
本日の新着記事
アクセスランキング
-
1
「食事量は1日1200kcal以下、でも肥満」な人を14日間追跡調査 痩せない理由は……米コロンビア大などの研究
-
2
なぜ酒蔵の許諾なしに? 「VTuberコラボ日本酒」騒動、主催者が経緯説明 仲介者による調整で「準備進んでいると認識」
-
3
かっぱ寿司「配布前のコラボグッズ、フリマで買わないで」 プリキュアコラボ発表日に注意喚起
-
4
本物そっくり“AI生成レシート“が経費精算の脅威に マネフォ「自力で見破るのは難しい」 企業はどう備える?
-
5
「ペンギンを返して」→「3匹全部採用して」 批判殺到のSuica新キャラ、ファンアートが空気を変えた? SNSの声
-
6
「ランジェリーパープルじゃない」「買おうと思ってたのに」 iPhone 18 Pro/Pro Maxの色に落胆の声
-
7
法人パソコンにも高騰の波 “中古”の常識を変えた「リファービッシュPC」に企業が熱視線のワケ VAIOに聞く
-
8
「菜の花がおかしい」――イラストレーター制作うたうマラソン大会ポスターに指摘相次ぐ 事務局がAI使用明かす【訂正あり】
-
9
「iPhone Duo」純正ケース話題、「面白いけど高い」……1万4800円と2万4800円
-
10
幻の「ちいかわ」コラボ第3弾皿、捨てちゃうの? くら寿司に聞いてみた
ITmedia NEWS SNS
インフォメーション
注目情報をチェック
ITmediaNEWSをフォロー
あなたにおすすめの記事PR