最近、研究室の3Dプリンターの稼働状況を監視するためにカメラを設置しようと思いたち、激安のカメラを探していました。
最初は以前こちらの記事で紹介したようにWebカメラとラズパイを用いてストリーミングサーバーを立ち上げるといったような方法で行おうと思いましたが、この方法だと約4000円ほどかかってしまうためなかなか手がでませんでした。
しかし、最近1200円のカメラ付きのマイコンがあることを知ったので、今回はこちらを使用してストリーミングサーバーを立ち上げたいと思います。
目次
ESP32-CAMについて
ESP32-CAM は Arduino と同じように Arduino IDE で開発を行うことができます。さらに、カメラ、wi-fi、Bluetoothが搭載されているのに価格が約1200円と Arduino よりも圧倒的に高性能で安く手が出しやすい価格となっています。
また、 Arduino IDE だけでなく、Python(MicroPython)も使用できるため、ラズパイでPythonを使って開発している方は、簡単に開発に取りかかれます!
自分も今回esp32は初めて扱いましたが、特につまずくこともなく開発できました。今度、 Python で開発する方法についての記事も書こうと思います。
必要なもの・実行環境
- ESP32-CAM
(今回のメインである格安マイコン)
- USBシリアルコンバータ
( ESP32-CAM に書き込みを行うための機器)
- パソコン(Windows 10, 64bit)
手順
- ESP32-CAMのセットアップ
- コードの書き込みと動作確認
- ストリーミングサーバーの立ち上げ
ESP32-CAMのセットアップ
①USBシリアルコンバータのセットアップ
USBシリアルコンバータのドライバー( CP2102 )のインストール
※購入したシリアルコンバータによってはUSBをパソコンに挿入時に自動でドライバーのインストールが行われるものもあるため、必要な方のみ行ってください。
ちなみに今回自分が購入したものはドライバーインストールが必要でした。
まず、こちらのサイトからドライバーファイルをダウンロードします。
使用しているパソコンのOSがWindows 10の場合は↓の図の”Download”をクリックしてください。
(MACやLinuxの場合は下にスクロールしたところにダウンロードボタンがあります。)
ドライバーインストールツールのZipファイルがダウンロードされるので、展開してから実行ファイルを実行します。(注意:展開せずに行うとインストールの途中でエラーとなります。)
64bitパソコンの場合は”CP210xVCPInstaller_x64.exe”をクリックして実行してください。
実行すると↓のような画面が現れるので次へをクリックします。
すると、一瞬でインストールが完了し以下の画面が現れるので完了をクリックします。
以上でドライバーインストールは完了です。
②Arduino IDE のインストール
次に、開発システムであるArduino IDEをインストールします。
Arduino IDEのダウンロードページにアクセスし、↓の画像のダウンロードリンクをクリックしてください。
クリックすると以下のようなページに飛ぶので、”JUST DOWNLOAD”をクリックしダウンロードしてください。
ダウンロードが完了したら実行ファイルをクリックするとインストーラーが起動するので、後は画面に従ってインストールを完了させてください。
(特に迷うところはないのでインストールについては省略します。)
③Arduino IDE のセットアップ
続いて、Arduino IDE で ESP32 を扱えるようにするための設定をしていきます。
まず、ボードの追加を行います。
「ファイル」 > 「環境設定」 へと進み、 「追加のボードマネージャのURL」の欄に https://dl.espressif.com/dl/package_esp32_index.json と入力し、OKをクリックします。
次に、 「ツール」 >「ボード」 > 「ボードマネージャ」 へと進み、検索欄に”ESP32”と入力し、出てきた項目のインストールボタンをクリックします。
最後に↓の図のようにボードの設定を行ってください。
④パソコンと ESP32-CAM の接続
ESP32-cam と USBシリアルコンバータ を下の表のようにつないでください。
ESP32-cam | USBシリアルコンバータ |
5V | 5V |
GND | GND |
UOR | TXD |
UOT | RXD |
※自分が購入した USBシリアルコンバータ は この接続方法ではうまくいきませんでした。Amazonレビューを見てみたところ、どうやら USBシリアルコンバータのTXD と RXD の表記が逆になっているらしく、 TXD を UOT に、 RXD を UOR に接続したところ無事に書き込み出来ました。
正常に動作しない場合は、このように逆に接続するとうまくいくかもしれません。(間違って逆に接続しても壊れることはないようです。)
ここで一つ注意点ですが、esp32に書き込みを行う際は上の図のように、
IO0 を GND に落とし( IO0 と GND を接続)、書き込みモードにしてから行う必要があります。
逆に、書き込みモードの状態では起動させることができないため、コードを書き込んだ後は、 IO0 と GND との接続を解除してあげる必要があります。
今回はコードの書き込みを行うので、 IO0 を GND に落とした状態で、USBをパソコンにつなぎます。
まず、接続する前に Arduino IDE を開き 「ツール」>「シリアルポート」を確認し、何も選択されていないことを確認します。
次に、 esp32結線したUSBシリアルコンバータをパソコンに差し込み、もう一度 「ツール」>「シリアルポート」 を開きます。
すると今度は↓の画像のように何かしらのポートが選択されているはずです。
※この時に何も選択されていない場合は、1.1のUSBシリアルコンバータのドライバー( CP2102 )のインストールができていないか、 ESP32-cam と USBシリアルコンバータ の接続が間違っている可能性が高いのでそちらを確認してみてください。
コードの書き込みと動作確認
コードの書き込み
まずは、動作確認のために “Hello World” を出力するプログラムを書き込み、正常に動作するか確認します。
Arduino IDE のスケッチに以下のコードを書き込み、「➡」ボタンを押してください。
void setup()
{
Serial.begin(9600); // 通信速度
}
void loop()
{
Serial.println("Hello, World"); // Hello, Worldを出力
delay(1000); // 1秒待つ
}
書き込みが終了すると、「画面下にボードへの書き込みが完了しました。」と表示されます
もし、
Arduino:1.8.9 (Windows Store 1.8.21.0) (Windows 10), ボード:"ESP32 Wrover Module, Huge APP (3MB No OTA/1MB SPIFFS), QIO, 80MHz, 921600, None"
最大3145728バイトのフラッシュメモリのうち、スケッチが259153バイト(8%)を使っています。
最大327680バイトのRAMのうち、グローバル変数が15428バイト(4%)を使っていて、ローカル変数で312252バイト使うことができます。
esptool.py v2.6
Serial port COM3
Connecting........_____....._____....._____....._____....._____....._____....._____
A fatal error occurred: Failed to connect to ESP32: Invalid head of packet (0x00)
A fatal error occurred: Failed to connect to ESP32: Invalid head of packet (0x00)
というようなエラーが出る場合は、esp32が書き込みモードになっているか ( IO0 と GND が接続されているか) 確認してみてください。
それでもダメな場合は、esp32のリセットボタン(小さい黒い丸いボタン)を押してみてください。
プログラム実行
書き込みが終わったら、IO0 と GND との接続を解除し、 USBをパソコンに接続したまま、esp32のリセットボタン(小さい黒い丸いボタン)を押してください。
続いて、出力内容を見るためにシリアルモニタを開きます。
下図のように 「ツール」>「シリアルモニタ」 をクリックし、シリアルモニタを表示させたら、シリアルモニタの画面右下の”******bps”と書かれているところをクリックし“9600”を選択します。
すると、シリアルモニタに1秒おきに、”Hello, World”と表示されます。
以上が、esp32-camのセットアップからプログラム実行までの流れです。
つまずいたとこもあまりなく、すんなりと出来ました!
もし、わからないところなどございましたら気軽に連絡ください!
自作Switch Botを作りたいと思っているのですが、ESP8266を購入してしまいました。ESP32でないと作れませんか?
コメントありがとうございます。
ESP8266でも作れないことはないと思いますが、ESP8266とESP32とではArduinoの設定などが異なり使用できるモジュールも変わるため、私の記事に書いてある通りにセットアップしてもうまくいかないと思います。
例えばWi-Fiを使用する場合、ESP32ではWiFi.hというヘッダーファイルを読み込んで使用しますが、ESP8266ではESP8266WiFi.hを読み込んで使用します。このように読み込むファイルが違うので、Wi-Fi関連のプログラム部分はそのままでは動かない可能性が高いです。
ですので、ESP8266に対応したArduinoのボード設定を行ったうえで、Wi-Fiのプログラム部分をESP8266用の書き方(ESP8266WiFi.hを使用した書き方)に書き変えれば動作すると思います。
大変有難いご返信ありがとうございます。
私が持っているEDP32がUOT.UORが無いのですが、色々検索しても代替案が見つかりません。CLKやDOといった文字はあるのですが何か打開策はありませんでしょうか?
ど素人で分かりづらい質問で申し訳ございません。
EDP32というのはESP8266のことでしょうか?
ESP8266 ピンアサイン
と画像検索するとたくさんピン配置図がでてきますので、そちらを参考にしてみてください。
ただし、使用しているESP8266が開発ボード(開発しやすいようにパッケージ化されたもの)である場合、
同じESP8266でも開発ボードの型番によってピンアサインは変わってきますので注意してください。
また、記載方法によってはUOT、UORという書き方ではなくRXD、TXDと記載されている場合もあります。
この辺も気にしてみてみてください。
もし、esp-wroom-02という開発ボードを使用しているようでしたら
こちらのサイトのピン配置画像を参考にしてみてください。
また分からないことがありましたら、遠慮なくご質問ください(^^)
ご返信ありがとうございます。
度々すみません。
ESP32も持っておりまして、ご掲載の通りに進めてみたのですが、
「今回はコードの書き込みを行うので、 IO0 を GND に落とした状態」がよく分からなくて、テスト書き込みでエラーが出てしまいまして、どうやら「書き込みモード」になっていないので上手く書き込めないようなのですが。
いえいえ、お力になれて嬉しいです!
IO0 を GND に落とした状態、というのはESP32のIO0ピンをESP32のGNDに接続した状態、という意味です。
また、こちらの記事はESP32-CAMという開発ボードを使用した際のやり方を記載しております。
もし、ESP-WROOM-32などのほかのESP32の開発ボードを使用されている場合は、こちらの記事に書いてあるようなENピンの操作が必要になる場合があります。ENピンというのは再起動に似た動作を行うピンであり、IO0をGNDに落とした状態でこの再起動をしてあげる必要がある場合があります。(ESP32-camというこちらの記事の開発ボードでは開発がしやすいように、開発ボードに搭載されているボタンを押すことでこの再起動がかかるようになっているため、ユーザーはこの操作を行わなくて済むようになっています。)
わかりにくくて申し訳ございません。
使用している開発ボードがESP-WROOM-32やESP32-CAMではない開発ボードを使用している場合、もしくはESP32本体を使用している場合は、IO0をGNDに接続した状態でESP32の再起動を行ってみてください。