Raspberry Pi Zero W GPIO コントロール

2022-09-13

この記事では、の GPIO コントロールについて紹介します。ラズベリーパイゼロW、LEDを使用して効果を確認します。

0.1 ラズベリーパイGPIO 番号付け方法
機能 物理ピン
左から右、上から下: 左が奇数、右が偶数: 1 ~ 40

raspberry pi

  • BCM
    BCM2835 の GPIO レジスタの番号付けに従って、番号付けは CPU レジスタに焦点を当てています。

    配線Pi
    番号付けは実装ロジックに焦点を当てており、拡張 GPIO ポートはプログラミングに便利な 0 から番号付けされています。 WiringPi欄にある通り。

raspberry pi zero w

GPIO を操作するときは、最初にどの数値セットを使用するかを知る必要があります。

1.準備する
1.1 ハードウェア
ラズベリーパイゼロW
LED(3mmまたは5mm)
1KΩ抵抗
3 デュポン線
パソコン(Windows7使用)

1.2 GPIO インターフェース

raspberry pi 3

1.3 配線
まず、LED を Raspberry Pi に接続します。 LED の正極は 1KΩ の抵抗を介して Raspberry Pi の GPIO18 (pin12) に直列に接続され、負極は接地されています。 (なお、下の写真は他の方からお借りしました。写真では、LEDのプラス極が11番ピンに接続されており、私たちは12番ピンに接続されています)

raspberry pi

2. テスト
2.1 PC と Pi Zero W を接続する
パテを使用してコンピューターと Pi Zero W を接続します。この記事の最後にある参照ドキュメントを参照してください。ホスト名、ポート 22、ユーザー名 pi、およびパスワード raspberry の raspberrypi.local を入力します。

注: ブート パーティションに ssh という名前の空のテキスト ファイルがあります。この ssh ファイルは紛失しやすいです。 ssh にログインできない場合は、まず ssh が失われていないかどうかを確認します。

2.2 シェル コマンドで GPIO を直接制御する
GPIO18 をカーネル空間からユーザー空間に公開する
pi@raspberrypi:~ $ sudo echo 18 > /sys/class/gpio/export

> は IO リダイレクト記号です。 IO リダイレクションとは、Linux の標準入出力のデフォルト デバイスを変更して、ユーザー定義のデバイスを指すようにすることです。 echo 18 > export は、エクスポート ファイルに 18 を書き込みます。

この操作を実行すると、/sys/class/gpio ディレクトリに gpio18 フォルダーが追加されます。

GPIO18 ピンを表示します (Liunx では、デバイスはファイルの形式であり、ピンもデバイスです)

pi@raspberrypi:~ $ cd /sys/class/gpio/gpio18

pi@raspberrypi:/sys/class/gpio/gpio18 $ ls

raspberry pi

  • GPIO18を出力モードに設定
    pi@raspberrypi:/sys/class/gpio/gpio18 $ sudo エコーアウト > 方向

    値ファイルに 1 を入力すると、GPIO がハイレベルを出力し、LED が点灯します。
    pi@raspberrypi:/sys/class/gpio/gpio18 $ sudo エコー 1 > 値

    値ファイルに 0 を入力すると、GPIO 出力が低くなり、LED がオフになります。
    pi@raspberrypi:/sys/class/gpio/gpio18 $ sudo エコー 0 > 値

    ホームディレクトリに戻る
    pi@raspberrypi:/sys/class/gpio $ cd ~

    GPIO18 インターフェイスをログアウトします
    pi@raspberrypi:~ $ sudo echo 18 > /sys/class/gpio/unexport

    2.3 シェルスクリプトによる GPIO の制御
    ledonoff.sh という名前の新しいスクリプトを作成します。
    pi@raspberrypi:~ $ sudo nano ledonoff.sh

    スクリプトは次のように記述します。

    echo $1 > /sys/class/gpio/export

    エコーアウト > /sys/class/gpio/gpio$1/direction

    エコー 1 > /sys/class/gpio/gpio$1/値

    sleep 5 # delay 5 秒

    エコー 0 > /sys/class/gpio/gpio$1/値

    echo $1 > /sys/class/gpio/unexport

    注: シェル スクリプトはパラメーターを渡すことができます。たとえば、$1 は最初のパラメーターを表し、$2 は 2 番目のパラメーターを表します。

    ledonoff.sh の実行権限を追加
    pi@raspberrypi:~ $ sudo chmod +x ledonoff.sh

    スクリプトを実行
    pi@raspberrypi:~ $ sudo ./ledonoff.sh 18

    操作の結果: LED が 5 秒間オン/オフします。

    2.4 Python を使用して PRI.GPIO コマンドで GPIO を制御する
    Python で GPIO を制御する最も便利な方法は、Python クラス ライブラリを使用することです。ラズベリーパイシステム自体。

    putty の ssh ターミナルで次のコマンドを入力します。

    Python インタラクティブ インターフェイスに入る
    pi@raspberrypi:~ $ パイソン

    >>> これは python プロンプトです。

    Python クラス ライブラリ RPi.GPIO をインポートし、GPIO という名前とエイリアスを付けます。
    >>> RPi.GPIO を GPIO としてインポート

    導入後、GPIO モジュールの機能を使用できます。

    BCMに基づいて、BOARDエンコーディング方法を設定します
    ラズベリーパイ3GPIO は、物理ピン BOARD エンコード、BCM エンコード、wireingPi エンコードの 3 つのエンコード方法に分けられます。

    >>> GPIO.setmode(GPIO.BCM)

    出力モード
    >>> GPIO.setup(18,GPIO.OUT)

    GPIO18出力ハイレベル、LED点灯
    >>> GPIO.出力(18,GPIO.HIGH)

    GPIO18 出力ローレベル、LED オフ
    >>> GPIO.出力(18,GPIO.LOW)

    使用後の清掃
    >>> GPIO.クリーンアップ()

    Python インターフェイスを終了します
    >>> Ctrl+D

    2.5 Python スクリプトで GPIO を制御する
    blinky.py という名前の新しいスクリプトを作成します。
    pi@raspberrypi:~ $ 須藤ナノblinky.py

    スクリプトは次のように記述します。

    RPi.GPIO を GPIO としてインポート

    輸入時間

    GPIO.setmode(GPIO.BCM)

    GPIO.setup(18,GPIO.OUT)

    True の間:

    GPIO.出力(18,GPIO.HIGH)

    時間.スリープ(1)

    GPIO.出力(18,GPIO.LOW)

    時間.スリープ(1)

    GPIO.cleanup()

    説明: 以下のループ本体は、True をインデントする必要があります。インデントするには、スペースまたは Tab キー (混合キーではありません) を使用してください。

    実行権限をblinky.pyに追加
    pi@raspberrypi:~ $ sudo chmod +x 点滅.py

    Python スクリプトを実行する
    pi@raspberrypi:~ $ sudo python blinky.py

    LED が点滅します。

    走るのをやめる
    Ctrl+C を使用してループを中断します。

    3.wireingPi GPIOを使ってC言語でGPIOを制御する
    Raspberry Pi カーネルは、組み込みの gpio ドライバーでコンパイルされています。特定の操作を完了するために、サードパーティによって作成されたライブラリ関数を使用することがよくあります。より一般的な操作ライブラリ関数は次のとおりです。

    Python GPIO
    Python GPIO は、Raspberry Pi 公式情報で推奨されている使いやすい Raspberry Pi カーネルに統合されています。 python GPIO は、ユーザーがラズベリー関連の IO ポート操作を完了するのに役立つ小さな python ライブラリですが、python GPIO ライブラリは、SPI、I2C、または 1-wire などのバス インターフェイスをまだサポートしていません。

    一般的な C 言語ライブラリは次のとおりです。

    配線Pi
    Raspberry Piに触れる前に、C言語の基礎があり、マイクロコントローラまたは組み込み開発に触れたことがある人に適しています。 wiringPi の API 関数は arduino と非常によく似ているため、人気があります。著者は、UART デバイス、I2C デバイス、SPI デバイスなどを含む多くの指示とサンプル コードを提供します。

    BCM2835 C ライブラリ

BCM2835 C ライブラリは、C 言語で実装された関連する基本的なドライバーとして理解できます。 BCM2835 C ライブラリのドライバ ライブラリには、GPIO、SPI、UART などが含まれています。BCM2835 C ライブラリを学習して、BCM2835 関連のレジスタ操作に慣れることができます。 Raspberry Pi で Linux ドライバーを開発する機会がある場合、または独自の Python または PHP 拡張ドライバーを開発する機会がある場合は、BCM2835 C ライブラリから多くの「インスピレーション」を得ることができます。

3.1 WiringPi GPIO のインストール
WiringPi は、Raspberry Pi プラットフォームに適用される GPIO 制御ライブラリ関数です。 WiringPiはGUN Lv3に準拠しています。配線PiはCまたはC++で開発されており、python、ruby、PHPなどの他の言語でパッケージ化できます。

wiringPi には、Raspberry Pi の GPIO ピンを制御するために使用できる一連の gpio 制御コマンドが含まれています。ユーザーは gpio コマンドを使用して、シェル スクリプトを介して GPIO ピンを制御またはクエリできます。

配線Piインストール
更新リスト:

pi@raspberrypi:~ $ sudo apt-get update

ソフトウェアの更新:

pi@raspberrypi:~ $ sudo apt-get アップグレード

インストール:

pi@raspberrypi:~ $ sudo apt-get install 配線pi

テスト
wiringPi には一連の gpio コマンドが含まれており、これを使用して Raspberry Pi のさまざまなインターフェイスを制御できます。次のコマンドを使用して、wiringPi が正常にインストールされているかどうかをテストできます。

pi@raspberrypi:~ $ gpio -v

raspberry pi zero

  • GPIO ダイアグラムを表示する

pi@raspberrypi:~ $ gpio readall

raspberry pi 3

3.2 コードを書く
led_blink.c という名前の新しいソース プログラムを作成します。
pi@raspberrypi:~ $ sudo nano led_blink.c

内容は以下の通り
#含む

int main(void) {

配線PiSetup();

pinMode (1、出力);

為に(;;) {

デジタル書き込み (1、高);遅延(500);

デジタル書き込み (1、低);遅延 (500) ;

}

}

解説:前項の写真を見ると、BCM番号のGPIO18ピンが配線Pi番号で1になっています。

3.3 コンパイルして実行する
コンパイル
pi@raspberrypi:~ $ gcc led_blink.c -o led_blink -l 配線Pi

-l wirePi は、wireingPi 共有ライブラリを動的にロードすることを意味します。

走る
pi@raspberrypi:~ $ sudo ./led_blink

Ctrl+C を使用してループを中断します。

4. BCM2835 C ライブラリを使用して C 言語で GPIO を制御する
4.1 ダウンロードとインストール

raspberry pi zero

  • bcm2835-1.56.tar.gz をダウンロード
    pi@raspberrypi:~ $ wget //www.airspayce.com/mikem/bcm2835/bcm2835-1.56.tar.gz

    解凍する
    pi@raspberrypi:~ $ tar xvzf bcm2835-1.56.tar.gz

    コンパイルを構成する
    圧縮ディレクトリに移動します。

    pi@raspberrypi:~ $ cd bcm2835-1.56

    構成コマンドを実行します。

    pi@raspberrypi:~/bcm2835-1.56 $ ./configure

    pi@raspberrypi:~/bcm2835-1.56$make

    検査を行う
    pi@raspberrypi:~/bcm2835-1.56 $ sudo make check

    bcm2835 ライブラリをインストールします。
    pi@raspberrypi:~/bcm2835-1.56 $ sudo make install

    4.2 コードを書く
    blink_led.c という名前の新しいソース プログラムを作成します。
    pi@raspberrypi:~/bcm2835-1.56$cd~

    pi@raspberrypi:~ $ 須藤ナノblink_led.c

    内容は以下の通り
    #含む

    #PIN の定義 RPI_GPIO_P1_12

    int main(int argc, char **argv) {

    もし (!bcm2835_init())

    1 を返します。

    bcm2835_gpio_fsel(ピン、BCM2835_GPIO_FSEL_OUTP);

    ながら (1) {

    bcm2835_gpio_write(PIN、HIGH);

    bcm2835_delay(500);

    bcm2835_gpio_write(PIN、LOW);

    bcm2835_delay(500);

    }

    bcm2835_close();

    0 を返します。

    }

    注: GPIO の番号付け方法が異なります。 PCB ボードの物理インターフェイス番号が使用され、LED は Raspberry Pi Zero W ボードの 12 ピンに接続されます。

    4.3 コンパイルと実行
    コンパイル
    pi@raspberrypi:~ $ gcc 点滅_led.c -o 点滅_led -l bcm2835

    -l bcm2835 は、bcm2835 共有ライブラリを動的にロードすることを意味します

    走る
    sudo ./blink_led

    Ctrl+C を使用してループを中断します。