020_サンプルプログラム_revision0 - kotaproj/supportPiMotor GitHub Wiki

サンプルプログラム集_revision0


作業環境

本サンプルプログラムは、以下の環境で確認している

  • モデル
    • RaspberryPi4
  • OS
    • Raspberry Pi OS (32-bit)
      • with desktop and recommended software
      • Version:May 2020
      • Release date:2020-05-27
      • Kernel version:4.19
  • Python
    • 3.7.3 (default, Dec 20 2019, 18:57:59)

環境の構築

  • ~/pijigに作業環境を構築する

venvにて環境の作成

  • python - venvにて環境を構築する
# 環境の作成
$ mkdir pijig
$ cd pijig/
$ python3 -m venv env_pijig

# 環境に入る
$ source env_pijig/bin/activate
(env_pijig) $ 
  • 環境を抜ける場合は、deativate
(env_pijig) $ deactivate 
$ 

モジュールのインストール

  • サンプルプログラムで使用するモジュールをインストールする
    • 一部の設定は、サンプルプログラムの動作に記載している
(env_pijig) $ pip install pigpio
(env_pijig) $ pip install RPi.GPIO
(env_pijig) $ pip install smbus
(env_pijig) $ pip install spidev

ラズベリーパイピン表

pi@raspberrypi:~$ gpio readall
         +-----+-----+---------+------+---+---Pi 3B+-+---+------+---------+-----+-----+
         | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
         +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
3.3V     |     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     | 5V
I2C1     |   2 |   8 |   SDA.1 | ALT0 | 1 |  3 || 4  |   |      | 5v      |     |     | 5V
I2C1     |   3 |   9 |   SCL.1 | ALT0 | 1 |  5 || 6  |   |      | 0v      |     |     | GND
SR501    |   4 |   7 | GPIO. 7 |   IN | 1 |  7 || 8  | 1 | ALT5 | TxD     | 15  | 14  |
GND      |     |     |      0v |      |   |  9 || 10 | 1 | ALT5 | RxD     | 16  | 15  |
IR Send  |  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 0 | IN   | GPIO. 1 | 1   | 18  | Buzzer
SR4 ECHO |  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     | GND
SR4 TRG  |  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
3.3V     |     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |
SPI      |  10 |  12 |    MOSI | ALT0 | 0 | 19 || 20 |   |      | 0v      |     |     | GND
SPI      |   9 |  13 |    MISO | ALT0 | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |
SPI      |  11 |  14 |    SCLK | ALT0 | 0 | 23 || 24 | 1 | OUT  | CE0     | 10  | 8   | SPI
GND      |     |     |      0v |      |   | 25 || 26 | 1 | OUT  | CE1     | 11  | 7   |
         |   0 |  30 |   SDA.0 |   IN | 1 | 27 || 28 | 1 | IN   | SCL.0   | 31  | 1   |
SW Red   |   5 |  21 | GPIO.21 |   IN | 1 | 29 || 30 |   |      | 0v      |     |     | GND
SW Green |   6 |  22 | GPIO.22 |   IN | 1 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  | SG90(PWM)
SW Blue  |  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     | GND
IR Recv  |  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  | LED Red
         |  26 |  25 | GPIO.25 |   IN | 0 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  | LED Green
GND      |     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  | LED Blue
         +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
         | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+---Pi 3B+-+---+------+---------+-----+-----+

※サンプルプログラムは、BCMピンにて指定する


LED(Lチカ)

  • LEDブロックの使い方について記載
  • Red/Green/Blueの3色のLEDを搭載

回路図

pijig_eeschema_led

使用するピン

機能 ピン BCM(Physical) 備考
RED LED 16(36) -
GREEN LED 20(38) -
BLUE LED 21(40) -

使い方の例

  • 0.5秒ごとにLEDの点灯<->消灯を繰り返す
  • CTRL + cにて、終了する
import RPi.GPIO as GPIO
import time

# LEDのピン設定
PIN_RED_LED = 16
PIN_GREEN_LED = 20
PIN_BLUE_LED = 21

LED_DICT = {
    "red" : PIN_RED_LED,
    "green" : PIN_GREEN_LED,
    "blue" : PIN_BLUE_LED,
}


def main():
    # BCM指定, 各ピンを出力に設定
    GPIO.setmode(GPIO.BCM)  
    for key in LED_DICT:
        GPIO.setup(LED_DICT[key], GPIO.OUT)

    try:
        for _ in range(100):
            for key in LED_DICT:
                GPIO.output(LED_DICT[key], GPIO.HIGH)
                print("LED ON - ", key)
                time.sleep(0.5)
                GPIO.output(LED_DICT[key],GPIO.LOW)
                print("LED OFF - ", key)
                time.sleep(0.5)
    except KeyboardInterrupt:
        GPIO.cleanup()
        print("stop")

if __name__ == "__main__":
    main()

スイッチ

  • スイッチブロックの使い方について
  • Red/Green/Blueの3色のスイッチを搭載
  • ラズパイ側のプルアップ抵抗を使用する

回路図

pijig_eeschema_switch

使用するピン

機能 ピン BCM(Physical) 備考
REDスイッチ 5(29) -
GREENスイッチ 6(31) -
BLUEスイッチ 26(37) -

使い方の例

  • スイッチを押している間、LEDが点灯する
import RPi.GPIO as GPIO
from time import sleep

# LEDのピン設定
PIN_RED_LED = 16
PIN_GREEN_LED = 20
PIN_BLUE_LED = 21

LED_DICT = {
    "red" : PIN_RED_LED,
    "green" : PIN_GREEN_LED,
    "blue" : PIN_BLUE_LED,
}

# SWのピン設定
PIN_RED_SW = 5
PIN_GREEN_SW = 6
PIN_BLUE_SW = 26


SW_DICT = {
    "red" : PIN_RED_SW,
    "green" : PIN_GREEN_SW,
    "blue" : PIN_BLUE_SW,
}

def main():
    # BCM指定, 各ピンを出力に設定
    GPIO.setmode(GPIO.BCM)  
    for key in LED_DICT:
        GPIO.setup(LED_DICT[key], GPIO.OUT)

    for key in SW_DICT:
        GPIO.setup(SW_DICT[key], GPIO.IN, pull_up_down=GPIO.PUD_UP)

    try:
        while True:
            for key in SW_DICT:
                if GPIO.input(SW_DICT[key]) == GPIO.LOW:
                    GPIO.output(LED_DICT[key],GPIO.HIGH)
                else:
                    GPIO.output(LED_DICT[key],GPIO.LOW)
            sleep(0.01)

    except KeyboardInterrupt:
        GPIO.cleanup()
        print("stop")


if __name__ == "__main__":
    main()

ディスプレイ

  • ディスプレイブロックの使い方について

回路図

oled

使用するピン

機能 ピン BCM(Physical) 備考
SCL1 2(3) -
SDA1 3(5) -

使い方の例

  • "ラズパイ"を表示する

必要なライブラリのインストール

  • 追加で以下が必要
pip install adafruit-circuitpython-ssd1306
pip install pillow
git clone https://github.com/adafruit/Adafruit_CircuitPython_SSD1306

サンプルコードを動かしてみる

(env_kota_handson) $ git clone https://github.com/adafruit/Adafruit_CircuitPython_SSD1306
  • ssd1306 - 128x64用にコードを修正する
    • ./Adafruit_CircuitPython_SSD1306/examples/ssd1306_pillow_demo.py

修正前:
HEIGHT = 32  # Change to 64 if needed

 ↓

修正後:
HEIGHT = 64  # Change to 64 if needed
  • ラズベリーパイと接続する

  • 接続されているか確認をする
    • i2cdetectにて、接続されているi2cデバイスを確認できる
$ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         
 $ 
  • コードを実行する
$ python Adafruit_CircuitPython_SSD1306/examples/ssd1306_pillow_demo.py 

→"Hello World"が表示されたでしょうか?


DCモータ制御

import RPi.GPIO as GPIO
import time

# LEDのピン設定
PIN_AIN1 = 18
PIN_AIN2 = 23
PIN_BIN1 = 13
PIN_BIN2 = 24

def stop():
    GPIO.output(PIN_AIN1, GPIO.LOW)
    GPIO.output(PIN_AIN2, GPIO.LOW)
    GPIO.output(PIN_BIN1, GPIO.LOW)
    GPIO.output(PIN_BIN2, GPIO.LOW)
    return


def main():
    # BCM指定, 各ピンを出力に設定
    GPIO.setmode(GPIO.BCM)  
    GPIO.setup(PIN_AIN1, GPIO.OUT)
    GPIO.setup(PIN_AIN2, GPIO.OUT)
    GPIO.setup(PIN_BIN1, GPIO.OUT)
    GPIO.setup(PIN_BIN2, GPIO.OUT)

    stop()

    print("PIN_AIN1 - HIGH")
    GPIO.output(PIN_AIN1, GPIO.HIGH)
    time.sleep(3)
    stop()

    print("PIN_AIN2 - HIGH")
    GPIO.output(PIN_AIN2, GPIO.HIGH)
    time.sleep(3)
    stop()

    print("PIN_BIN1 - HIGH")
    GPIO.output(PIN_BIN1, GPIO.HIGH)
    time.sleep(3)
    stop()

    print("PIN_BIN2 - HIGH")
    GPIO.output(PIN_BIN2, GPIO.HIGH)
    time.sleep(3)
    stop()

    GPIO.cleanup()

    return

if __name__ == "__main__":
    main()