QA011 ESP32 カム V1.0

../../_images/QA011-1.png

1.Introduction

ACEBOTT-ESP32-CAM-V1.0 は、業界で最も競争力のある小型カメラ モジュールであり、最小のシステムとして独立して動作できます。

ACEBOTT-ESP32-CAM-V1.0 は、さまざまな IoT アプリケーションで幅広く使用でき、家庭用スマート デバイス、産業用ワイヤレス制御、ワイヤレス監視、QR ワイヤレス識別、ワイヤレス測位システム信号、その他の IoT アプリケーションに適しています。

ACEBOTT-ESP32-CAM-V1.0 は DIP パッケージを採用しており、底板に挿入するだけで直接使用できるため、製品の迅速な生産が実現し、顧客に信頼性の高い接続を提供し、さまざまな IoT ハードウェア端末の機会への応用が容易になります。

2.Features

超小型 802.11b/g/n Wi-Fi SoC モジュール

低消費電力デュアルコア32ビットCPUはアプリケーションプロセッサとして使用できます。

最大240MHzのメイン周波数、最大600DMIPSの計算能力

内蔵 520 KB SRAM、外部 8MB PSRAM

UART / SPI / I2C / PWM / ADC / DACインターフェースのサポート

フラッシュ内蔵のOV2640およびOV7670カメラをサポート

画像のWiFiアップロードをサポート

複数の休眠モードをサポート

Lwip と FreeRTOS

STA / AP / STA + AP動作モードをサポート

Smart Config / AirKissワンクリック配信ネットワークをサポート

3.Specifications

Parameters 値/説明
サイズ 27.1×47.1(mm)
カプセル化 DIP-20
電源 タイプ-c
サポートインターフェース シリアルポート
IOポート数 10
シリアルポートのボーレート 110 ~ 4608000 bps をサポート、デフォルト 115200 bps
SPIフラッシュ デフォルト 32Mbit
画像出力フォーマット JPEG(OV2640のみサポート)、BMP、グレースケール
スペクトル範囲 2400〜2483.5MHz
アンテナ形状 外部 PCB アンテナ、ゲイン 2 dBi
消費電力 フラッシュをオフにする:180mA@5V
フラッシュライトをオンにして明るさを最大に調整します:310mA@5V
ディープスリープ:最低消費電力は6 mA@5V
モダンスリープ:最小レベルは20 mA@5V
浅い睡眠:最小値は6.7に達する可能性がある mA@5V
セキュリティ WEP / WPA-PSK / WPA2-PSK
電源供給範囲 4.75-5.25V
動作温度 -20°C〜70°C
ストレージ環境 -40 °C ~ 1250 °C、<90%RH

../../_images/QA011-2.png../../_images/QA011-3.png

4.サンプルコード

Type-C データ ケーブルを使用してボードをコンピューターに接続します。[ツール] > [ボード] メニューから [ESP32] -> [ESP32 開発モジュール] を選択します。適切なポートを選択します。[アップロード] ボタンを使用してボードにアップロードします。

(1)配線図

../../_images/QA011-4.png

