Skip to content

rc30popo/pi_i2c_demo

Repository files navigation

pi_i2c_demo

Copyright

Copyright (C) RC30-popo

Overview

Raspberry PiのI2C端子を利用してI2C接続の気圧センサーLPS25Hから約1秒間隔で気圧と温度を読み出し、同じくI2C接続のキャラクタ液晶ACM1602NIに表示するデモです。 raspbian+python3でこれらのI2Cデバイスを制御するサンプルコードです。

日経BP社のラズパイマガジン2015年秋号に紹介されていたデバイスですが、読者用に公開されているサンプルコードがpython2用なので、python3で使える制御用コードを自分で作りなおしました。

SW Environment

以下の環境で開発、動作確認しています。

OS: Raspbian GNU/Linux 10 (buster)

Linux raspberrypi 5.4.51-v7+ #1332 SMP Tue Aug 4 18:34:21 BST 2020 armv7l

Python3.7

HW

Raspberry Piシリーズ(Raspberry Pi 2 MODEL B+で動作確認しました)

I2C接続キャラクタ液晶 ACM1602NI

I2C接続気圧センサーLPS25H

キャラクタ液晶及び気圧センサーは秋月電子で販売されているものです。

気圧センサーはDIP化基盤付きのキットです。

LPS25HはI2Cアドレスとして0x5Cと0x5Dの2種類を選択可能ですが、本サンプルでは0x5Cで制御しています。(アドレスはLPS25HのSDOピンをGNDに繋ぐかVDDに繋ぐかでHW的に決定します)

pythonスクリプト

3つのスクリプトから構成されています。

pi_temp_clock.py

デモのメインプログラム。

開始

$ python3 pi_temp_clock.py で起動します。

$ nohup python3 pi_temp_clock.py & でバックグラウンド起動します。

以下のオプションで測定した温度と気圧をファイルに保存可能です。 $ python3 pi_temp_clock.py -o <出力ファイル名> -r <出力インターバル>

出力インターバルは整数で秒単位での測定データ記録間隔を指定します。-rオプションを指定しない場合のデフォルトは60秒です。

なお-rオプションの値に関わらず、温度と気圧の測定間隔は1秒で、毎秒キャラクタ液晶には測定結果が表示されます。

測定データは以下の様なcsvファイルに記録されます。最初のフィールドが日付時刻、2番目のフィールドが気温(摂氏)、3番目のフィールドが気圧(ヘクトパスカル)です。

time,temp,baro
2020-08-19 23:16:39,25.7,1013.8
2020-08-19 23:17:39,25.6,1013.8
2020-08-19 23:18:39,25.6,1013.8
2020-08-19 23:19:39,25.6,1013.8
2020-08-19 23:20:39,25.7,1013.8
2020-08-19 23:21:39,25.8,1013.8
2020-08-19 23:22:39,25.7,1013.8

終了

CTRL-CもしくはSIGTERM送信で終了します。SIGTERMはnohupを利用してバックグラウンド動作させる場合に使用して下さい。

SIGKILLは使用しないで下さい。

動作デモ

下記のYoutube動画を見て下さい。

https://www.youtube.com/watch?v=xga_DkdRDqw

ctrl_acm1602.py

ACM1602を制御するクラスライブラリ

テスト用のサンプルコードを含み、単体でも動作します。

ctrl_lps25h.py

LPS25Hを制御するクラスライブラリ

テスト用のサンプルコードを含み、単体でも動作します。

追加サンプルモジュール

ACM1602やLPS25Hとは連動しませんが、下記のサンプルプログラムを追加しました。

ctrl_mcp3002.py

SPI接続のAD変換器 MCP3002からAD変換結果を読み出すクラスライブラリ。

テスト用のサンプルコードを含み、単体でも動作します。

ctrl_gp2y0a.py

SHARPの赤外線測距モジュール GP2Y0AシリーズをMCP3002に接続して距離測定を行うクラスライブラリ。 MCP3002にはVrefとして3.3Vを印加する前提のコードとなっています。 ctrl_gp2y0a.vref_mcp3002にVrefの値が設定されているので、使用する回路構成に合わせて修正が必要です。

テスト用のサンプルコードを含み、単体でも動作します。

MCP3002とGP2Y0A21YK0Fの制御については下記のブログエントリーも参照願います。

https://rc30-popo.hatenablog.com/entry/2020/10/10/114915

制約事項

ACM1602,LPS25H共に基本的な制御のみを実装しており、エラー処理はほぼ入っていません。 正常系ワンパス程度の試験しか実施していないため、流用等される場合は自己責任でお願いします。 あくまでもお勉強用のサンプルソースです。

ACM1602,LPS25Hの制御用クラスライブラリについては特にドキュメントも用意していません。 短いコードですので、各々のデータシートと突き合わせて読めば使い方は判ると思います。 (というか、データシート読んで、理解して使って下さい)

ライセンス

LICENSE.txtを参照してください。

About

I2C device control sample source with raspberry pi + python3 including ACM1602NI control library and LPS25H control library

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages