ADT7410での温度測定とAQM0802への出力ができるようになったので両者を組み合わせて温度センサーで測定した温度をLCDに表示するようにした。
使用する部品
機能 | 部品 |
---|---|
温度センサー | ADT7410使用 高精度・高分解能 I2C・16Bit 温度センサーモジュール |
LCD | I2C controlled 8×2LCD Breakout for Raspberry Pi |
配線
温度センサーとLCDのI2CのSDA、SCLのピンはRaspberry Pi Picoの同じピンに接続する。
温度センサーとLCDのピン | Picoのピン(物理ピン番号) |
---|---|
VDD | 3V3(37) |
SCL | GP17(22) |
SDA | GP16(21) |
GND | GND(3と38) |
実体配線図
実体配線図を以下に示す。
温度測定結果をLCDに表示するプログラム
以前作った温度測定プログラムとLCD表示プログラムを組み合わせればよい。
Dim data%(2), raw%, temp!, stemp$ ' Define variables
Const LCD_ADDR = &H3E ' Set LCD I2C address
Const TMP_ADDR = &H48 ' Set ADT7410 I2C address
SetPin GP16, GP17, I2C ' Set I2C pin for LCD
I2C OPEN 100, 100 ' Open I2C channel 1
InitLCD ' Initialize LCD
LCD_CMD &H01 ' Clear LCD
I2C Read TMP_ADDR, 0, 2, data%() ' Read temperature data
raw% = data%(0) << 8 Or data%(1) ' Convert data
raw% = raw% >> 3
If raw% >= 4096 Then raw% = raw% - 8192
temp! = raw% / 16.0
stemp$ = Str$(temp!, 2, 1) + CHr$(&DH) + "C" ' Make string of temperature
WriteString Str$(stemp$) ' Write temperature
I2C CLOSE ' Close I2C channel 1
' Initialize LCD
Sub InitLCD
Pause 40
LCD_CMD &H38 : LCD_CMD &H39 : LCD_CMD &H14 : LCD_CMD &H70
LCD_CMD &H56 : LCD_CMD &H6C
Pause 200
LCD_CMD &H38 : LCD_CMD &H0C : LCD_CMD &H01
Pause 2
End Sub
' Write the letter of the code
Sub WriteChr code%
I2C WRITE LCD_ADDR, 0, 2 , &H40, code%
End Sub
' Write string
Sub WriteString STRS$
For i = 1 To Len(STRS$)
I2C WRITE LCD_ADDR, 0, 2, &H40, Asc(Mid$(STRS$, i, 1))
Next i
End Sub
' Write command
Sub LCD_CMD cmd%
I2C WRITE LCD_ADDR, 0, 2, &H00, cmd%
Pause 2
End Sub
End
13行目のコードについて
-
Str$(temp!, 2, 1)
は引数の数値から指定された整数部と小数部の桁数に応じた文字列を返す関数で、ここでは変数temp!の浮動小数点数から整数部2桁、小数部1桁の文字列を作る。 - Chr$は引数のコードの文字を返す関数で、&HDFはAQM0802では半濁点コードでCと組み合わせて℃を表現している(AQM0802のコード表)。
このプログラムを実行すると温度センサーで計測された温度がLCDの1行目に表示される。
温度測定を繰り返すプログラム
温度測定を繰り返し実行したい場合は温度測定とLCD表示をDO..LOOP
コマンドで繰り返せばよい。このとき、一定時間実行を停止し、LCDのカーソルを1行目の先頭に移動するようにしておく。
以下にそのコードを示す。サブルーチンは省略している。
無限ループしているプログラムはCTRL+C
で終了できる。
Dim data%(2), raw%, temp!, stemp$
Const LCD_ADDR = &H3E
Const TMP_ADDR = &H48
SetPin GP16, GP17, I2C
I2C OPEN 100, 100
InitLCD
LCD_CMD &H01
Do ' <--- Start Loop
I2C Read TMP_ADDR, 0, 2, data%()
raw% = data%(0) << 8 Or data%(1)
raw% = raw% >> 3
If raw% >= 4096 Then raw% = raw% - 8192
temp! = raw% / 16.0
stemp$ = Str$(temp!, 2, 1) + CHr$(&DH) + "C"
WriteString Str$(stemp$)
Pause 5000 '<--- Wait 5 sec
LCD_CMD &H80 ' <--- Move cursor 1st line
Loop
I2C CLOSE
以下省略
電源投入と同時にプログラムを自動実行する
プログラムメモリに保存されているプログラムはコンソールからRUN
コマンドで実行するが組み込み機器として利用する場合にはコンソールからの実行の指示がなくても電源投入と同時に自動的に実行させたい。
これを実現するにはOPTION AUTORUN
コマンドを使う。
次のコマンドで自動実行を有効にする。
> OPTION AUTORUN ON
自動実行しているプログラムはコンソール接続し、CTRL+C
を入力すると終了できる。
OPTIONコマンドで設定した内容は電源の有無にかかわらず保持されるので自動実行の無効化したい場合は下記のコマンドを実行する。
> OPTION AUTORUN OFF
参考:コンソールの行数、文字数を変更する
PicoMiteのコンソール出力のデフォルトは24行80文字となっている。コンソール接続しているウィンドウのサイズがこれより大きい場合にはデフォルトの行数、文字数を超える部分には表示されない。より広い領域をOPTION DISPLAY
コマンドで変更できる。
たとえば、40行100文字に変更する場合には次のコマンドを実行すればよい。一度実行したOPTIONコマンドはRaspberry Pi Picoの電源が切れても保持される。設定されているOPTIONはOPTION LIST
コマンドで確認できる。
> OPTION DISPLAY 40, 100
> OPTION LIST
PicoMite MMBasic RP2040 Edition V6.00.01
OPTION COLOURCODE ON
OPTION DISPLAY 40, 100
>