2019/06/01

ESP32 + CMOS Camera(OV7670 w/FIFO)

ESP32 に CMOS Camera(FIFO 7670)を接続してmicroPythonで制御してみる。これはもう作例が多くて陳腐化した構成なのだが。。 敢えて言うと、、Arduinoでの実装は多いが、microPythonで扱う事例が少ないというぐらいか。。 microPythonだとループが遅いので、FIFO無しだと水平同期中にCMOSカメラからの画像データを 引き抜けないのでFIFOが必要。FIFOがあれば読み出しクロックでデータの引き抜きを遅延させることができる。
試作しているけど、めちゃくちゃ描画が遅い。しかも、、FIFOのR/Wタイミングがおかしいのか、水平同期が狂ったような画像になっている。。うーーむ。。

OV7670の仕様書
http://e-structshop.com/structwp/wp-content/uploads/2014/12/OV7670_DataSheet.pdf

I2Cの仕様書
https://www.nxp.com/docs/ja/user-guide/UM10204.pdf

かなり近い実装(これは多分microPythonではなくArduionoだろう)
http://bitluni.net/ov7670-with-fifo/

http://embeddedprogrammer.blogspot.com/2012/07/hacking-ov7670-camera-module-sccb-cheat.html

https://os.mbed.com/users/diasea/notebook/ov7670_FIFO_AL422B/

https://forum.arduino.cc/index.php/topic,159557.0.html
https://www.play-zone.ch/en/fileuploader/download/download/?d=1&file=custom%2Fupload%2FFile-1402681702.pdf
https://github.com/dalmirdasilva/ArduinoCamera/blob/master/CameraAL422B/datasheet/OV7670%20Implementation%20Guide%20%28V1.0%29.pdf

■追記
水平同期がおかしいのは、COMSカメラでキャプチャしたWidth,Heightが当初の想定とちがっていたから。OV7670は設定できるレジスタ数とパラメータが山盛りで、どれが最適値なのか全然わからない。ちょっと間違えると絵がおかしくなる。これまでレジスタの設定値が不適切ため、シュールなモアレ模様が撮れていた。これは、結線とか、エンコードミスではなく、単に設定パラメータが間違っていたためであった。


大元の記事:
CQ出版社 「トランジスタ技術」 2012年 3月号

https://synapse.kyoto/glossary/glossary.php?word=74HC165