Edited at

初めてラズパイをセットアップしてみた

普段はwebエンジニアとして働いています。

最近自分の時間を作れるようになってきて、新しいことをしてみようということで、IOTにチャレンジしたいと思います。

最終ゴールは、ラズパイを使って自宅の家電をスマホから操作できるようにしたいなと。

どうやって実現するかはまだ未定。というか不明です。。

まずは、ラズパイを動かして、電子回路を組めるようになりたい。


買ったもの

ラズパイといっても何種類かあってどれを買おうか悩みましたが、安くてかつ扱いやすそうなラズパイZero WHを買いました。

IMG_20181029_134001.jpg

Zeroというシリーズは、今まで発売されてきたラズパイの半分の大きさで、値段の方も648円〜購入可能ととてもお手頃。

ただし、最も安いRaspberry Pi Zeroは、Wi-FiとBluetoothが利用できず、さらにGPIOのピンヘッダがついておりません。(よくわかっておりませんが、GPIOというのは電子回路に必要で、使うときははんだ付けをしなければなりません。)

そこでこの3つが備わっているRaspberry Pi Zero WH に決めました。

miniHDMIとMicroUSBの変換コネクターがセットになっているものをAmazonで購入しました。

Raspberry Pi Zero WH スターターセット

IMG_20181029_213538__01.jpg

SDも必要になりますので、用意してください。

ものによっては動かないものもあるらしいので、こちらで動作確認済みとなっているものを買いましょう。(Class10以上が好ましい)

私が買ったのはこちら

Transcend microSDHCカード 8GB Class10 TS8GUSDHC10


用意したもの


  • USB電源アダプタ(電圧5V)

  • microUSBケーブル

アンドロイドの充電器を使います。


セットアップ


OSインストール

公式サイトのOSインストール方法に従ってインストールしていきます。

NOOBSというインストーラをおすすめされていますが、簡単な代わりにインストールに時間がかかるし、容量が大きくなってしまうとのことなので、NOOBSは使わず、PC上でOSイメージをSDにコピーする方法で進めていきます。


① OSイメージをダウンロード

raspbianというラズパイ用のOSをインストールします。

WITH DESKTOPとLITEという2種類があって、ようは通常版とライト版。

通常版はGUIで操作ができ、ライト版はCUIのみ

今回は、ディスプレイに映さずにラズパイを起動してみようと思うので、LITEを選択。

(ダウンロードに時間がかかりますので、Torrentファイルをダウンロードできる方は、「Download Torrent」をおすすめします。)

スクリーンショット 2018-10-29 22.23.41.png


② EtcherでOSをSDカードにコピー

Etcherというアプリケーションを使って、SDにダウンロードしたOSイメージをコピーしていきます。

Etcherを起動するとこのような画面が表示されるので、「Select image」からダウンロードしたzipファイルを選択。

スクリーンショット 2018-10-29 20.58.34.png

「Select drive」からコピー先のSDを選択。

スクリーンショット 2018-10-29 22.35.21.png

最後に「Flash!」を押すとコピーがはじまります。

5分程かかりますのでしばらく待ちます。

スクリーンショット 2018-10-29 22.36.23.png

Flash Complete!と表示されたらコピー完了になります。

スクリーンショット 2018-10-29 22.45.38.png


SSHとWifiの設定

SSHが初期状態で起動できるように、ファイルを作成しておく

(Etcherでの書き込みを完了すると、PCからSDが認識されていないことがあるので、一度抜いて再度差し込んでください)

% cd /Volumes/boot

% touch ssh

Wifiも起動時に自動で接続できるように

% vim wpa_supplicant.conf

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

update_config=1
country=JP

network={
ssid="接続するSSID"
psk="パスワード"
}

ファイルの追加が終わったら、SDの外に移動して、PCからSDの取り出します。

※ターミナルがSD内にアクセスしたまま、PCから取り出すと書き込みが完了しません。

# /Volumes/bootから移動

% cd ..


ラズパイを起動

microSDを左側に差し込みます。

IMG_20181030_224838.jpg

電源をPWRと書いてある右側にmicroUSBを接続します。(WITH DESKTOPをダウンロードした場合は、先にラズパイをディスプレイと繋げておきます。)

IMG_20181030_224914.jpg

緑色に光った!

IMG_20181030_225044.jpg


SSHで接続

% ssh pi@raspberrypi.local

初めての接続には確認があるので、「yes」と入力。

The authenticity of host 'raspberrypi.local (192.168.3.8)' can't be established.

ECDSA key fingerprint is SHA256:BmtkkBgFMA8ImYwI7kw9IiTAZvXteYDlNt9gDWY8Tyg.
Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'raspberrypi.local,192.168.3.8' (ECDSA) to the list of known hosts.

パスワードを聞かれるので「raspberry」と入力。

pi@raspberrypi.local's password: 

接続完了です。

Linux raspberrypi 4.14.71+ #1145 Fri Sep 21 15:06:38 BST 2018 armv6l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.

pi@raspberrypi:~ $


初期設定

こちらを参考にさせていただきました。


デフォルトのパスワードを変更

パスワードがデフォルトのままだと、セキュリティが弱いので変更

$ passwd

Changing password for pi.
(current) UNIX password: raspberry #デフォルトのパスワードを入力
Enter new UNIX password: 「新しいパスワード」
Retype new UNIX password: 「新しいパスワード」
passwd: password updated successfully


パッケージの更新

$ sudo apt-get update

$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade


設定の変更

設定画面を表示

$ sudo raspi-config

日本時間に変更

4 Localisation Options を選択。(Enterキー)

I2 Change Timezone を選択。

Asia → Tokyo を選択。

スクリーンショット 2018-10-31 21.42.40.png

日本語に変更

4 Localisation Options を選択。(Enterキー)

I1 Change Locale

ja_JP.UTF-8 UTF-8 でEnter。

スクリーンショット 2018-10-31 21.45.25.png

en_GB.UTF-8 でEnter。

スクリーンショット 2018-10-31 21.48.01.png

設定は完了ですので、Finishを選択。

設定を反映させるために、ラズパイを再起動させます。

$ sudo reboot

SSH接続が切れるので、ラズパイが点灯したら再度接続する。

% ssh pi@raspberrypi.local

pi@raspberrypi.local's password: #変更したパスワードを入力

時間設定ができているか確認

pi@raspberrypi:~ $ date

Wed 31 Oct 21:59:11 JST 2018


やった方がいいこと


日本語フォントが入っていないのでインストール

$ sudo apt-get install fonts-ipaexfont


vimのインストール

$ sudo apt-get install vim


暗証鍵でのログイン

PC側で暗証鍵(raspi.pem)を作成

% cd ~/.ssh

% ssh-keygen -t rsa -f raspi
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): #ssh接続時に聞かれるパスワード、空でもよい
Enter same passphrase again:

# raspiとraspi.pubという2ファイルが生成される。

raspi.pubという公開鍵をラズパイの中に配置します。

raspi.pubをコピー。ssh-rsa〜最後までコピーする。

% cat raspi.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCxpUEqVT4HR0OuOyf9PWGESQYhS+TJfUkkeyD8XcZQs/eb2i94qAAIwjr1M0+K1vhr81IKZDwPfBGaqsiwXffjSy40yfBddKP0B6UTnMtlSleYVCvpY9d9XSQeL2YC06GOX2pFdH8DLBZlStuBEO5zJKEXnIsMWPonSoj5EvMdzURh/wdFgbMQwd2DdeDqr90PEtVheIRtRmF/RKbmxFxP7lUs4SK08qHpYaHP+blH1aC2JXaTNu/3T5oSyMiHxbrb5YMcA7eOz/DHjOqRZ2bsOH5T7RqGr15TFRFgUD0sLTDhBoIjbN9+9mq2yn2tKpP6EOBUdeO9/RIK2HZCNgIV hoge@hoge.local

ラズパイで.sshディレクトリを作成して、authorized_keysというファイルにコピーした内容を書き込む

$ cd ~

$ mkdir .ssh
$ vim .ssh/authorized_keys

# authorize_keys

# コピーしたのを貼り付ける
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCxpUEqVT4HR0OuOyf9PWGESQYhS+TJfUkkeyD8XcZQs/eb2i94qAAIwjr1M0+K1vhr81IKZDwPfBGaqsiwXffjSy40yfBddKP0B6UTnMtlSleYVCvpY9d9XSQeL2YC06GOX2pFdH8DLBZlStuBEO5zJKEXnIsMWPonSoj5EvMdzURh/wdFgbMQwd2DdeDqr90PEtVheIRtRmF/RKbmxFxP7lUs4SK08qHpYaHP+blH1aC2JXaTNu/3T5oSyMiHxbrb5YMcA7eOz/DHjOqRZ2bsOH5T7RqGr15TFRFgUD0sLTDhBoIjbN9+9mq2yn2tKpP6EOBUdeO9/RIK2HZCNgIV hoge@hoge.local

パーミッションの変更

$ chmod 600 .ssh/authorized_keys

動作確認

# 一旦ラズパイからログアウト

$ exit

# 認証鍵でログイン
% ssh -i ~/.ssh/raspi pi@raspberrypi.local
$

簡単にSSHログインできるようにエイリアス設定をする

% vim ~/.ssh/config

# ~/.ssh/config

Host raspi
HostName raspberrypi.local
Port 22
User pi
IdentityFile ~/.ssh/raspi

以下のコマンドで接続可能に。

% ssh raspi


SSH設定変更

$ sudo vim /etc/ssh/sshd_config

# /etc/ssh/sshd_config

# ポート変更
#Port 22

Port 10022  #適当なポート番号に変更。上記でエイリアス設定している場合はそちらも変更しておくこと。

# rootユーザーでのログイン禁止
#PermitRootLogin prohibit-password

PermitRootLogin no

# パスワードでのログイン禁止
#PasswordAuthentication yes

PasswordAuthentication no

sshdを再起動

$ sudo /etc/init.d/ssh restart

[ ok ] Restarting ssh (via systemctl): ssh.service.

SSHに認証鍵を使わずにログインできなくなりました。

% ssh pi@raspberrypi.local

ssh: connect to host raspberrypi.local port 22: Connection refused


Gitのインストール

ツールを導入するためにgitをインストール

$ sudo apt-get install -y git

Reading package lists... Done
Building dependency tree
.
.
.
Setting up git (1:2.11.0-3+deb9u4) ...

$ git --version
git version 2.11.0


anyenvをインストール

pythonのバージョン管理するために、いつも愛用しているanyenvという言語のバージョン管理ツールを使う。

pythonのバージョン管理pyenvやNodeのバージョン管理ndenvや他にもrbenv, phpenv, goenvなど、様々な言語のバージョン管理をまとめてできるツールである。

このツールを使えば、最新バージョンへのアップグレードが簡単に行える。また、アプリケーションによって使用するバージョンを変えることもできる。

$ git clone https://github.com/riywo/anyenv ~/.anyenv

echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_anyenv

echo 'eval "$(anyenv init -)"' >> ~/.bash_anyenv

.bashrcに追記する


~/.bashrc

if [ -f ~/.bash_anyenv ]; then

. ~/.bash_anyenv
fi

反映させる

$ source ~/.bashrc

# 動作確認
$ anyenv -v
anyenv


python3系をインストール

依存関係モジュールをインストールしておきます。

$ sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev

pythonのバージョン管理ツールpyenvをanyenvでインスールする

$ anyenv install pyenv

$ exec $SHELL -l

インストールしたいバージョンを確認

$ pyenv install -l

Available versions:
2.1.3
2.2.3
2.3.7
2.4
2.4.1
2.4.2
.
.
.

バージョンを決めたら、インストールする。

今回は、最新版の3.7.1をインストール。

(インストールがあまりにも長いので、-vオプションでログを表示させた方が安心して待てます。30分以上かかりました。)

$ pyenv install -v 3.7.1

Downloading Python-3.7.1.tar.xz...
-> https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tar.xz
Installing Python-3.7.1...

インストールできたか確認

$ pyenv versions

* system (set by /home/pi/.anyenv/envs/pyenv/version)
3.7.1

pythonのバージョンをセットする

$ pyenv global 3.7.1

pipのアップグレード

$ pip install --upgrade pip


セットアップ編完了

とりあえず、ラズパイの初期設定は完了しました。

仕事とかで、サーバー管理してましたので、ここまでは特に躓くことなくできました。

次は、電子回路に挑戦です。

回路なんて、中学・高校のとき以来なので、全然覚えていません(笑)

ので、お勉強の方からしていきます〜