1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Raspberry Pi PicoでPicoMite(MMBasic)を使う〜温度測定結果をLCDに表示する

Posted at

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)

実体配線図

実体配線図を以下に示す。

AQM0802LCD_.png

温度測定結果を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行目に表示される。

IMG_0903.jpeg

温度測定を繰り返すプログラム

温度測定を繰り返し実行したい場合は温度測定と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
>
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?