(2)サンプルコード

  1#include "esp_camera.h"
  2#include <WiFi.h>
  3#include "esp_timer.h"
  4#include "img_converters.h"
  5#include "Arduino.h"
  6#include "fb_gfx.h"
  7#include "soc/soc.h" //disable brownout problems
  8#include "soc/rtc_cntl_reg.h" //disable brownout problems
  9#include "esp_http_server.h"
 10
 11const char *ssid = "ESP32-CAM";
 12const char *password = "12345678";
 13WiFiServer server(100);
 14WiFiClient client;
 15
 16#define PART_BOUNDARY "123456789000000000000987654321"
 17// #define CAMERA_MODEL_AI_THINKER
 18#define PWDN_GPIO_NUM     32
 19#define RESET_GPIO_NUM    -1
 20#define XCLK_GPIO_NUM      0
 21#define SIOD_GPIO_NUM     26
 22#define SIOC_GPIO_NUM     27
 23#define Y9_GPIO_NUM       35
 24#define Y8_GPIO_NUM       34
 25#define Y7_GPIO_NUM       39
 26#define Y6_GPIO_NUM       36
 27#define Y5_GPIO_NUM       21
 28#define Y4_GPIO_NUM       19
 29#define Y3_GPIO_NUM       18
 30#define Y2_GPIO_NUM        5
 31#define VSYNC_GPIO_NUM    25
 32#define HREF_GPIO_NUM     23
 33#define PCLK_GPIO_NUM     22
 34
 35#define RXD2 14 
 36#define TXD2 13  
 37
 38static const char* _STREAM_CONTENT_TYPE = "multipart/x-mixed-replace;boundary=" PART_BOUNDARY;
 39static const char* _STREAM_BOUNDARY = "\r\n--" PART_BOUNDARY "\r\n";
 40static const char* _STREAM_PART = "Content-Type: image/jpeg\r\nContent-Length: %u\r\n\r\n";
 41httpd_handle_t stream_httpd = NULL;
 42
 43static esp_err_t stream_handler(httpd_req_t *req){
 44  camera_fb_t * fb = NULL;
 45  esp_err_t res = ESP_OK;
 46  size_t _jpg_buf_len = 0;
 47  uint8_t * _jpg_buf = NULL;
 48  char * part_buf[64];
 49  res = httpd_resp_set_type(req, _STREAM_CONTENT_TYPE);
 50  if(res != ESP_OK){
 51    return res;
 52  }
 53while(true){
 54    fb = esp_camera_fb_get();
 55    if (!fb) {
 56      Serial.println("Camera capture failed");
 57      res = ESP_FAIL;
 58    } else {
 59      if(fb->width > 400){
 60        if(fb->format != PIXFORMAT_JPEG){
 61          bool jpeg_converted = frame2jpg(fb, 80, &_jpg_buf, &_jpg_buf_len);
 62          esp_camera_fb_return(fb);
 63          fb = NULL;
 64          if(!jpeg_converted){
 65            Serial.println("JPEG compression failed");
 66            res = ESP_FAIL;
 67          }
 68        } else {
 69          _jpg_buf_len = fb->len;
 70          _jpg_buf = fb->buf;
 71        }
 72      }
 73}
 74if(res == ESP_OK){
 75  size_t hlen = snprintf((char *)part_buf, 64, _STREAM_PART, _jpg_buf_len);
 76  res = httpd_resp_send_chunk(req, (const char *)part_buf, hlen);
 77    }
 78if(res == ESP_OK){
 79  res = httpd_resp_send_chunk(req, (const char *)_jpg_buf, _jpg_buf_len);
 80    }
 81if(res == ESP_OK){
 82  res = httpd_resp_send_chunk(req, _STREAM_BOUNDARY, strlen(_STREAM_BOUNDARY));
 83    }
 84
 85if(fb){
 86    esp_camera_fb_return(fb);
 87    fb = NULL;
 88    _jpg_buf = NULL;
 89    } else if(_jpg_buf){
 90    free(_jpg_buf);
 91    _jpg_buf = NULL;
 92  }
 93  if(res != ESP_OK){
 94    break;
 95  }
 96    //Serial.printf("MJPG: %uB\n",(uint32_t)(_jpg_buf_len));
 97  }
 98  return res;
 99}
