のりとも爺のホビーワークショップ <Raspberry Pi>
トップ
ラズパイ概要
試行・実験
試行・実験
Rasberry Pi 5 をミニPCに構築...
ファイルサーバーを構築...
実験ボードにLED調光回路製作
PythonでLED調光制御する
C言語でLED調光制御する
SPIモード切替
Pythonで温湿度をLCDに表示する
C言語で温湿度をLCD表示する
I2Cモード切替
Pythonで日時温湿度をGUI画面に表示する
プログラム
プログラム
PythonLED制御サンプルプログラム
C言語LED制御サンプルプログラム
Python温湿度LCD表示サンプルプログラム
C言語温湿度LCD表示サンプルプログラム
Python日時温湿度GUI画面表示サンプルプログラム
プロフィール
メール・コメント
試行・実験
Rasberry Pi 5 をミニPCに構築...
ファイルサーバーを構築...
実験ボードにLED調光回路製作
PythonでLED調光制御する
C言語でLED調光制御する
SPIモード切替
Pythonで温湿度をLCDに表示する
C言語で温湿度をLCD表示する
I2Cモード切替
Pythonで日時温湿度をGUI画面に表示する
Pythonで温湿度をLCDに表示する
(実験で使用する電子パーツのサイトで公開されているプログラムを参考にして試行する)
Python(パイソン)で温度/湿度のLCD表示をプログラムする
*プログラムを記述するにはテキストエディタが必要になる。
RasPiのOSにGUIに馴染むいくつかのテキストエディタがあるが教則本にある Geany が
プログラム開発では使い勝手が良いと思う。
*RasPi5の
I2Cインターフェースを無効
にすること。
→ I2Cモード切り替えページへ
*回路図
*I2Cインターフェース上にLCDを接続したらI2Cのアドレスを確認する
プログラムにI2Cアドレスとして記述する必要がある
sudo i2cdetect -y 1
正しく回路が繋がっているとLCDのアドレスがhex数値で表示される
例では 0x27 LCDユニットのI2Cアドレスとなる
20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- --
*GPIOピンにてDHT11のDATA-INと接続する番号を回路図と異なるピンに変更する場合は
プログラムにてBCM番号を変更する必要がある
------------------------------------------------------------------------
Pythonで組んだプログラムを簡易に動かす場合、RasPiOSに入っているPythonのインタープリタで
動かすことになる。インタープリタとはPythonで書かれた命令文を1つずつ解釈しながら実行して
いく形である。ゆえにインタープリタでは実行速度がC言語で組まれたものより遅くなる。
*実行例(ソースファイルがdht11-i2clcd.pyの場合)
sudo python dht11-i2clcd.py
サンプルプログラムの概要は、温湿度センサーDHT11からデータを読み込んで
I2Cインターフェースに接続されたLCDに温度/湿度を表示する
<サンプルプログラムの動作手順>
(続にいうフローチャートを文書化したもの)
------------------------------------------------------------------------
1.LCDの初期設定を行う(HD44780準拠のインターフェース)
<関数 lcd_init() >
・LCDユニットに対してI2Cを通して電源投入後の初期化手順の6コマンドをLCDに送る
a)コマンド(0x33)Initialize
b)コマンド(0x32)Initialize
c)コマンド(0x06)Cursor move direction
d)コマンド(0x0C)Display On,Cursor Off, Blink Off
e)コマンド(0x28)Data length, number of lines, font size
f)コマンド(0x01)Clear display
・時間(500μs)を待つ(LCD側の動作との整合)
------------------------------------------------------------------------
2.LCDに1バイトのデータ送信(書き込み、出力)
<関数 lcd_byte(bits, mode) >
・LCDに対する1バイトを2バイトに成形してLCDに書込み、その後、取込タイミング情報を書込む
mode=0:コマンド/mode=1:表示データ、LCDの文字を照らすLEDをonにする
a)上位データ形成:bits8bitから上位4bitを取得してmodeとLCD_BACKLIGHTビットを付加する
b)下位データ形成:bits8bitから下位4bitを取得して上位4ビットへシフトして
modeとLCD_BACKLIGHTビットを付加する
c)I2CインターフェースでLCDアドレスに上位データを書込む
d)LCDにデータを取り込むタイミング情報を書込む
e)I2CインターフェースでLCDアドレスに下位データを書込む
d)LCDにデータを取り込むタイミング情報を書込む
------------------------------------------------------------------------
3.LCDにバイトデータ取込タイミング書込み
<関数 lcd_toggle_enable(data) >
・I2Cを通して書込んだデータをLCDが内部に取込むタイミング情報を送る
タイミング情報(E)をlow→hi→low(トグル)する
a)時間(500μs)を待つ(LCD側の動作との整合)
b)LCDに対する1バイトに取込タイミング情報=1を付加して書込む
c)時間(500μs)を待つ(LCD側の動作との整合)
d)LCDに対する1バイトに取込タイミング情報=0を付加して書込む
e)時間(500μs)を待つ(LCD側の動作との整合)
------------------------------------------------------------------------
4.LCDに文字列を書込み
<関数 lcd_string(message,line) >
・lineで指定された行にmessage文字列を表示する
a)LCDの1行文字長に書込む文字列を左揃えにして右側に空白を埋める
b)LCDに表示行指示コマンドを送る
c)LCDの1行分の文字列を1文字ずつ データ書込みを繰り返す
------------------------------------------------------------------------
5.メイン処理
<関数 main() >
・GPIOの初期化
・GPIOにBCM番号使用モードを設定
・以下の処理を繰り返す(割り込みがあれば処理を抜ける)
a)DHT11温湿度センサーからデータを取込(ライブラリで関数化されている)
b)正常に取り込めたら温度、湿度をLCDに書込み、表示
1行目に[temp:<取りこんだ温度> C]
2行目に[humid:<取りこんだ湿度> %]
c)取り込みが異常だったら以下の文字列をLCDに書込み、表示
1行目に[Read Tutorial:]
2行目に[osoyoo.com]
------------------------------------------------------------------------
6.プログラム開始処理
<__main__>
・
main()
を実行する
・異常処理(ctrl+Cなどによる強制終了)の設定
a)LCDに0x01(Clear display)コマンドを送る
→
プログラム終了
------------------------------------------------------------------------