M5 Timer Camera F から Amazon S3 へ定点観測写真をアップロードする 

# 本記事について
**[M5 Timer Camera F](https://docs.m5stack.com/en/unit/timercam_f) にて撮影した写真を、[Amazon S3](https://aws.amazon.com/jp/s3/) へ定期的にアップロードする方法を記載します。**  
とはいっても、実は M5の公式さんが、『 [Timer Amazon S3 Folder Pusher](https://docs.m5stack.com/en/quick_start/timer_cam/amazon_s3) 』という、まさにそれなファームウェアを公開してくれています。  
ただし、このファームウェアを使うにあたって、**つまづいたところ**がありましたので、本記事にメモとして残しておきます。  
※ 公式さんの記事以外に「使ってみた」系の記事も見当たらず、トラブルシューティングに結構時間がかかりました。今後の方のお役に立てれば嬉しいです。  
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/cdadec28-77dc-0d91-376b-095c1963426b.png" width="650px">


# 作業内容
## Step1. S3 バケットの作成
最初に、写真のアップロード先の S3 バケットを作成します。
AWS のマネジメントコンソールにログイン後、S3 の管理画面に遷移し、「バケットを作成」ボタンを押下します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/73659c33-84e9-085c-577e-c29afd9fc6fa.png" width="750px">

「バケットを作成」画面にて、世界で一意なバケット名を入力します。（ここでは、bucket-name と設定したと仮定して進めます。）
また、AWS リージョンを指定しますが、**ここがポイント**で、**必ず「バージニア北部（us-east-1）」を選択**してください。
[公式さんの記事](https://docs.m5stack.com/en/quick_start/timer_cam/amazon_s3)には何も注釈がないのですが、「東京（ap-northeast-1）」などのリージョンでは動きません。　絶対にバージニア北部です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/78491e38-bd71-2815-dd0c-90b13be6665f.png" width="750px">
なお、他の設定項目はデフォルトのままで構いません。

バケットを作成後に、写真を保存するフォルダを作っても良いでしょう。（ここでは、pic-folder を作成したと仮定して進めます。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/d29a7e93-0423-0e43-cef1-a4daea33709c.png)


## Step2. AWS アクセスキー と シークレットキー の発行
AWS CLI などを使っている方であれば見慣れたものかと思いますが、AWS アクセスキーとシークレットキーを発行してください。
セキュリティを意識するのであれば、既存の IAM User のものを使い回すよりも、今回のプロジェクト用に新しく発行した方が良いかと思います。
発行の仕方は、[こちらのドキュメント](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_access-keys.html)などを参考にしてください。

## Step3. M5 Timer Camera に専用ファームウェアを焼く
基本的には、[公式さんの記事](https://docs.m5stack.com/en/quick_start/timer_cam/amazon_s3)の通りに進めます。
作業そのものは、他の M5 製品で UIFlow を焼く時と同様で、「M5 Burner」のアプリから「TimerS3FolderPusher」のファームウェアを選択し、「Burn」ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/8c121d2e-532f-c40c-4b53-5c752898931c.png)


「Burn」ボタンを押下すると、設定画面が出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/8dc27875-2ab8-2aeb-0743-89d1a956da2f.png)
ここが、**つまづきポイントの２つめ**で、**URLは 『bucket-name.s3.amazonaws.com/pic-folder』** とします。
ARN(Amazon Resource Name)の形式ではなく、s3://bucket-name/pic-folder の形式や https:// などの形式でもありません。
また、バケットを東京リージョンなどで作った場合、URLは『bucket-name.**s3.ap-northeast-1**.amazonaws.com/pic-folder』となるはずですが、この値を設定しても、写真のアップロードに**失敗**します。（※ 著者が経験済み）
**必ず、バージニア北部（us-east-1）でバケットを作り、上記のURLの形式**にするようにしましょう。

WIFI SSID などの他の設定項目の入力が終わったら、「Burn」 ボタンを押してファームウェアを焼きます。

## Step4. 動作確認
設定が正しければ、作成した S3 バケットに写真がアップロードされるはずです。
指定したフォルダを開き、「リロードボタン」を押すことで、写真が増えていることが分かると思います。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/1cd78a05-d72a-c619-ceb4-c94eb81b9e78.png" width="800px">
正常にアップロードできているみたいです！

## Step5. トラブルシューティング
時間が経っても S3 バケットに写真が現れない場合は、「M5 Burner」の右上にある「COM Monitor」を押してみましょう。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/5288e233-e888-6560-7ecd-b79b3305acca.png" width="400px">

正常であれば、「status_code: 200」の表記を確認できるはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/e1acbc81-a0e3-4183-acfc-1ce63a31fc92.png)

WiFi接続ができていなかったり、アクセスキーを間違えていたり、不適切なURLだと、何かしらのエラーのヒントがログに出てきますので、修正をしてファームウェアを焼き直します。
（例えば：Connection failed などの表記が確認できる。）

# 使ってみて分かったこと
M5 Timer Camera F を触ってみて、いくつか分かったことがあります。
- 写真が上下反転される。
    - 以下のように、上下が反転された画像が保存されます。
    - <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/bbce6b53-8834-015b-47cb-1ed3ca2aca5c.png" width="600px">
- 撮影から S3 のアップロードまで30秒近くかかる
    - M5 内部での処理に時間がかかっている模様。
    - リアルタイムな用途には不向き？
- 画質は良くない
    - （1920x1080の設定の時）全体的に暗い、荒い、ボケている
    - ファイルのサイズは、大体 50~55KB くらい
- 電源を切るボタンがない
    - M5 Timer Camera F の[公式ページ](https://docs.m5stack.com/en/unit/timercam_f)に書いてある通り、電源管理の方法が他のデバイスと異なっており、電源ボタンを押しても電源を切ることができない。
        - > The low-power power management solution adopted by the Timer Camera series is different from the CORE and StickC devices. When in use, the PWR button is used as a power-on button(long press 2s). **If you need to shut down the device, you need to use the software API or press the Reset button on the PCB.** When using external power supply, the device will remain powered on.
        - > **DeepL翻訳：**
        Timer Camera シリーズで採用されている低消費電力の電源管理ソリューションは、CORE や StickC デバイスとは異なります。使用時、PWRボタンはパワーオンボタンとして使用されます(2秒間の長押し)。**デバイスをシャットダウンする必要がある場合は、ソフトウェアAPIを使用するか、PCB上のリセットボタンを押す必要があります。** 外部電源を使用する場合、デバイスは電源が入ったままになります。
    - 私は、使い終わったら、「M5 Burner」の「Erase」で消すことにしています。
        - <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/5fc98b18-85d7-1cb4-8039-196e178c8dcf.png" width="400px">

# 終わりに
ということで、[M5 Timer Camera F](https://docs.m5stack.com/en/unit/timercam_f) にて [Timer Amazon S3 Folder Pusher](https://docs.m5stack.com/en/quick_start/timer_cam/amazon_s3) を使用する際のつまづきポイントを記載しました。  
S3 へのアップロードができてしまえば、S3 PUT のイベントをトリガーに Lambda 関数を起動して～　っと、いろいろと面白いことができそうです。
画質などイマイチな部分もありそうですが、ホビー用途であればかなり使えそうです。これからも M5 シリーズを触ってみたいと思います。
では。　御覧いただきありがとうございました。