Raspberry Pi をはじめる（Raspberry Pi 3 Model B）

## モノを用意

### ハードウェア
- RaspberryPi 3 Model B
- micro SDカード 32GB
- USBマウス
- USBキーボード
- SORACOM Air SIM
- 3G対応データ通信端末AK-020
- USBカメラ

### OSバージョン
~~~
$ cat /etc/debian_version
9.6
~~~

## ログイン
User name : pi
Password : raspberry

## コマンド

### シャットダウン

~~~
$ sudo shutdown -h now
~~~

### リブート

~~~
$ sudo reboot
~~~

### ディスク容量・使用量を調べる

全体

~~~
df -h
~~~

カレントディレクトリ

~~~
du -h
~~~


## SSH接続
PuTTYなどを用いる。ポート22。

## [WiFi設定](https://raspida.com/wifi4raspbian)

~~~
$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf

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

network={
        ssid="XXXX"
        psk="XXXX"
}

~~~

~~~
$ cat /etc/dhcpcd.conf
~~~

WiFiの切断

~~~
$ sudo ifconfig wlan0 down
~~~

## [SORACOM Air SIM](https://kokensha.xyz/raspberry-pi/raspberrypi-soracom-air-sim-3g-usb-ak-020/)

[SORACOMユーザーコンソールで設定](https://console.soracom.io/)

接続

~~~
sudo /usr/local/sbin/connect_air.sh
~~~

ソラコムSIMの接続確認

~~~
$ifconfig ppp0
~~~

## [バックアップ](https://itdecoboconikki.com/2017/02/16/raspberry-pi-backup-img-make/)

**同じメーカー、同じ容量よりも大きいSDカードを用いる場合（Raspi本体不要）**
1．Win32 Disk ImagerでImage Fileのところでxxxx.imgと指定、SDカードのドライブを選択して、Readボタンを押し、PCに保存します
2．SD Card Formatterを用いてSDカードをフォーマットします
3．バックアップした.imgをWin32 Disk ImagerでSDカードに書き込んでRaspiに差し込めばOKです。

**違うメーカー、同じ容量のSDカードを用いる場合（Raspi本体必要）**
上記で説明したやり方だと、セクタの数が若干少ないことで、エラーが出たりします。そこで用いるのが、[rpi-clone](https://github.com/billw2/rpi-clone)です。

1．rpi-cloneをインストールします。

~~~
$ git clone https://github.com/billw2/rpi-clone.git 
$ cd rpi-clone
$ sudo cp rpi-clone rpi-clone-setup /usr/local/sbin
~~~

2．microSDカードをカードリーダー（100均にもある）を用いてRaspiに挿します。認識しているか確認するには下記コマンドを実行します。`/dev/sda1`をして読み込まれていました。

~~~
$ sudo fdisk -l
~~~

3．rpi-cloneを実行します

~~~
$ sudo ./rpi-clone sda -f
~~~

- Initialize and clone to the destination disk sda?: `yes`
- Optional destination ext type file system label (16 chars max): `Enter`

30分くらい待つとコピーが完了しました。
コピーしたmicroSDカードをRaspiに挿すことで即使えます！

参考まで
- [Raspberry PiでIoTなシステム開発：SDカードのバックアップはrpi-cloneでやろう](http://www.homu.net/raspberry-pi%E3%81%A7iot%E3%81%AA%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E9%96%8B%E7%99%BA%EF%BC%9Asd%E3%82%AB%E3%83%BC%E3%83%89%E3%81%AE%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E3%81%AFrpi/)
- [RaspberryPiに機能を追加](https://dekiruyone.com/?p=4499)

## 起動時にプログラムを実行したい

### SORACOM SIM接続、IPアドレスの表示とPythonプログラムの実行

~~~
pi@raspberrypi:~ $ sudo vi /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

sleep 10

# Connect SORACOM SIM
nohup sudo /usr/local/sbin/connect_air.sh > /dev/null 2>&1 < /dev/null &

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

nohup /home/pi/miniconda/bin/python /home/pi/programs/capture.py > /home/pi/programs/`date +\%Y\%m\%d\%H\%M`_backup.log 2>&1 &

exit 0
~~~

### Pythonのパスの確認

~~~
pi@raspberrypi:~ $ which python
/home/pi/miniconda/bin/python
~~~

### [バックグラウンドで実行、ログを残す](https://qiita.com/alancodvo/items/15dc36d243e842448d33)
~~~
nohup /home/pi/miniconda/bin/python /home/pi/programs/capture.py > /home/pi/programs/`date +\%Y\%m\%d\%H\%M`_backup.log 2>&1 &
~~~

### バックグラウンドプログラムのプロセスの確認
~~~
pi@raspberrypi:~ $ nohup python /home/pi/programs/capture.py > /home/pi/programs/`date +\%Y\%m\%d\%H\%M`_backup.log 2>&1 &
[1] 936
pi@raspberrypi:~ $ ps u
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
pi         892  1.5  0.4   6140  4060 pts/0    Ss   18:57   0:00 -bash
pi         936 35.5  2.6 145776 23552 pts/0    R    18:58   0:00 python /home/pi
pi         938  0.0  0.3   7740  2968 pts/0    R+   18:58   0:00 ps u
~~~

### プロセスの確認
~~~
pi@raspberrypi:~ $ ps aux | grep python
root       556 52.5  6.8 226900 61292 ?        Sl   19:09   4:31 /home/pi/miniconda/bin/python /home/pi/programs/capture.py
pi        1225  0.0  0.0   4372   532 pts/0    S+   19:17   0:00 grep --color=auto python
~~~

プロセスを削除する場合

~~~
kill -9 [PID]
~~~

## cronで定期的になんかする

cronの設定をします。

- 10分おきにpythonのプログラムを起動
- 毎日23:55に再起動

~~~
$ sudo su root
$ crontab -e

*/10 * * * * /home/pi/miniconda/bin/python /home/pi/program/capture.py > /home/pi/program/log/`date +\%Y\%m\%d\%H\%M`_backup.log 

55 23 * * * /sbin/reboot
~~~
ctrl+xしたあとにy押して保存してEnterで終了します。

cronを再起動し、内容を確認します。

~~~
$ /etc/init.d/cron restart
$ crontab -l
~~~