LoginSignup
0
2

More than 3 years have passed since last update.

Reapberry Pi zero GPIO Lチカ

Last updated at Posted at 2020-06-13

Raspberry Pi zeroのGPIOで、久しぶりにLチカにトライし、あれこれと忘れていてはまりまくったので記録しておきます。
この記事を書くにあたって、以下のサイトを参照させていただきました。

image.png

  • GPIO18 (物理ピン番号12) にLEDをつなぐ。
  • GPIO18にアクセスする方法は以下のようにいくつかある。

コマンドライン

$>echo 18 > /sys/class/gpio/export              //GPIO18を使う宣言
$>echo out > /sys/class/gpio/gpio18/direction   //GPIO18を出力に設定
$>echo 1 > /sys/class/gpio/gpio18/value         //GPIO18をHIGHに設定
$>cat /sys/class/gpio/gpio18/value              //gpio18/valueを確認
1                                               //value=1
$>echo 0 > /sys/class/gpio/gpio18/value         //GPIO18をLOWに設定
$>cat /sys/class/gpio/gpio18/value              //gpio18/valueを確認
0                                               //value=0
$>echo 18 > /sys/class/gpio/unexport            //GPIO18を使わない宣言

pigpiod を利用

$>sudo apt install pigpio               //pigpioのインストール
$>sudo systemctl start pigpiod          //pigpioのスタート
$>echo 'm 18 w   w 18 1' > /dev/pigpio  //GPIO18を出力に設定、HIGHを書き込む
$>echo 'w 18 0' > /dev/pigpio           //GPIO18をLOWに設定

WiringPiを利用

$>sudo apt install wiringpi
$>gpio -g mode 18 out           //GPIO18を出力に設定、HIGHを書き込む
$>gpio -g write 18 1            //GPIO18をHIGHに設定
$>gpio -g write 18 0            //GPIO18をLOWに設定

各GPIOの設定を確認

$>gpio readall              //GPIOの状態を表示
 +-----+-----+---------+------+---+-Pi ZeroW-+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 |     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
 |   2 |   8 |   SDA.1 |   IN | 1 |  3 || 4  |   |      | 5v      |     |     |
 |   3 |   9 |   SCL.1 |   IN | 1 |  5 || 6  |   |      | 0v      |     |     |
 |   4 |   7 | GPIO. 7 |   IN | 1 |  7 || 8  | 0 | IN   | TxD     | 15  | 14  |
 |     |     |      0v |      |   |  9 || 10 | 1 | IN   | RxD     | 16  | 15  |
 |  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 0 | OUT  | GPIO. 1 | 1   | 18  | <== GPIO18は右側
 |  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     |
 |  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
 |     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |
 |  10 |  12 |    MOSI |   IN | 0 | 19 || 20 |   |      | 0v      |     |     |
 |   9 |  13 |    MISO |   IN | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |
 |  11 |  14 |    SCLK |   IN | 0 | 23 || 24 | 1 | IN   | CE0     | 10  | 8   |
 |     |     |      0v |      |   | 25 || 26 | 1 | IN   | CE1     | 11  | 7   |
 |   0 |  30 |   SDA.0 |   IN | 1 | 27 || 28 | 1 | IN   | SCL.0   | 31  | 1   |
 |   5 |  21 | GPIO.21 |   IN | 1 | 29 || 30 |   |      | 0v      |     |     |
 |   6 |  22 | GPIO.22 |   IN | 1 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  |
 |  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     |
 |  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |
 |  26 |  25 | GPIO.25 |   IN | 0 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  |
 |     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+-Pi ZeroW-+---+------+---------+-----+-----+

C言語

blink1.c
#include <stdio.h>
#include <wiringPi.h>

int main()
{
    wiringPiSetupGpio();    //GPIOのセットアップ

    pinMode(18, OUTPUT) ;   //GPIO18を出力に設定

    while (1){
        digitalWrite (18, HIGH);    //GPIO18をHIGHに設定
        delay (1000);               //1秒待つ
        digitalWrite (18,  LOW);    //GPIO18をLOWに設定
        delay (1000);               //1秒待つ
    }
    return 0;
}
  • コンパイルと実行
$>gcc blink1.c -l wiringPi
$>./a.out

bcm2835

  • 今日現在 v1.65が最新です。
  • bmc2835 のインストール
$>sudo wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.65.tar.gz
$>tar zxvf bcm2835-1.65.tar.gz
$>cd bcm2835-1.65/
$>sudo ./configure
$>sudo make
$>sudo make install

C言語

blink2.c
#include <stdio.h>
#include <bcm2835.h>

#define PIN RPI_GPIO_P1_12          //GPIO18 => 物理PIN番号12

int main()
{
    if (!bcm2835_init()) return -1; //bcm2835の初期化

    bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP); //GPIO18を出力に設定

    while (1){
        bcm2835_gpio_write(PIN, HIGH);  //GPIO18をHIGHに設定
        delay (1000);                   //1秒待つ
        bcm2835_gpio_write(PIN, LOW);   //GPIO18をLOWに設定
        delay (1000);                   //1秒待つ
    }
    return 0;
}
  • コンパイルと実行
$>gcc blink2.c -l bcm2835
$>./a.out
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2