ESP32がとてもおもしろいです。
ESP32はマイクロプロセッサで、いわゆるマイコンボードというジャンルのデバイスです。
マイコンボードではArduino(アルドゥイーノ/アルデュイーノ/アルディーノ)というボードが流行っています。
Raspberry Pi(ラズベリーパイ)という小型PC的なデバイスも流行ってます。
ESP32が、今までのマイコンボードと決定的に違うのは、
そのままでスマホとつながるIoTデバイスだということです。
標準でWifi、BLE(Bluetooth)を搭載していて、私の知る限り、何も加えなくてもスマホと連携できる初めてのボードです。
マイコンボードとしては、
CPUの性能が高く(デュアルコア32ビット240 MHz)、
メモリが大きく、
不揮発性記録システムが搭載されているのも便利です。
開発面では、Arduinoの資産が流用できて、サンプルコードとライブラリーが豊富で
容易にプログラムを開発できます。
PCでプログラムを開発するため、シリアル通信をUSB経由で行えるようにしたボードESP32-WROOM-32 があります。本来3.3Vが動作電圧であるESP32を5Vで駆動できるようにもなります。これはとても便利でこれを使わない手はありません。
スマホと連携できるのは極めて魅力的で、とても興味を持っていました。
軽く使ってみることにします。
カメラのシャッターを制御するレリーズを作ってみます。
先ずArduinoという開発ツールをパソコンにインストールします。
ESP32とPCをUSBケーブルでつなげば、すぐにプログラム開発を行えます。
使う機能によって必要なライブラリーをPCにインストールする必要がありますが、
コマンドプロンプトなどは使わずにGUIで簡単にインストールできます。
レリーズには、基本的に露光時間とインターバル時間があって、露光とインターバルを交互に行いながら撮影していきます。
(全て星撮りの話です)
2つの時間があるプログラムは通常2つのタイマーを使って作るのが普通で、
ネット上にある似た感じの動作をさせるプログラムはそんなサンプルばかりでした。
ただ、それだと機能を拡張しようとしたときプログラムが面倒になるので、
1つのタイマーを動作クロックに見た立てて動作させるシンプルな方法を考えてみました。
ソースはこんな感じです。
18番のIO端子をプログラムでスイッチに指定して、その状態で露光時間を切り替えることができるプログラムです。5番を出力に指定しています。
超簡単でしょ!
スマホとの連携も、ボードが標準で対応しているため、プログラムサンプルが豊富で簡単にできます。
ハードでの動作確認はこうで、
実際のPC画面はこうで、

進む矢印を押すことでプログラムがコンパイルされ、ESP32に転送されて、
すぐにESP32は動作を初めます。
一昔前のマイコンボードのプログラム開発は、結構面倒なことが多かったんですが、これは極めて簡単にできるので驚きです。
機能をプログラムで拡張してみます。
スプレッドボードで回路を作ってみます。
IOの端子は1から32まであって、それぞれの端子の機能をプログラムで変更できるので、スイッチやLEDを適当に挿していきます。
例えば
スイッチをGNDと32番に挿し込んで、プログラムでIO32をスイッチに指定すれればIO32は入力として機能します。
ロジック回路では、本来はプルアップが必要なんですが、
プログラムでプルアップ指定すれば自動的にプルアップしてくれるので、プルアップ抵抗は必要ありません。
LED(抵抗入り)を32番とGNDに挿し込んで、
プログラムで32番を出力指定すれば、
32番ピンは出力になります。
出力に切り替わらないピン番もありますが、光らなければ別の場所に挿せばいいです。
ディスプレイは、有機ELの小型モジュールを使用することにします。
22,21それとGNDと3.3V電源の4つを挿します。
(22:CSL 21:SDA GND:GND 3.3V:VCC)

簡単に文字を表示できます。
最終的なハード構成はこれです。
動画:10秒露光、10秒インターバルでテストしています。
白色LEDが光っているときが、カメラが露光しているときです。・・・なんですがこの動画ではよく見えません。
BOXに入れるとこうなります。
スライドSWは、夜露を避けるためにサイドに取り付けてます。
動画:
撮影の残り時間が30秒以下になるとインジケーターが点滅します。
最後に照明を消しているので、暗闇でどう見えるかを見れます。
工夫したところは、
①
インターバル時間をトグルSWで露光中でもインターバル中でも、延長できます。
撮影画像を詳しく見たいとか、結露していないかどうか確認したいとか一時的にインターバル時間を伸ばすことができるのでとても便利です。
②
撮影の残り時間が30秒以下になるとインジケーターが点滅します。
遠くから「そろそろ終わる」ことを知ることができます。
③
市販のレリーズはカウントをダウンするのですが、これをUpに変更。撮影済枚数の把握がしやすくなりました。
③
ディスプレイは有機ELで見やすく常時点灯しているので、いつでも時間とか状態を確認できるので便利です。(市販のレリーズは一定時間でバックライトが消灯してしまいます)
④
スマホからhttpプロトコルで、より高度で自由度の高い制御ができます。
(Bluetoothに変更予定です)
⑤
電源投入から起動まで1秒とかからないので、プリセット時間でいいのであればすぐに撮影を開始できます。
部材はこれです。

100均スタンプパッドは、ディスプレイ用で透明保護カバーとして使用しています。
ESP32、ディスプレイ以外の電子部品は、抵抗1本とフォトカプラ1個だけです。抵抗はフォトカプラ用です。計算上は200Ωほどなんですが、1kΩでも動作したので、470Ωを使ってます。抵抗が高いほうが消費電力が少なくなります。
(あっ!フォトカプラが抜けてます。前のスプレッドボードの左端の小さな四角い部品がフォトカプラです)
全部で1500円程です。
ESP32は秋月電子で1480円で売っているものが信頼できておすすめです。
1000円以下でも入手できたりして、
ESP32は同じでも、それ以外の部分で、安いものは明らかにボードの出来が悪いです。
とりあえず動きはするので、その安物を使うなら全部で1500円に収まります。
<ESP32を使ってみて>
極めて面白いボードです。
スマホと連携させていろいろと面白いことができそうです。
例えば、
スマホから出ているWifiやbluetoothの電波で判断して、
スマホを持っていれば玄関のドアが自動的に開くとか。
ピカソのドアをリモコンであけたとき、30秒後に自動的に閉まってしまうのを、スマホの電波があれば延長するとか(これほしい!)。
なんかいろいろ簡単にできそうで、わくわくします。
次は○○○を作ろうと思ってます。
この完成品は星撮りにガンガン使ってます。
その写真は次から。