memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

ESP32-CAMでGoogle Driveに写真をアップロードする(個人メモ)、開発環境はMacね。

昨年、美術館との共同イベントでIoT巣箱を作りました。

イベントは大成功で、美術館に展示後、3月末に巣箱を屋外に設置したところでした。

巣箱はデザイン学科の学生さんがデザインしたもので、私はこの巣箱の監視装置?を作るお手伝いをしていました。ただ、実は、まだ巣箱には設置できていません。。。

巣箱を検討した経緯は以下に書き残しています。

その後、イベントをやりきったあと、仕事が忙しくなり放置していました。。。上記の検討ではセンサーで鳥の出入りを記録してカウンタ値を見れるように。。。と考えていたのですが、どうせなら、カメラでその姿を見たいと思いました。

で、年度末の予算でESP32-CAMというESP32系でカメラがついたものがあったので試しに買って少し遊んでいました。

しかし、年度始めで授業が忙しくなりまた放置。。。なかなか前に進めません。

そこでGW。時間ができたので少しトライしていました。

まず、ESP32-CAMで写真をGoogle Driveにアップロードするコードがネットにあったので、それを動かしてみようとしたのですが。。。うまくいかない。

とりあえず、その対処方法をメモしておきます。ネットを探したのですが、なかなか見つからなかったので。

まず、ESP32-CAMの扱い方については、以下を参照しました。

で、写真をGoogle Driveにアップロードするには以下を参考にさせていただきました。

で、HTTPSでアップロードする場合、このコードでは動かないんですね。。。ルート証明書の設定が必要になるとか。その手順のMac版がなかなか探しても出てこなかったので。。。ここにメモしているところです。たぶん、誰かの役に立つはずです。

とりあえず、上記までで、ESP32-CAMにコードを流し込んで、Google Driveにアップロード用のスクリプトを流し込んで、動かしたけど、Google Driveにアクセスしたときにエラーがでる。。。状態までたどり着いているとします。

どこでエラーが出るかというとこちらのコードの109行目でエラーが出ます。Google DriveHTTPS接続で失敗します。

if (client.connect(myDomain, 443)) {

で、ここからが作業内容になります。

上記のif文の上に以下を追記します。

client.setCACert(google_root_ca);

さらに、void setup()  の上に以下を追記します。あ、追記はしなくていいです。このあと説明する文字列を以下のような感じで追記することになります。


この文字列の取得手順は以下の通りです。Google Chromeの例で示します。

まず、ESP32-CAMで写真をアップロードするGoogle Driveのページを開きます。

その状態で、右上の3縦ドットを押し、「その他のツール」ー「デベロッパーツール」を開き、「Security」ー「View」ー「Overview」ー「View certificate」を選択します。すると、以下のような画面が表示されると思います。ここでわかるのがGoogleルート証明書の名前になります。GTS Root R1ですね。

次に、Macの「アプリケーション」ー「ユーティリティ」ー「キーチェーンアクセス」を選択し、「証明書」、「システムルート」、「GTS Root R1」を選択した状態にします。「GTS Root R1」の上で右クリックして「"GTS Root R1"を書き出す」を選択します。

PEMを選択して保存してください。


この保存したファイルをVS Codeなどで開きます。すると。。。「-----BEGIN CERTIFICATE-----」で始まる文字列が得られると思います。これをあとはArduino言語の文字列になるように修正していきます。

もうわかると思いますが、一応、以下、やり方を書いておきます。

修正前が以下だとします。

-----BEGIN CERTIFICATE-----
0123456789
0123456789
0123456789
-----END CERTIFICATE-----
copy

この各行をダブルクォーテーションで括り、行末を改行するため\nを入れます。\はOptionキーを押しながら¥を押せば入力できます。

"-----BEGIN CERTIFICATE-----\n"
"0123456789\n"
"0123456789\n"
"0123456789\n"
"-----END CERTIFICATE-----\n"
copy

あとは、文字列としてすべて繋がっていることを表すために、各行に最後に\を追加します。最終行の行末は;です。

"-----BEGIN CERTIFICATE-----\n" \
"0123456789\n" \
"0123456789\n" \
"0123456789\n" \
"-----END CERTIFICATE-----\n";
copy

で、上記にも書いたようにこの一連の文字列を入れるための変数名を加えます。

const char* google_root_ca= \
"-----BEGIN CERTIFICATE-----\n" \
"0123456789\n" \
"0123456789\n" \
"0123456789\n" \
"-----END CERTIFICATE-----\n";
copy

たぶん、ESP32-CAMをいじろうという方でここまでの説明が必要な人はいないと思いますが。。。とりあえず書いておきました。

あとは、この文字列を上記のGoogle Driveにアップロードするコードに追記すればArduino IDEコンパイルしESP32-CAMに転送できるはずです。

ちなみに、ESP32-CAMをM1 Mac(12.3.1)につなげたのですがポートが全然認識されずに困っています。

M1 Macではドライバを入れなくても転送できるとか、ドライバをいれて転送できたとかしか情報が見当たりません。書き込みツールが悪いのかな。。。同じような症状で対処できた方がいらっしゃったら教えて下さい。

さて、とりあえずスタート地点に立ちましたので、以下、やっていこうと思います。

やることリスト
- Deep Sleepモードの導入(省電力化)
- ナイトビジョン版の試作(既に発注済みなので納品されたら確かめる)
- Ambientへのバッテリー残量送信
- 乾電池駆動での持続時間の計測
- 太陽電池
- Wifiアンテナの取り付け(屋外でもWifiルータに届かないのでアンテナ取り付けて接続テストする)
- 技適対応(ESP32-CAMは技適通過していないのでESP32-WROOMのWifiモジュールを取り付ける)

まだまだあるなぁ。。。とりあえず一通りやっておけば今後、何かの機会でESP32を使うときに色々と使えそうなので何とか時間を見つけてやっておきたい。