Raspberry Pi Zero WH のGPIOを、Python3で制御してLED点滅してみた。

Raspbianインストール直後の状態

Raspbian Stretch Lite の初期状態では、Pythonの環境として、2.7と、3.5が両方ともインストールされている。’python’には、2.7がリンクされており、3.5を起動するには、’python3’ とシェルから入力する必要がある。(もちろん、スクリプトの先頭に、#!/usr/bin/python3を書いておけば、その面倒は無いが・・)

現時点の、Python最新は 3.6であるが、当面、初期バージョン3.5のままで進める事にする(まだ、Raspberry上のPythonアップグレードの方法がよくわからないから・・・)

パッケージ(ライブラリ)のインストール・アンインストールの基本 (pip vs. apt vs. apt-get)

Pythonの場合、pipで各種ライブラリをインストールしたり、消したり、アップデートしたり、リストを取ったりすることが、これまで自分の常識だったが、Raspberryでやろうとしたら、まずpipが入っていない。

「からあげ」さんの下記サイト情報にもあるが、確かに実際に自分でパッケージをインストールした時もその所要時間の差は大きく感じた。基本的に、Raspberryでは、当面、pipを控えて、apt-get を使うことにする。

と思っていたら、apt-getの他に、raspbianの jessie以降は、aptを使う方法もあるらしい。今回、インストールしたOSは、jessieの次のstretchなので、aptが使える。下記サイトの情報では、apt-getより aptの方がシンプルらしい。初心者の私としては、まずは aptを基本にして、不足がある時に、apt-getを使うことにする。

  • Raspberry pi aptコマンドを使おう
  • apt00
  • 例えば、pandasをインストールしようとして、sudo apt install python3-pandasを実行したが、エラーで中断した。代わりに apt-getでインストールを試みたら、正常にインストールできた。やはり、aptでのインストールは汎用的とは言えない感じ。

ただし、pipが、pythonのモジュールだけリストするのに対して、apt listコマンドでは、指定をしない限り、システムにインストールされているライブラリが、全部表示される。

    • インストールされているパッケージを知りたい時には、dpkg –lの方が便利。 ちなみに、下記は現在のraspberry pi zero側の状態だが、いくつかのパッケージをインストールして、またアンインストールしてからの状態なので、まっさらの状態からは変わっていると思われる。

  • これから、いくつかPython3で開発をするために、numpy、pip、pandas、smbusをaptおよび apt-getを使ってインストールした。(pandasは、aptではインストール出来ず、apt-getを使ったらOKだった。理由は不明)。これらをインストール後に、pip3で確認した結果はこちら。色々なライブラリが、関連してインストールされたのがわかる。
  • yy@pizw001:~ $ pip3 list DEPRECATION: The default format will switch to columns in the future. You can use –format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning. beautifulsoup4 (4.5.3) chardet (2.3.0) cryptography (1.7.1) cycler (0.10.0) decorator (4.0.11) html5lib (0.999999999) idna (2.2) keyring (10.1) keyrings.alt (1.3) lxml (3.7.1) matplotlib (2.0.0) numexpr (2.6.1) numpy (1.12.1) pandas (0.19.2) Pillow (4.0.0) pip (9.0.1) pyasn1 (0.1.9) pycrypto (2.6.1) pygobject (3.22.0) pyparsing (2.1.10) python-apt (1.1.0b5) python-dateutil (2.5.3) pytz (2016.7) pyxdg (0.25) requests (2.12.4) RPi.GPIO (0.6.5) scipy (0.18.1) SecretStorage (2.3.1) setuptools (33.1.1) six (1.10.0) ssh-import-id (5.6) tables (3.3.0) urllib3 (1.19.1) webencodings (0.5) wheel (0.29.0) yy@pizw001:~

LEDチカチカ(Lチカ)に必要なライブラリをインストール (python3)

    1. GPIO用のライブラリをインストールする
      • sudo apt install python3-rpi.gpio
    2. 以下のコードを、raspberry上の適当なディレクトリ上に作成する。ここでは、ホームディレクトリに作成しておく。ファイル名は gpio.pyとする。
      • cd
      • vi gpio.py あるいは、nano gpio.py
      • chmod +x gpio.py

    1. LEDを配線する
      • この例では、GPIO 24を制御する事にしている。GPIO 24は、raspberry Pi zeroのピンヘッダ 18番に出力されるので、その端子にオシロのプローブをつなぐ。
      • image
      • もちろん、LEDを繋ぐべきだが、オシロが手元にあったので・・・。
    2. コマンドを実行する
      • ./gpio.py
      • ちなみに、カレントディレクトリにも、PATHを通しておけば、./は不要で、gpio.pyと入力するだけで起動する。
      • pic_31_2
      • 確かに、周期は200msecになっている。(0.1秒 x 2)
      • GPIOピンの出力電圧は、約3.3V。
      • (波形にヒゲノイズがあるが、強烈なACノイズを出すLEDライトが点灯しているため)
    3. 試しに、Sleep時間を 0.0005msec (0.5msec)に設定して、スクリプトを起動した所、パルスの周期は、約1.3msec (770Hz) で、50usec程度のジッタが出ている。
    4. コマンド起動では無く、Raspberry Piがブートした直後から、このプログラムが自動起動するようにしたい場合は、いくつかの方法がある。その中で、最もシンプルなのは、/etc/rc.local の最後(exit 0の前) に、このプログラムを起動するよう記述すれば良い。
      • /etc/rc.local の最後の部分。 この例では、yyアカウントのホーム直下のスクリプトを起動している。

この方法の場合、停止させるには、このプロセスを殺すしかない。

      • ps aux
      • kill process-id
  1. コマンドラインで起動したものは、Ctrl-Cで終了できる。また、コマンドラインからバックエンドで、このスクリプトを実行することもできる。
      • ./gpio.py &

次はI2CでBMP280を制御してみる。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメント