Raspberry Pi 2のPython3でGPIOのパルスを取得する。

前回では、ラズパイの開発環境を整備しました。

今回は、ラズパイのPythonでGPIOのプログラムを動作させるための準備をします。


ラズパイのピン説明は以下のホームページがわかりやすいかと思います。ピンをクリックすると説明が右側に表示されます。

25

アナログがないのと、シリアル通信が一つしかないのが残念ですが、I2cを活用する方向で色々センサーをつけていきたいと思います。全てPythonを利用して組んでいきます。


まず最初に、PythonでGPIOを利用した時の性能を図る意味でも、パルスの入力を3系統取得します。ラズパイのGPIOは最大3.3Vの入力なので、3.3V系の[Arduino Due]から信号を送り込んでみます。

ファンクション・ジェネレーターがあればよいのですが、無いものはしょうがないので[Arduino Due]を代りに利用します。

101

今となっては割高感がありますが、アナログも利用できますし、シリアルもたくさん利用できるので、とても良いのですが、OSとしてLinuxが動くほうがいろいろ使い道が広がりますので……

で、Arduinoでスケッチを書いてみます。Arduinoのデジタル出力を3系列使ってみます。
PinNo.11   500Hz       2ms 周期
PinNo.12    50Hz     20ms 周期
PinNo.13      5Hz    200ms 周期

スケッチの詳しい内容は、本題から外れますのでググってみてください。 それぞれの周期の 3.3V矩形波が出るはずです。

◎ Arduino Due スケッチ

どの程度の精度のある矩形波が出ているか、オシロで調べてみました。

102

ちょっとヒゲが出ていますが、思っていたよりまともです。

この信号をラズパイに入力します。GPIOは、

Pin.No 名称1 用途 利用 IN/OUT Arduino Pin 周波数
16 GPIO23 GPIO23 パルス1 IN 13 5Hz
18 GPIO24 GPIO24 パルス2 IN 12 50Hz
20 GND GND GND GND
22 GPIO25 GPIO25 パルス3 IN 11 500Hz

を利用してみます。


ラズパイのPythonでプログラムを作成してみます。

過去に、低速CPUのLinux上のPythonでGPIOの割り込み処理をしたことがあるのですが、あまり良い思い出がないので、方針は、矩形波の立ち上がりをぐるぐる回しながら取得する方向で作ってみます。最大500Hzですので、秒3000回ぐらいのサンプリングでやってみます。

プログラムは、スレッドを試したかったのと、将来ほかのGPIOも利用する予定であることから、3つに分けました。
Pythonらしくない書き方だと思いますが、まだ慣れていないものですから、おゆるしを。
RpiApp01.py        #メインルーチン

PulseReader.py     #パルス取得

ConfigApp.py         #設定

この3つのフォルダーを、ラズパイ上に新しく作成したフォルダーにコピーして動かします。

キャプチャ

矩形波の、HIGH/LOWの両方を取得していますので、カウント値は2倍になっています。
1行目が時刻
2行目は、 パルス取得ループ回数、5Hz取得、50Hz取得、500Hz取得です。
500Hz取得で、取りこぼしが発生しています。

CPUの使用率は、

105

こんなかんじです。まだまだいけそうですね。

取りこぼしが発生しているのが気になりますので、次回はその辺を調べてみます。


第 1回 Raspberry Pi 2 の初期設定をしてみる-1
第 2回 Raspberry Pi 2 の初期設定をしてみる-2
第 3回 Raspberry Pi 2 の初期設定をしてみる-3
第 4回 Raspberry Pi 2 にWifiの設定をする
第 5回 Raspberry Pi 2 不要サービス停止
第 6回 Raspberry Pi 2 RAMディスクの設定
第 7回 Raspberry Pi 2 コンソールの設定
第 8回 Raspberry Pi 2 にウォッチドッグタイマーを導入する
第 9回 Raspberry Pi 2 でPythonの設定をする。
第10回 Raspberry Pi 2 でSambaの設定をする。
第11回 Windows10でPythonの開発環境を構築する。
第12回 Raspberry Pi 2のPython3でGPIOのパルスを取得する。
第13回 Raspberry Pi 2のPythonでGPIOを調べてみる。
第14回 Raspberry Pi 2のPythonでGPIOの割り込み処理をする。
第15回 Raspberry Pi 2のPython3でI2Cを設定する。
第16回 Raspberry Pi 2のPython3で加速度センサーを動かす。
第17回 Raspberry Pi 2にmonoをインストールしてC#を利用する。
第18回 Raspberry Pi 2にgoをインストールしてみる。
第19回 Raspberry Pi 2のGPIOをC#(mono)でパルス取得する。
第20回 Raspberry Pi 2のGPIO読み込みを、mono(C#)とPythonで比較する。

コメントを残す

メールアドレスが公開されることはありません。