2019/03/23

ESP32でGrove Serial Camera(OV528)を使う


ESP32でGrove Serial Cameraを使う



Grove - Serial Camera Kit

http://wiki.seeedstudio.com/Grove-Serial_Camera_Kit/

使っているコントローラ:OV528の仕様書

GroveSerialCameraとはUARTで接続する。ただし、ESP32にシルク印刷されているRxD,TxDは、開発用に使っているので、その他のピンで使えるUARTを探す

MicroPython リファレンスより

Available Pins are from the following ranges (inclusive): 0-19, 21-23, 25-27, 32-39. 

  • Pins 1 and 3 are REPL UART TX and RX respectively
  • Pins 6, 7, 8, 11, 16, and 17 are used for connecting the embedded flash, and are not recommended for other uses
  • Pins 34-39 are input only, and also do not have internal pull-up resistors
  • The pull value of some pins can be set to Pin.PULL_HOLD to reduce power consumption during deepsleep.

Pin1,Pin3とは、GPIO1,GPIO3の事の様である(下記のRxD,TxDと一致)
UARTは3系統あるはずで、開発用のUART0以外がどうなっているのかを確認。
結果、U2TxD:GPIO17,U2RxD:GPIO16を使うことにする。

esp32-wroom-32_datasheet_en.pdf  より


No.NameTypeFunction
1GNDPGround
23V3PPower supply
3ENIModule-enable signal. Active high.
4SENSOR_VPIGPIO36, ADC1_CH0, RTC_GPIO0
5SENSOR_VNIGPIO39, ADC1_CH3, RTC_GPIO3
6IO34IGPIO34, ADC1_CH6, RTC_GPIO4
7IO35IGPIO35, ADC1_CH7, RTC_GPIO5
8IO32I/OGPIO32, XTAL_32K_P (32.768 kHz crystal oscillator input),ADC1_CH4,TOUCH9, RTC_GPIO9
9IO33I/OGPIO33, XTAL_32K_N (32.768 kHz crystal oscillator output),ADC1_CH5,TOUCH8,RTC_GPIO8 Espressif Systems 3 ESP32-WROOM-32 Datasheet V2.8
10IO25I/OGPIO25, DAC_1, ADC2_CH8, RTC_GPIO6, EMAC_RXD0
11IO26I/OGPIO26, DAC_2, ADC2_CH9, RTC_GPIO7, EMAC_RXD1
12IO27I/OGPIO27, ADC2_CH7, TOUCH7, RTC_GPIO17, EMAC_RX_DV
13IO14I/OGPIO14, ADC2_CH6, TOUCH6, RTC_GPIO16, MTMS, HSPICLK, HS2_CLK,SD_CLK, EMAC_TXD2
14IO12I/OGPIO12, ADC2_CH5, TOUCH5, RTC_GPIO15, MTDI, HSPIQ, HS2_DATA2,SD_DATA2, EMAC_TXD3
15GNDPGround
16IO13I/OGPIO13, ADC2_CH4, TOUCH4, RTC_GPIO14, MTCK, HSPID, HS2_DATA3,SD_DATA3, EMAC_RX_ER
17SHD/SD2*I/OGPIO9, SD_DATA2, SPIHD, HS1_DATA2, U1RXD
18SWP/SD3*I/OGPIO10, SD_DATA3, SPIWP, HS1_DATA3, U1TXD
19SCS/CMD*I/OGPIO11, SD_CMD, SPICS0, HS1_CMD, U1RTS
20SCK/CLK*I/OGPIO6, SD_CLK, SPICLK, HS1_CLK, U1CTS
21SDO/SD0*I/OGPIO7, SD_DATA0, SPIQ, HS1_DATA0, U2RTS
22SDI/SD1*I/OGPIO8, SD_DATA1, SPID, HS1_DATA1, U2CTS
23IO15I/OGPIO15, ADC2_CH3, TOUCH3, MTDO, HSPICS0, RTC_GPIO13, HS2_CMD,SD_CMD, EMAC_RXD3
24IO2I/OGPIO2, ADC2_CH2, TOUCH2, RTC_GPIO12, HSPIWP, HS2_DATA0,SD_DATA0
25IO0I/OGPIO0, ADC2_CH1, TOUCH1, RTC_GPIO11, CLK_OUT1, EMAC_TX_CLK
26IO4I/OGPIO4, ADC2_CH0, TOUCH0, RTC_GPIO10, HSPIHD, HS2_DATA1,SD_DATA1, EMAC_TX_ER
27IO16I/OGPIO16, HS1_DATA4, U2RXD, EMAC_CLK_OUT
28IO17I/OGPIO17, HS1_DATA5, U2TXD, EMAC_CLK_OUT_180
29IO5I/OGPIO5, VSPICS0, HS1_DATA6, EMAC_RX_CLK
30IO18I/OGPIO18, VSPICLK, HS1_DATA7
31IO19I/OGPIO19, VSPIQ, U0CTS, EMAC_TXD0
32NC--
33IO21I/OGPIO21, VSPIHD, EMAC_TX_EN
34RXD0I/OGPIO3, U0RXD, CLK_OUT2
35TXD0I/OGPIO1, U0TXD, CLK_OUT3, EMAC_RXD2
36IO22I/OGPIO22, VSPIWP, U0RTS, EMAC_TXD1
37IO23I/OGPIO23, VSPID, HS1_STROBE
38GNDPGround



memo heap in MicroPython
https://docs.micropython.org/en/latest/reference/constrained.html#the-heap


OV528の仕様書より、立ち上げ時はまずコネクション確立を行うようにと書かれていて、速度は9600bpsであった。それに従い、まずは、SYNCコマンドを送る関数を作る。

OV528(Seeed Studio Grove Serial Cameraのコントローラ)に対してシリアルで接続してコネクションを確立するまでの手順 (言語はMycroPython)
--------------------------------------------------
#

from machine import UART
from time import sleep

uart1 = UART(1, 9600)
uart1.init(9600, bits=8, parity=None, stop=1,tx=17,rx=16) 

INIT = bytes([0xAA,0x0D,0x00,0x00,0x00,0x00])

def make_connection():
   for x in range(60):
      uart1.write(INIT)
      sleep(1)
      if(uart1.any() > 0):
          packet=uart1.read(uart1.any())
          show_packet(packet)
          return True
      #print(uart1.any())
      #print(uart1.read(1))
   return False


def show_packet(packet):
  for i in range(6):
     print("[{:02x}]".format(packet[i]),end="")
  print("")
--------------------------------------------------
シリアルコンソールでの表示
>>> make_connection()
[aa][0e][0d][00][00][00]
True
多少てこずったのでオシロで確認
同期が確立した時の波形
上がカメラへの送信、下がカメラからの返却
速度は9600bps
安定動作のためには、SYNCパケット送信の際、一発目を送ってから、少し時間を空けて2発目を送ると、かなり確実にACKが返る。上記実装例では1秒のSLEEPを入れている。連続してバリバリに送ると、いつまでたってもACKが返らない。


追記
Grove Serial Cameraの製品説明ページで確認すると、電源5Vで、信号は232Cと書かれている。5Vのシリアルではなく、本気の232Cなのだろう。。多分。今回は、カメラの電源は5Vを供給しているが、カメラのシリアルはESP32のバス直結なので、3.3Vで繋いでいる。現状動いているがこれは規格外と思われる。Grove Serial Cameraの基板側の回路図がないので、基板内のレベル変換がどうなっているのか分からず。

No comments:

Post a Comment