Raspberry Piの初期設定手順、OSインストール、無線SSH接続、開発環境構築、LED点滅まで(CUI操作)

2020年11月23日

ラズパイを購入した後SSHで接続できるようにするまでの手順を備忘録として残しておきたいと思います。

OSをインストールしたSDカードの準備

OSダウンロード
https://www.raspberrypi.org/downloads/raspberry-pi-os/
CUIでやるのでLiteをダウンロード

SD Cardフォーマット

SDCardFormatterのダウンロード
https://www.sdcard.org/jp/downloads/formatter/eula_windows/index.html

SDカードをPCに差して起動します。

SDカードのドライブを選択してフォーマット

イメージ書き込み
balenaEtcherのダウンロード
https://www.gigafree.net/system/os/Etcher.html

Flashボタンを押下してOSを書き込みます。

microSDをラズパイに差して起動します。

ラズパイ起動後の無線LAN設定とSSH設定

ラズパイを起動したら無線LAN設定をします。

下記のようなコマンドを実行します。2.4GHzのSSIDを指定してください。

wpa_passphrase [SSID(2.4GHz)] [wifiパスワード]

すると下記のようなテキストが表示されます。

network={
        ssid=["SSID(2.4GHz)"]
        #psk="wifiパスワード"
        psk=[暗号化されたwifiパスワード]
}

この内容を記録しておきます。

ネットワーク設定ファイルの編集は下記のようなコマンドで実行

ファイル編集はnanoでやるのが簡単。

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

私はvi民なのでこっち使う。

sudo vi /etc/wpa_supplicant/wpa_supplicant.conf

Wifi設定で記録したパスワードを設定します。
先ほどの出力内容を元にファイルの下へ追記

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1


network={
        ssid=["SSID(2.4GHz)"]
        psk=[暗号化されたwifiパスワード]
}

ssidは””が必要なので気を付けます。因みに平文でpskを設定する場合は””で囲むとできます。暗号化したものはつける必要はありませんので今回はつけません。

次はSSHの有効化です。

SSHの有効化コマンド(必要な場合は実行)

sudo touch /boot/ssh

再起動します。

sudo reboot

再起動したらip aコマンドでIPアドレスを調べます。

ip a

1: lo:  mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 02:01:52:9b:00:09 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.22/24 brd 192.168.1.255 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::1:52ff:fe9b:9/64 scope link 
       valid_lft forever preferred_lft forever

こんな感じの表示の場合赤字の部分がラズパイのIPアドレスになります。

SSH接続確認は別のPCからteratermなどでアクセスします。

接続できたら完了!

raspi-configで必要な機能を有効化

raspi-configコマンドで必要な機能を有効化できます。

リモートGPIOの有効化

リモートGPIOを有効化するとラズパイのGPIO操作を別の端末からネットワーク経由で操作できます。

sudo raspi-config

Interfacing Optionsを選択しEnter

P8 Remote GPIOを選択しEnter

Yesを選択しEnter

SPIの有効化

SPI通信を行うプログラムを組みたい場合は有効化する必要があります。

sudo raspi-config

Interfacing Optionsを選択しEnter

P4 SPIを選択しEnter

Yesを選択しEnter

開発環境構築とLED点灯テスト

GPIO制御ライブラリの導入

必要な人はgpioの制御を行うライブラリを導入しましょう。

私はpigpioを使用するので、インストールします。

sudo apt install pigpio

continue?と聞かれたらy押下でEnterでOK

pigpioはpigpiodというプログラムと連携して処理するライブラリなので
インストールできたら

sudo pigpiod

で起動しておきます。

ラズパイを再起動しても常時起動するようにするには次のコマンドを叩きます。

sudo systemctl enable pigpiod

LED点灯回路の配線

今回用意した部品

電子部品 個数
ELPA HK-LED5H(R) x1
抵抗(330Ω) x1
ブレッドボード・ジャンパーワイヤ(オス-メス) x2
ブレッドボード BB-801 x1

抵抗(330Ω)はELPA HK-LED5Hに付属しています。

配線図

配線

接続元機器 接続元位置 接続先機器 接続先位置 その他
ラズパイ ピン番号12 ブレッドボード F25 ジャンパーワイヤ接続
ラズパイ ピン番号14 ブレッドボード H20 ジャンパーワイヤ接続
抵抗330Ω (任意) ブレッドボード H21
抵抗330Ω (任意) ブレッドボード H25
LED アノード(長い足) ブレッドボード J21
LED カソード(短い足) ブレッドボード J20

ラズパイのピン番号

ラズパイのGPIO番号

※プログラムを作成する時はGPIO番号で指定します。

Pythonでpigpioを使用しLED点灯

pythonでpigpioを使用する場合モジュールが必要なので、必要な場合は下記のコマンドを実行

sudo apt-get install python-pigpio python3-pigpio

を実行してモジュールをインストールしましょう。

テストプログラムを実行します。

テストプログラムはこちらの記事の物を使わせていただきました。

#!/usr/bin/python3
# -*- coding: shift-jis -*-

import time
import pigpio #pigpioライブラリをインポートする

pi = pigpio.pi() #GPIOにアクセスするためのインスタンスを作成します
pi.set_mode(18, pigpio.OUTPUT) #GPIOのモードを設定します他にINPUTとかある。18はGPIO18の18番です。

while True:
	pi.write(18, 1) #GPIO18番のレベルをHIGHにします
	time.sleep(0.5)
	pi.write(18, 0) #GPIO18番のレベルをLOWにします
	time.sleep(0.5)
実行結果

LEDが点滅したらOK

※配線図と写真の配線が少し違うのは図を作成する際に見にくくなったからです。

Javaでpigpioを使用しLED点灯

Javaの場合コンパイルとかで時間を喰う可能性があるので、リモートでテストしていくことにします。
なのでプログラム自体はWindowsマシンで作って動かします。

リモート操作をする場合まずはraspi-configでリモートGPIOを有効にします。

続いてプログラムです。
下記のサイトなどからjpigpioをダウンロードしてください。
https://github.com/nkolban/jpigpio

私のブランチではwatchdogのバグだけ暫定版として修正しときました。
とりあえず私はこっちで動かしていきます。
https://github.com/nompor/jpigpio

PigpioSocketのIPを自分のラズパイのIPに変更してサンプルコードを実行してみましょう。

import jpigpio.PigpioException;
import jpigpio.PigpioSocket;

public class TestLED {
	public static void main(String[] args) throws InterruptedException, PigpioException {
		//接続するラズパイのIPとポートを指定
		//pigpiodのデフォルトポートは8888
		PigpioSocket sock = new PigpioSocket("ラズパイのIPアドレス", 8888);
		while(true){
			sock.gpioWrite(18, true);//LED ON
			Thread.sleep(500);
			sock.gpioWrite(18, false);//LED OFF
			Thread.sleep(500);
		}
	}
}
実行結果

LEDが点滅したらOK


pigpiodのホストやポートなどを確認したい場合は、このコマンドで確認できます。

sudo netstat -antup

ラズパイ内でJavaを使う場合はJavaをインストールするのですが、ラズパイZeroの場合はJava11とか使えないと思うので、Java8にしておきましょう。
今回は使いませんでしたが一応インストールコマンドのっけときます。

sudo apt-get install openjdk-8-jdk