100void startCameraServer(){
101  httpd_config_t config = HTTPD_DEFAULT_CONFIG();
102  config.server_port = 80;
103  httpd_uri_t index_uri = {
104    .uri       = "/",
105    .method    = HTTP_GET,
106    .handler   = stream_handler,
107    .user_ctx  = NULL
108  };
109if (httpd_start(&stream_httpd, &config) == ESP_OK) {
110    httpd_register_uri_handler(stream_httpd, &index_uri);
111  }
112}
113
114void setup() {
115  // WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector
116  Serial.begin(115200);
117  Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);
118
119  // Serial.setDebugOutput(false);
120
121  camera_config_t config;
122  config.ledc_channel = LEDC_CHANNEL_0;
123  config.ledc_timer = LEDC_TIMER_0;
124  config.pin_d0 = Y2_GPIO_NUM;
125  config.pin_d1 = Y3_GPIO_NUM;
126  config.pin_d2 = Y4_GPIO_NUM;
127  config.pin_d3 = Y5_GPIO_NUM;
128  config.pin_d4 = Y6_GPIO_NUM;
129  config.pin_d5 = Y7_GPIO_NUM;
130  config.pin_d6 = Y8_GPIO_NUM;
131  config.pin_d7 = Y9_GPIO_NUM;
132  config.pin_xclk = XCLK_GPIO_NUM;
133  config.pin_pclk = PCLK_GPIO_NUM;
134  config.pin_vsync = VSYNC_GPIO_NUM;
135  config.pin_href = HREF_GPIO_NUM;
136  config.pin_sccb_sda = SIOD_GPIO_NUM;
137  config.pin_sccb_scl = SIOC_GPIO_NUM;
138  config.pin_pwdn = PWDN_GPIO_NUM;
139  config.pin_reset = RESET_GPIO_NUM;
140  config.xclk_freq_hz = 20000000;
141  config.frame_size = FRAMESIZE_UXGA;
142  config.pixel_format = PIXFORMAT_JPEG; // for streaming
143  //config.pixel_format = PIXFORMAT_RGB565; // for face detection/recognition
144  config.grab_mode = CAMERA_GRAB_WHEN_EMPTY;
145  config.fb_location = CAMERA_FB_IN_PSRAM;
146  config.jpeg_quality = 12;
147  config.fb_count = 1;
148  
149  // if PSRAM IC present, init with UXGA resolution and higher JPEG quality
150  //                      for larger pre-allocated frame buffer.
151  if(config.pixel_format == PIXFORMAT_JPEG){
152    if(psramFound()){
153      config.jpeg_quality = 10;
154      config.fb_count = 2;
155      config.grab_mode = CAMERA_GRAB_LATEST;
156    } else {
157      // Limit the frame size when PSRAM is not available
158      config.frame_size = FRAMESIZE_SVGA;
159      config.fb_location = CAMERA_FB_IN_DRAM;
160    }
161  } else {
162    // Best option for face detection/recognition
163    config.frame_size = FRAMESIZE_240X240;
164#if CONFIG_IDF_TARGET_ESP32S3
165    config.fb_count = 2;
166#endif
167  }
168  // camera init
169  esp_err_t err = esp_camera_init(&config);
170  if (err != ESP_OK)
171  {
172    Serial.printf("Camera init failed with error 0x%x", err);
173    return;
174  }
175  sensor_t *s = esp_camera_sensor_get();
176  //drop down frame size for higher initial frame rate
177  //s->set_framesize(s, FRAMESIZE_SXGA); //Byte length sampling value:60000                 #9 (High picture quality)  1280x1024
178  s->set_framesize(s, FRAMESIZE_SVGA); //Byte length sampling value:40000                   #7 (Medium picture quality)  800x600
179  //s->set_framesize(s, FRAMESIZE_QVGA); //Byte length sampling value:10000                #4 (Poor picture quality)  320x240
180
181  s->set_vflip(s, 1);   //Image orientation Settings (up and down)
182  s->set_hmirror(s, 1); //Image orientation Settings (left and right)
183
184  WiFi.setTxPower(WIFI_POWER_19_5dBm);
185  WiFi.mode(WIFI_AP);
186  WiFi.softAP(ssid, password, 5);
187  // WiFi.softAP(ssid, password);
188  Serial.print("\r\n");
189  startCameraServer();
190  Serial.print("\r\n");
191  Serial.print("Camera Ready! Use 'http://");
192  Serial.print(WiFi.softAPIP());
193  Serial.println("' to connect");
194
195  server.begin();          // Starting the server
196  delay(100);
197
198}
199void loop() {
200  delay(1);
201
202}

5.テスト結果

プログラムをアップロードすると、Web 側で画像効果が表示されます。まず、端末デバイスをカメラモジュールが発行する WiFi に接続する必要があります。

../../_images/QA011-7.jpg

暗示

プログラム内の WiFi 名とパスワードはカスタマイズできます。

../../_images/QA011-5.png

AP モードのカメラ モジュールの IP アドレスは 192.168.4.1 です。端末ブラウザーのアドレス バーに IP アドレスを入力して、カメラ画像の Web ページにアクセスします。カメラの方向を動かすと、Web ページでカメラ モジュールのライブ画像効果を確認できます。

../../_images/QA011-6.png

6.関連リソース

PDFとコード

関連記事

最初のコメントを残す

無料トライアルを申し込む

この製品トライアルは、教育者および学術機関向けに優先されます。

このフォームに記入して送信することにより、あなたは
Acebott 製品トライアルの利用規約。

今すぐ教育機関限定割引をご利用ください

教育者や教育機関向けの特別割引を申請するには、このフォームにご記入ください。STEM キットを 5% 以上割引でご購入いただけます。教育には報奨が必要です。

上記のフォームにご記入いただければ、弊社のチームがすぐにご連絡させていただきます。
😊🚀

無料見積もりをゲット!🎉

最適な STEM キットが見つかりませんか? 最高の卸売価格をお求めですか?
販売代理店になることに興味がありますか?

上記のフォームにご記入いただければ、必要な情報をすべてできるだけ早くご返信いたします! 😊🚀

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー と 利用規約  が適用されます。