ラズパイで小型LCD(AQM0802)に温度を表示しよう
こんばんは。國松です。出張も無事に終わり通常業務に戻りました。
今回は前回と前々回使用した2つのモジュールを組み合わせて使っていきたいと思います。
ADT7410で取得した温度をAQM0802に表示していきたいと思います。
決して出張の疲れによる手抜きではありません。発展編です。
参考サイト
Raspberry PiではじめてのI”C通信~温度計測編~
DIY環境(I2C接続AQMシリーズのキャラクタ表示LCDをラズパイで使う (1) AQM0802)
参考書籍
用意するもの
1.Raspberry Pi3 Model B+ (OsはRaspbian)
2.ブレッドボード
3.ADT7410温度センサーモジュール
4.AQM0802(i2c接続の小型lcd)
5.ジャンパワイヤ
(ラズパイとの接続)
少し配線がややこしいので一つずつ確認しながら配線して下さい。AQM0802の『RST』と『LED』は今回は使用しません。また、接続図の画像はAQM0802ではありませんが(AQM0802のパーツがなかったため)AQM0802の「電源、SDL,SCA,GND」の接続をすればきちんと動作します。
ラズパイ | ADT7410 | AQM0802 |
3.3v | VDD(ブレッドのボードの長い列を利用してラズパイの3.3vへ) | 3V3(ブレッドボードの長い列を利用してラズパイの3.3vへ) |
SDA(GPIO2) | SDA(ラズパイのSDAへ) | SDA(ブレッドボードの縦列を利用してADT7410のSDAへ) |
SCL(GPIO3) | SCL(ラズパイのSCLへ) | SCL(ブレッドボードの縦列を利用してADT7410のSCLへ) |
GND | GND(ブレッドボードの長い列を利用してラズパイのGNDへ) | GND(ブレッドボードの長い列を利用してラズパイのGNDへ) |
ADT7410で取得した温度をAQM0802に表示するコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | #-*-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