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側の状態だが、いくつかのパッケージをインストールして、またアンインストールしてからの状態なので、まっさらの状態からは変わっていると思われる。
yy@pizw001:~ $ dpkg  --get-selections | grep python
 dh-python                                       install
libpython-stdlib:armhf                          install
 libpython2.7-minimal:armhf                      install
 libpython2.7-stdlib:armhf                       install
 libpython3-dev:armhf                            install
 libpython3-stdlib:armhf                         install
 libpython3.5:armhf                              install
 libpython3.5-dev:armhf                          install
 libpython3.5-minimal:armhf                      install
 libpython3.5-stdlib:armhf                       install
 python                                          install
 python-apt-common                               install
 python-minimal                                  install
 python-pip-whl                                  install
 python2.7                                       install
 python2.7-minimal                               install
 python3                                         install
 python3-apt                                     install
 python3-cffi-backend                            install
 python3-chardet                                 install
 python3-crypto                                  install
 python3-cryptography                            install
 python3-dbus                                    install
 python3-dev                                     install
 python3-gi                                      install
 python3-idna                                    install
 python3-keyring                                 install
 python3-keyrings.alt                            install
 python3-minimal                                 install
 python3-pkg-resources                           install
 python3-pyasn1                                  install
 python3-requests                                install
 python3-secretstorage                           install
 python3-setuptools                              install
 python3-six                                     install
 python3-urllib3                                 install
 python3-wheel                                   install
 python3-xdg                                     install
 python3.5                                       install
 python3.5-dev                                   install
 python3.5-minimal                               install
 yy@pizw001:~ $
  • これから、いくつか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
[sourcecode language='python' ]
#!/usr/bin/python3

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.OUT)
try:
        while True:
                GPIO.output(24, True)
                time.sleep(0.1)
                GPIO.output(24, False)
                time.sleep(0.1)

except KeyboardInterrupt:
        pass

GPIO.cleanup()

[/sourcecode]
[sourcecode language='python' ]
#!/usr/bin/python3

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.OUT)
try:
        while True:
                GPIO.output(24, True)
                time.sleep(0.1)
                GPIO.output(24, False)
                time.sleep(0.1)

except KeyboardInterrupt:
        pass

GPIO.cleanup()
[/sourcecode]
    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アカウントのホーム直下のスクリプトを起動している。
/usr/bin/python3 /home/yy/gpio.py
exit 0

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

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

 

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

1件のコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください