普段はwebエンジニアとして働いています。
最近自分の時間を作れるようになってきて、新しいことをしてみようということで、IOTにチャレンジしたいと思います。
最終ゴールは、ラズパイを使って自宅の家電をスマホから操作できるようにしたいなと。
どうやって実現するかはまだ未定。というか不明です。。
まずは、ラズパイを動かして、電子回路を組めるようになりたい。
買ったもの
ラズパイといっても何種類かあってどれを買おうか悩みましたが、安くてかつ扱いやすそうなラズパイZero WHを買いました。
Zeroというシリーズは、今まで発売されてきたラズパイの半分の大きさで、値段の方も648円〜購入可能ととてもお手頃。
ただし、最も安いRaspberry Pi Zeroは、Wi-FiとBluetoothが利用できず、さらにGPIOのピンヘッダがついておりません。(よくわかっておりませんが、GPIOというのは電子回路に必要で、使うときははんだ付けをしなければなりません。)
そこでこの3つが備わっているRaspberry Pi Zero WH に決めました。
miniHDMIとMicroUSBの変換コネクターがセットになっているものをAmazonで購入しました。
Raspberry Pi Zero WH スターターセット
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」をおすすめします。)
② EtcherでOSをSDカードにコピー
Etcherというアプリケーションを使って、SDにダウンロードしたOSイメージをコピーしていきます。
Etcherを起動するとこのような画面が表示されるので、「Select image」からダウンロードしたzipファイルを選択。
「Select drive」からコピー先のSDを選択。
最後に「Flash!」を押すとコピーがはじまります。
5分程かかりますのでしばらく待ちます。
Flash Complete!と表示されたらコピー完了になります。
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を左側に差し込みます。
電源をPWRと書いてある右側にmicroUSBを接続します。(WITH DESKTOPをダウンロードした場合は、先にラズパイをディスプレイと繋げておきます。)
緑色に光った!
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 を選択。
日本語に変更
4 Localisation Options を選択。(Enterキー)
I1 Change Locale
ja_JP.UTF-8 UTF-8 でEnter。
en_GB.UTF-8 でEnter。
設定は完了ですので、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に追記する
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
セットアップ編完了
とりあえず、ラズパイの初期設定は完了しました。
仕事とかで、サーバー管理してましたので、ここまでは特に躓くことなくできました。
次は、電子回路に挑戦です。
回路なんて、中学・高校のとき以来なので、全然覚えていません(笑)
ので、お勉強の方からしていきます〜