RaspberryPiで作業画像を定期的にTweetする

# はじめに
ラズパイで撮影した画像をTwitterに自動投稿するbotを作成したので、その手順を書き記したものです。
OSのインストールから完成まで、なるべく細かく手順を記載しました。
開発の参考になれば幸いです。

## こんなひとに向けて書いています
- RaspberryPiを初めて触る人
- TwitterAPIを初めて触る人

# 経緯
在宅勤務になって、死ぬほど作業効率が超落ちました。
そう、私は「**誰かに見られていないとサボってしまう意志の弱い人間**」なのです。

作業風景を自動投稿して全世界に公開したら、そんなゴミクズでもPCの前でスマホを触らなくなるだろうし、
毎日スウェットではなく人に会えるような格好で仕事をするだろうと考え、当botを作成しました。
# 使ったもの
- [Raspberry Pi Zero WH (RASPIZWHSC0065)](https://raspberry-pi.ksyic.com/main/index/pdp.id/406)
- [Piカメラ Official V2 for 3/2/1/0 (913-2664)](https://raspberry-pi.ksyic.com/main/index/pdp.id/144)
- [Raspberry Pi Zero W公式シェル新品、RPI zero ABSカバーシェルシェル（通常、GPIOおよびカメラ用）、2 15 cmカメラFFCフレキシブルケーブル付き](https://www.amazon.co.jp/gp/product/B07QH455KY/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1)
- MacBookPro 2012Mid
- microSD

# 1. RaspberryPiにOSをインストールする
![スクリーンショット 2021-02-19 0.29.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/e1b52281-4d82-12c9-4efd-618f37a09e8c.png)
https://www.raspberrypi.org/software/
上記のページからRaspberry Pi Imagerをインストールしましょう。
書き込みを行いたいSDカードをセットして、「WRITE」をクリックすればあとは勝手に書き込んでくれます。
# 2. ラズパイを無線LANに接続する
そのまま、macbookでSDカードにsshファイルと、wpa_supplicant.confを追加します。
## 2-1. sshファイルの追加
```zsh
touch /Volumes/boot/ssh
```

## 2-2. wpa_supplicant.confファイルの追加
```zsh
vi /Volumes/boot/wpa_supplicant.conf
```

```wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
country=JP
update_config=1

network={
    ssid="wifiのSSIDを書くところ"
    psk="wifiのパスワードを書くところ"
}
```
※ ssidと、pskは環境によって書き換えてください。

## 2-3. 接続テストを行う
ラズパイにSDカードをセット後、電源をつないで暫く待つ。
※ デーモンの起動とか色々あるから

そのあとMacからpingで疎通確認をしてみる。

```zsh
$ping raspberrypi.local
PING raspberrypi.local (XXX.XXX.XXX.XXX): 56 data bytes
64 bytes from XXX.XXX.XXX.XXX: icmp_seq=0 ttl=64 time=6.344 ms```
```
OKっぽいのでssh接続する

```zsh
ssh pi@raspberrypi.local
```
※ 初期パスワードは「**raspberry**」です。
# 3. Twitterのアプリ作成
## 3-1. Twitter developerの認証
[Twitter Developers](https://developer.twitter.com/en/apps)ページにアクセスして、アプリの作成を行います。
### 3-1-1. 申請を開始する
![スクリーンショット 2021-03-01 7.54.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/2fbc5b6d-22f9-9cd7-5658-c25d5907e0d1.png)
「Create an app」をクリックします。
![スクリーンショット 2021-03-01 7.54.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/e3235440-14a2-cfd3-5189-922a8f275d6b.png)
「appを作るのにはdevelopper accountとして認証される必要があるよ〜」 的なことを言っているのでApplyをクリック
### 3-1-2. アプリの作成理由を説明する
![スクリーンショット 2021-03-01 7.55.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/337bc5ae-487f-7626-5a65-c495c55985ac.png)
「お前はなんのためにTwitter使うねん」的なことを聞かれているので、画像の順番でクリック&クリック
### 3-1-4. メールアドレス認証を行う
![スクリーンショット 2021-03-01 7.58.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/371b27a0-1f17-30c8-7ecd-00b9fff957d4.png)
※ 本垢がある場合は画像のようにエイリアスを使うと便利です
### 3-1-5. 質問事項に答える
![スクリーンショット 2021-03-01 7.58.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/fc8dcf1d-1957-140c-069f-a072e8849c7b.png)
質問事項に答えて、Nextをクリック
### 3-1-6. アプリを作成する理由を英語で説明する
![スクリーンショット 2021-03-01 8.03.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/5e5d4c7c-b91a-9439-8427-52c6f1000ef6.png)
英語が苦手な方は、[Google翻訳](https://translate.google.co.jp/?hl=ja&sl=ja&tl=en&op=translate)で日本語文章を打ち込めばいいと思います。
※ アプリ作成時にも英作文があるので、文章残しておくとよいです。
![スクリーンショット 2021-03-01 8.02.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/d75732c1-1378-4cf5-1237-ffcf4141063d.png)

私が作成した文章は下記に記載するので参考程度にどうぞ（コピペで認証通るのかどうかはわからない）
> Since September of last year, my work has been working from home.
No one monitors, unlike when I was working in the office.
I'm a weak-willed person, so I skip it.

> I want someone to monitor me by automatically posting the work status on the Raspberry Pi.
Someone watching me

### 3-1-7. 用途を入力する
![スクリーンショット 2021-03-01 8.03.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/2d7cca20-3531-89de-74c8-ae4d0649da1e.png)
今回の場合はすべてOFFで大丈夫です。
### 3-1-8. 規約に同意する
![スクリーンショット 2021-03-01 8.03.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/a41a8cfc-4e3b-2fe4-5ef5-6445eb339856.png)
チェック入れて、「Submit application」をクリックします。
![スクリーンショット 2021-03-01 8.03.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/2fdc2581-186c-1327-a914-d10483b7c00a.png)
これで申請は完了です。承認をもらえたらメールが届くので気長にまちましょう。
## 3-2. アプリ作成
申請が通ったら、いよいよTwitterAPIアプリを作成していきます。
### 3-2-1. プロジェクトの作成
![スクリーンショット 2021-03-01 8.52.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/1105f159-3e99-8baa-5eb6-9b52586b936c.png)
届いたメールの「Confirm your email」をクリックします
![スクリーンショット 2021-03-01 9.11.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/ad17b629-39a0-8b17-196b-5290a93b067e.png)
コンソール画面の「create project」をクリックします
### 3-2-2. 必要事項を記入する
私の設定を公開するので参考にしてください
![スクリーンショット 2021-03-01 9.13.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/2340f8e3-9016-ad2c-623b-d8c5287350f2.png)
![スクリーンショット 2021-03-01 9.13.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/cbf11979-b343-5a09-c63a-95260332423a.png)
![スクリーンショット 2021-03-01 9.14.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/6585ef4d-5930-c145-2285-046c4b73bc2b.png)
※ [前手順](# 3-1-6. アプリを作成する理由を英語で説明します。)で作成した英文をそのまま貼り付ければ良いです
![スクリーンショット 2021-03-01 9.14.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/8e6623b9-1fc8-fd96-01bf-f868c18786b2.png)
※ App nameは重複が許されないみたいなので、適当に書き換えてください
![スクリーンショット 2021-03-01 9.16.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/86815906-78c9-741a-5064-ea808c581ccf.png)
完了後、上記の画面が表示されます。
~~アプリ作成に必要な情報が表示されるので、しっかりと控えておきましょう~~
こちらの情報は再作成するので、控えなくても大丈夫です
## 3−3. token情報を取得する
### 3-3-1. 権限の変更を行う
Appが作成できたら左のパネルに「App名」の項目が出現するので、「App名」 > 「Edit」の順にクリックして
権限変更画面に移動します。
![スクリーンショット 2021-03-01 10.49.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/0dd11e10-d730-a8d1-202f-e90542195b22.png)
作成するAppでは書き込みも行うので、「Read and Write」を選択して、「Save」をクリックします
![スクリーンショット 2021-03-01 10.53.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/51a63944-2d5f-01c4-e15d-d1d66acb678a.png)
### 3-3-2. token情報の生成と取得
「Keys and tokens」タブを選択したあと、
「API key & secret」 と 「Access token & secret」のRegenerateをクリックして、token情報を作成します。
※ 作成したtoken情報はアプリに設定する必要があるので控えておいてください
![スクリーンショット 2021-03-01 11.13.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1124047/1e7534d8-4180-0d3f-c883-654a7f995096.png)
# 自動投稿スクリプトを作成する
[GitHub](https://github.com/nekonisi/monitor_me)でリポジトリを公開しているので、cloneしてください。

```bash
git clone https://github.com/nekonisi/monitor_me.git
```
そのあと、const.py.exampleをコピーしてconst.pyを作成、
値を[前手順](#tokenとかを取得する)で取得した情報に書き換えてください

```bash
cd monitor_me/
cp const.py.example const.py
vim const.py
```

```const.py
#!/usr/bin/env python
#coding: UTF-8

#設定値の定数化
CONSUMER_KEY    = "YOUR_CONSUMER_KEY"
CONSUMER_SECRET = "YOUR_CONSUMER_SECRET"
ACCESS_TOKEN    = "YOUR_ACCESS_TOKEN"
ACCESS_SECRET   = "YOUR_ACCESS_SECRET"
```

下記コマンドで動作確認をしましょう

```bash
python monitor_me.py
```

問題なければ、カメラで撮影された画像がtweetされているはずです。
# crontabの登録
定期的に画像投稿をするためにcrontabを登録しましょう。

```bash
crontab -e
```

```
*/1 10,11,13-18 * * 1-5 python /home/pi/monitor_me/monitor_me.py
```
上記のように登録しておけば月〜金の10~19時(12時台はなし）で1分毎に投稿されます。

# おわりに
今回、初めて記事を作成しました。
どんな内容でも、なにかフィードバックいただけると幸いです。
作業風景は[コチラ](https://twitter.com/NekonisiD)で投稿しています。
サボってたら怒ってください。

# 参考サイト
[それ、ラズパイでつくれるよ——画像の自動ツイートもできるよ！ | fabcross](https://fabcross.jp/category/make/sorepi/20200515_raspi_auto_tweet.html)