エントリー

カテゴリー「Arduino・AVR」の検索結果は以下のとおりです。

ページ移動

ESP32-CAMの利用方法を模索

ESP32-CAMを動作させたのだけど,3セット(Amazon)もあるので利用できないか考えるため調べてみた

IMG_20230731_115244.jpg

ハードウェア
  • 既にモジュール化されているので大きな変更はできない
  • 接続I/Oはカメラ,microSDスロット,高輝度LEDである
  • CPUはESP32SでEPS32と同じと考えてよく,おそらくI2CとSPIには不具合があるかと思われる
  • GPIOはあるが全て使用済なので利用は困難でSPIに接続されている4ピンをSPI未使用にする(microSDは不可となる)ことでOUTPUTピンとして利用できそう
  • モジュールから高輝度LED以外は取り外すことは困難
ソフトウェア

モジュール構成からカメラ機能を主とした利用形態しかなく追加できるI/Oもかなり限定されそうだ

カメラ機能が主なので元となるスケッチはサンプルのCameraWebServerが優秀で良いためプログラムを調べてみるとHTML(camera_index.h)がgzip形式になっていることが判る

HTMLソースが編集できないと画面の変更追加ができないのでネットで情報を得てみると最終的にgzip形式に変換する方法は判った

しかしわざわざgzip形式にすることもないのでそのまま編集できるように改造

①まずはサンプルを動作させてブラウザでHTMLソースを退避しヘッダーファイル(index_ov2640.h等,以下のように)にする

const uint8_t index_ov2640_html[] = R"=====(<!doctype html>
<html>
<head>
<meta charset="utf-8">


(省略)

</body>
</html>)=====";

size_t index_ov2640_html_len = sizeof(index_ov2640_html)-1;

橙色部分が前後に追加したテキスト

index_ov2640なのはスケッチで使用されているESP32-CAMのカメラタイプ名だから

②app_httpd.cppのcamera_index.hを外しindex_ov2640.hを使用

③同じくapp_httpd.cppのesp_err_t index_handler()を編集

(旧)
static esp_err_t index_handler(httpd_req_t *req)
{
httpd_resp_set_type(req, "text/html");
httpd_resp_set_hdr(req, "Content-Encoding", "gzip");
sensor_t *s = esp_camera_sensor_get();
if (s != NULL) {
if (s->id.PID == OV3660_PID) {
return httpd_resp_send(req, (const char *)index_ov3660_html_gz, index_ov3660_html_gz_len);
} else if (s->id.PID == OV5640_PID) {
return httpd_resp_send(req, (const char *)index_ov5640_html_gz, index_ov5640_html_gz_len);
} else {
return httpd_resp_send(req, (const char *)index_ov2640_html_gz, index_ov2640_html_gz_len);
}
} else {
log_e("Camera sensor not found");
return httpd_resp_send_500(req);
}
}

(新)
static esp_err_t index_handler(httpd_req_t *req)
{
httpd_resp_set_type(req, "text/html");
httpd_resp_set_hdr(req, "Content-Encoding", "identity");
sensor_t *s = esp_camera_sensor_get();
if (s != NULL && s->id.PID == OV2640_PID) {
return httpd_resp_send(req, (const char *)index_ov2640_html, index_ov2640_html_len);
}
log_e("Camera sensor not found");
return httpd_resp_send_500(req);
}

汎用ではないのでESP32-CAMのindex_ov2640_htmlだけとなる

まずはUI部の対策のみ施した

ESP32のIDE設定記録

ESP32の設定を記録していなかったので追加

IoT Exprewss

トラ技が考案したWi-FI ArduinoボードでESP32モジュールをArduinoのPinで使える

IMG_20230731_115607.jpg

追加のボードマネジャーはURL指定

SS20230803_001.png

ボードはESP32>ESP32 Dev Moduleとなる

SS20230803_002.png

USBポートの設定のみで他はデフォルトで問題なし

SS20230803_003.png

その他

  • プログラム書き込み時は①Reset+BootボタンON>②Reset OFF>③Boot OFF>④書き込み>⑤Resetで実行
  • ボードのLEDはIO2(PIN2)に接続
ESP32-CAM

ESP32SにカメラとSDスロットがセットになっているボード

IMG_20230731_115332.jpg

プログラム書き込み用のシリアルは付いてないのでFTDIなどを繋ぐ

参考:https://www.circuitschools.com/how-to-program-upload-the-code-to-esp32-cam-using-arduino-or-programmer/

IMG_20230731_133509.jpg

ボードはESP Wrover Moduleとなる

SS20230803_011.png

  • Flash Frequency: “80MHz”
  • Flash Mode: “Q10”
  • Partition Scheme: “Huge APP (3MB No OTA/1 MB SPIFFS)”
  • Core Debug Level: “None”
  • Upload Speed: “921600”

Upload Speedは921600bpsが早くて良い

スケッチサンプルからESP32>Camera>CameraWebServerを読み込んでカメラをテスト

SS20230803_012.png

スケッチのカメラモジュールをCAMERA_MODEL_AI_THINKERに,WiFiのssid,passwordを設定

#define CAMERA_MODEL_AI_THINKER // Has PSRAM

const char* ssid = "******";
const char* password = "******";

コンパイルして書き込み

SS20230803_013.png

解像度を上げてもヌルヌル動作する

SS20230803_014.png

温度管理を追加し3Dプリンタ用のカメラとして使いたいところだが,I2Cが省かれているのでSPIを使うとIO-Pinが不足するので考え中

ピン配置

https://lastminuteengineers.com/esp32-cam-pinout-reference/

