Raspberry Piの初期設定

Raspberry Pi Imager 1.8.5を使ったインストールについては、こちらのページを参照してください。 以前のバージョンよりも、Wifiの設定など便利な設定ができるようになっています。

Raspberry Pi 2/3/4 に Ubuntu Server 20.4をインストールして、MIDIのプログラムを書くまでの初期設定を記載します。Raspberry Pi 2 の場合、32bit版のみインストールできます。、Pi 3/4 は32bit版、64bit 版の両方がインストール可能です。 インストールは、Raspberry Pi Imagerをhttps://www.raspberrypi.com/software/ からダウンロードするのが便利です。 下のイメージはRaspberry Pi Imager使ってインストールする手順を示しています。 「OSを選ぶ」「ストレージを選ぶ」「書き込む」の順です。マウスオーバーで拡大します。

ここではUbuntu Server 20.4をインストールしています。

Raspberry Piに、Micro SDカードを差し込み、ディスプレイとUSBキーボードを接続します。電源を入れると、しばらく初期設定が始まります。Login:が表示されてログイン待ちとなります。Ubuntuは初期状態では以下のLogin IDとパスワードでログインできます。

> Login:ubuntu
> Password:ubuntu

ログインすると、パスワードを変更するように促されます。Currentにはubuntuと入力します。その後、新しいパスワードを入力して下さい。

you are required to change your password immediately
> Current password:ubuntu
> New password:
> Retype new password:

パッケージのインストール

C, C++の開発環境を整えます。

> sudo apt install net-tools
> sudo apt install gcc g++ make cmake
> sudo apt install libi2c-dev git-core

GPIOを使いたいのでWiringPiをインストールします。

> git clone https://github.com/WiringPi/WiringPi.git
> cd WiringPi
> ./build

ASIOの開発環境をインストールします。

> sudo apt install libasound2 libasound-dev

これで、MIDIのプログラムをコンパイルできます。続いてaconnectとpmidiを使いたいので以下をインストールしておきます。

> sudo apt install alsa-utils pmidi

ついでにjackの環境をインストールします。

  > sudo apt install jackd2 libjack-jackd2-dev

日本語キーボードの設定

日本語キーボードの設定には、raspi-configを使える場合と使えない場合があります。何が違うのか良くわかっていません。

> sudo apt install raspi-config

raspi-configがインストールできない場合は以下のコマンドを試してみてください。

> sudo dpkg-reconfigure keyboard-configuration
*
WiringPiでLチカ

Raspberry PiにLEDを接続して点滅させるLチカ、WiringPiのライブラリを使ってC言語のプログラムを書く時、多少悩みましたので記録しておきます。 Raspberryの物理的なピンは40ピンあり、それぞれのピンに以下のような役割が配置されています。試しに、右下の3つのピン、 GPIO.16, GPIO.20, GPIO.21にLEDを接続します。物理的ばピンの番号は、36,38,40です。



3V3 power 1 2 5V power
GPIO2(SDA) 3 4 5V power
GPIO3(SLC) 5 6 Ground
GPIO4(GPCLK0) 7 8 GPIO14(TXD)
Ground 9 10 GPIO15(RXD)
GPIO17 11 12 GPIO18(PCM_CLK)
GPIO27 13 14 Ground
GPIO22 15 16 GPIO23
3V3 power 17 18 GPIO24
GPIO10(MOSI) 19 20 Ground
GPIO9(MISO) 21 22 GPIO25
GPIO11(SCLK) 23 24 GPIO8(CE0)
Ground 25 26 GPIO7(CE1)
GPIO0(ODSD) 27 28 GPIO1(ID_SC)
GPIO5 29 30 Ground
GPIO6 31 32 GPIO12(PWM0)
GPIO13(PWM1) 33 34 Ground
GPIO19(PCM_FS) 35 36 GPIO16
GPIO26 37 38 GPIO20(PCM_DIN)
Ground 39 40 GPIO21(PCM_DOUT)

WiringPiを使って、Lチカするためのピンの番号は16,20,21でも、36,38,40でもなく、 readallコマンドで操作するピン番号を調べる必要があります。 Termialでreadallを入力すると以下のように表示が出ます。wPiと書かれている欄が制御するピン番号です。 GPIO.16, GPIO.20, GPIO.21は、ピン27, 28 ,29 を制御します。

> gpio readall
+-----+-----+---------+------+---+---Pi 2---+---+------+---------+-----+-----+
| 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  | 1 | ALT0 | TxD     | 15  | 14  |
|     |     |      0v |      |   |  9 || 10 | 1 | ALT0 | RxD     | 16  | 15  |
|  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 0 | IN   | GPIO. 1 | 1   | 18  |
|  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 2---+---+------+---------+-----+-----+

wPiの欄が、ピン番号として必要な情報です。プログラムは以下のようになります。 blink.cとして保存します。

  #include <wiringPi.h>

    #define GPIO16 27 
    #define GPIO20 28 
    #define GPIO21 29 
    
    int main (void)
    {
      wiringPiSetup () ;
      pinMode (GPIO16, OUTPUT) ;
      pinMode (GPIO20, OUTPUT) ;
      pinMode (GPIO21, OUTPUT) ;
    
      digitalWrite (GPIO16, LOW) ;	//消灯
      digitalWrite (GPIO20, LOW) ;	//消灯
      digitalWrite (GPIO21, LOW) ;	//消灯
    
      while (1)
      {
        digitalWrite (GPIO21,  LOW) ;	//GPIO21消灯
        digitalWrite (GPIO16, HIGH) ;	//GPIO16点灯
        delay (1000) ;	                //1秒待つ
        digitalWrite (GPIO16,  LOW) ;	//GPIO16消灯
        digitalWrite (GPIO20, HIGH) ;	//GPIO20点灯
        delay (1000) ;	                //1秒待つ
        digitalWrite (GPIO20,  LOW) ;	//GPIO20消灯
        digitalWrite (GPIO21, HIGH) ;	//GPIO21点灯
        delay (1000) ;	                //1秒待つ
      }
      return 0 ;
    }

以下のコマンドでコンパイルします。コンパイルに成功すると./blinkで動作します。

>gcc -oblink blink.c -lwiringPi
>./blink