大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

ラズパイで小型LCD(AQM0802)に温度を表示しよう

著者:國松亜紗子
公開日:2019/06/18
最終更新日:2019/06/18
カテゴリー:技術情報

こんばんは。國松です。出張も無事に終わり通常業務に戻りました。

今回は前回前々回使用した2つのモジュールを組み合わせて使っていきたいと思います。

ADT7410で取得した温度をAQM0802に表示していきたいと思います。

決して出張の疲れによる手抜きではありません。発展編です。

参考サイト

Raspberry PiではじめてのI”C通信~温度計測編~

DIY環境(I2C接続AQMシリーズのキャラクタ表示LCDをラズパイで使う (1) AQM0802)

参考書籍

カラー図解 最新 Raspberry Piで学ぶ電子工作

 

用意するもの

1.Raspberry Pi3 Model B+ (OsはRaspbian)

2.ブレッドボード

3.ADT7410温度センサーモジュール  

4.AQM0802(i2c接続の小型lcd)

5.ジャンパワイヤ

 

(ラズパイとの接続)

少し配線がややこしいので一つずつ確認しながら配線して下さい。AQM0802の『RST』と『LED』は今回は使用しません。また、接続図の画像はAQM0802ではありませんが(AQM0802のパーツがなかったため)AQM0802の「電源、SDL,SCA,GND」の接続をすればきちんと動作します。

ラズパイADT7410AQM0802
3.3vVDD(ブレッドのボードの長い列を利用してラズパイの3.3vへ)3V3(ブレッドボードの長い列を利用してラズパイの3.3vへ)
SDA(GPIO2)SDA(ラズパイのSDAへ)SDA(ブレッドボードの縦列を利用してADT7410のSDAへ)
SCL(GPIO3)SCL(ラズパイのSCLへ)SCL(ブレッドボードの縦列を利用してADT7410のSCLへ)
GNDGND(ブレッドボードの長い列を利用してラズパイのGNDへ)GND(ブレッドボードの長い列を利用してラズパイのGNDへ)

ADT7410で取得した温度をAQM0802に表示するコード

#-*-coding: utf-8 -*-

import smbus
import time

i2c = smbus.SMBus(1)

addr_adt7410 = 0x48
resister_adt7410 = 0x00

addr_aqm0802 = 0x3e
resister_aqm0802 = 0x00
data = 0x40
clear = 0x01
home = 0x02
display_On = 0x0f
LCD_2ndline=0x40+0x80

#ADT7410から温度を取得
def read_adt7410():
    word_data = i2c.read_word_data(addr_adt7410,resister_adt7410)
    data = (word_data & 0xff00)>> 8 | (word_data & 0xff) << 8
    data = data >> 3 #13ビットデータ
    if data & 0x1000 == 0:
        temperature =data*0.0624
    else:
        temperature = ((~data & 0x1fff) + 1)*-0.0625
    return temperature


#dataをセット
def command(code):
    i2c.write_byte_data(addr_aqm0802, resister_aqm0802, code)
    time.sleep(0.1)

#LCDに書き込む
def writeLCD(message):
    mojilist = []
    for moji in message:
        mojilist.append(ord(moji))
    i2c.write_i2c_block_data(addr_aqm0802, data, mojilist)
    time.sleep(0.1)

#lcdの初期化関数
def init_lcd():
    command(0x38)
    command(0x39)
    command(0x14)
    command(0x73)
    command(0x56)
    command(0x6c)
    command(0x38)
    command(clear)
    command(display_On)

#main
init_lcd()
command(clear)
writeLCD("Ondo:")
try:
    while True:
        command(LCD_2ndline)
        temperature ="{0:.2f}".format(read_adt7410())
        print(temperature)
        writeLCD(str(temperature))
        time.sleep(0.5)
except KeyboardInterrupt:
    pass

 

おまけ CPUの温度取得する3つの方法(ターミナルに表示)

それぞれのコマンドをターミナルに入力してみて下さい。どんな風に表示されるかはお楽しみです。

1.cat /sys/class/therminal/therminal_zone0/temp

2.vcgencmd measure_temp

3.echo “scale=3; `cat /sys/class/thermal/thermal_zone0/temp` / 1000” | bc

 

    上に戻る