https://randomnerdtutorials.com/esp32-cam-ai-thinker-pinout/

(追加)

  • GPIO12~GPIO15の4PinはμSDがSPIで使用している
GPIO12: MISO
GPIO13: MOSI
GPIO14: CLK
GPIO15: CS(microSD Used)
  • SPIで追加デバイスは他のピンは全て使用されているのでCSピンが割り当てられないので困難(GPIO4のLEDを外す方法はある)
  • SPIを使わなければGPIO12~GPIO15を通常I/Oピンとして使用は可能なようだ

ArduinoIDEでFTDIチップでの書き込みエラー

たまたま秋月電子のArduinoキットのボードに都合のよいシールドが載っていたので回路を組んでスケッチを書き込もうとしたらエラーとなってしまった

(以下はAuduino Pro Miniのエラー画面だが同じ)

SS20230604_008.png

「avrdude: ser_open(): can't open device "\\.\COM8": ?A?N?Z?X??????????????B」

Windows10時に同じ現象となったことがあり記憶ではFT232RLドライバの問題で,FTDIの最新ドライバーでは通信は問題ないのだがArduinoIDEからのスケッチ書き込みはエラーになってしまう

対策としては古いドライバーにすればよくWindows11に新規にアップした際に最新のドライバーになってしまったようだ

そこで同じように古いドライバーにしたのだが結果は変わらず嵌ることになる

FT232RL使用ボード

FT232RL経由で書き込むボードが多いだけでなくフューズビットやブートローダー書き込み装置で使用しているため重要なので解決しないとならない

(秋月のキット)

IMG_20230604_121122.jpg

(ProMini 5V/3.3V版)

IMG_20230604_121151.jpg

(Uncompatino)

IMG_20230604_121220.jpg

ドライバの完全削除

Windowsの問題だといえるのだが簡単にドライバを削除することができない

削除したと思っていても一度セットアップされたドライバはほとんどがディスクにストックされプラグ&プレイによって復活してしまう

更に今ではディスク上になかったらネットからダウンロードして適用してしまうから困ったもんだ

いろいろやってみたが以下の方法で完全に削除することができた

①デバイスマネージャを開いて対象のデバイスのプロパティを開く

SS20230604_001.png

②デバイスのアンインストールを実行

SS20230604_002.png

③「このデバイスのドライバーを削除しようとしました」のチェックボックスをONしてアンインストールを実行

SS20230604_004.png

これで削除できれば良いが完全に削除されないことが多い

削除されたかどうかは再度プラグ&プレイで確認(ドライバの適用がディスクかネットか判断する必要はあるが完全削除なら適用されない)

④③を実行しないで「ドライバ別デバイス」を実行して削除する方が確実

SS20230604_005.png

⑤デバイスマネージャが以下のようになる

SS20230604_006.png

⑥対象デバイスの「.inf」を選択して「ドライバーの削除」を実行

SS20230604_007.png

⑦バージョン別に多くのドライバがあればプラグ&プレイで何度か繰り返すことで全部削除できる

結果とドライバ

完全解決ではないが回避はできるようにはなった

どうやらIDEの方にも問題がありそうで「arduino-2.1.0」では新旧どのドライバーでも書き込みエラーとなる

「arduino-1.8.13」だと1つ前のドライバで書き込み成功

SS20230604_009.png

ドライバ:https://ftdichip.com/drivers/vcp-drivers/

・2021/07/05 2.12.36.4(最新ドライバ)

不可

・2017/08/16 2.12.28.0(1つ前,DL可)

arduino-2.1.0は不可

arduino-1.8.13で書き込み成功

・2015/07/10 2.12.6.0 (更に1つ前)

arduino-2.1.0は不可

arduino-1.8.13で書き込み成功

情報

この件についてネットで検索しても不思議と出てこない

海外サイトで最新ドライバは問題あるとの情報はあったが対策はない

FTDIドライバを完全に削除する(FTClean)があった(https://www.hdl.co.jp/USB/ftcln/)→ 使用は自己責任で

3DプリンターでESP8266開発ボードを改良

3Dプリンタでの制作練習を兼ねてESP8266開発ボードを改良するためのベースを3Dプリンタで作った

開発ボードの問題点

IMG_20201226_152607.jpgIMG_20201226_152641.jpg

  • USBタイプBのコネクタが重みで傾いてしまう
  • 裏側にはゴム足を付けて浮かせてあるが配線がむき出し
  • ZEROソケットを付けたためブレッドボードが扱い難くなった
解決するためベースを設計

IMG_20201226_152951.jpgIMG_20201226_153000.jpg

開発ボードを載せるベースを3Dプリンタで作製するため開発ボードなどのサイズを測定してラフスケッチ

3D印刷

3D作図には「FreeCAD」を使用

IMG_20201227_999901.png

PLAで少し強度が必要なのでインフィル40%で印刷

IMG_20201226_222855.jpgIMG_20201226_222921.jpg

ベースは厚みを2mm,ボードの下駄は3mm

裏に足を付けても良かったがサポート無しにしたかったのでベタにしたらビルドテーブルから剥がすのが大変だった

IMG_20201227_160342.jpg

開発ボードを載せて完成

なかなか良い感じになった

完成基板との接続ケーブル

電圧ロガーを作製した時,パーツを載せた完成基板を使って調整やデバックするため開発ボートとピンケーブルで接続したが,これを簡単にできるケーブルを作った

IMG_20201227_160459.jpg

以下のように接続して使う

IMG_20201227_160806.jpg

ページ移動

ユーティリティ

検索

エントリー検索フォーム
キーワード

過去ログ

Feed