{"id":47430,"date":"2020-02-06T08:27:11","date_gmt":"2020-02-05T23:27:11","guid":{"rendered":"http:\/\/kako.com\/blog\/?p=47430"},"modified":"2020-02-16T06:48:39","modified_gmt":"2020-02-15T21:48:39","slug":"esp32-cam%e3%81%a8%e3%81%84%e3%81%86%e3%82%ab%e3%83%a1%e3%83%a9%e4%bb%98%e3%81%8desp32%e3%83%9e%e3%82%a4%e3%82%b3%e3%83%b3%e3%83%a2%e3%82%b8%e3%83%a5%e3%83%bc%e3%83%ab%e3%81%a7%e3%80%81%e3%82%ab","status":"publish","type":"post","link":"http:\/\/kako.com\/blog\/?p=47430","title":{"rendered":"ESP32-CAM\u3068\u3044\u3046\u30ab\u30e1\u30e9\u4ed8\u304dESP32\u30de\u30a4\u30b3\u30f3\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u3001\u30ab\u30e1\u30e9\u3067\u64ae\u5f71\u3057\u305f\u753b\u50cf\u3092SD\u30ab\u30fc\u30c9\u306b\u4fdd\u5b58\u3057\u3066\u307f\u305f"},"content":{"rendered":"\n<p><a href=\"http:\/\/kako.com\/blog\/?p=47419\">ESP32-CAM\u3068\u3044\u3046\u30ab\u30e1\u30e9\u4ed8\u304dESP32\u30de\u30a4\u30b3\u30f3\u30e2\u30b8\u30e5\u30fc\u30eb<\/a>\u3067\u3001\u30ab\u30e1\u30e9\u3067\u64ae\u5f71\u3057\u305f\u753b\u50cf\u3092SD\u30ab\u30fc\u30c9\u306b\u4fdd\u5b58\u3057\u3066\u307f\u305f\u3002<\/p>\n\n\n\n<p> ESP32-CAM\u306f\u6280\u9069\u30de\u30fc\u30af\u7121\u3057\u306a\u306e\u3067\u3001\u96fb\u6ce2\u3092\u51fa\u3055\u306a\u3044\u3067SD\u30ab\u30fc\u30c9\u306b\u753b\u50cf\u3092\u4fdd\u5b58\u3059\u308b\u3068\u3044\u3046\u30bd\u30d5\u30c8\u3092\u4f5c\u308b\u306e\u3092\u8a66\u3057\u305f\u3002<br> \u4ee5\u4e0b\u306f\u3001\u6700\u521d\u306b\u64ae\u5f71\u3057\u305f\u7b2c1\u679a\u76ee\u306e\u753b\u50cf\u3067\u300190\u5ea6\u5411\u304d\u304c\u56de\u8ee2\u3057\u3066\u3044\u308b\u304c\u3001\u30ce\u30fc\u30c8PC\u306e\u8107\u306b\u7f6e\u3044\u3066\u3044\u305fESP32-CAM\u3067\u30ce\u30fc\u30c8PC\u306e\u6db2\u6676\u753b\u9762\u3092\u6a2a\u306e\u307b\u3046\u304b\u3089\u64ae\u5f71\u3055\u308c\u305f\u3082\u306e\u3060\u3002 \u3057\u304b\u3082\u3001\u30ab\u30e1\u30e9\u306e\u30ec\u30f3\u30ba\u306e\u4fdd\u8b77\u30b7\u30fc\u30eb\u3092\u5f35\u3063\u305f\u307e\u307e\u306a\u306e\u3067\u306a\u3093\u304b\u66c7\u3063\u305f\u611f\u3058\u306b\u306a\u3063\u3066\u3044\u308b\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" width=\"320\" height=\"240\" src=\"http:\/\/kako.com\/blog\/wp\/wp-content\/uploads\/2020\/02\/test.jpg\" alt=\"\" class=\"wp-image-47431\" srcset=\"http:\/\/kako.com\/blog\/wp\/wp-content\/uploads\/2020\/02\/test.jpg 320w, http:\/\/kako.com\/blog\/wp\/wp-content\/uploads\/2020\/02\/test-300x225.jpg 300w\" sizes=\"(max-width: 320px) 100vw, 320px\" \/><\/figure>\n\n\n\n<!--more-->\n\n\n\n<p>Arduino IDE\u306e\u74b0\u5883\u3067ESP32\u95a2\u4fc2\u306eexample\u304c\u3044\u308d\u3044\u308d\u3068\u3042\u308b\u306e\u3060\u304c\u3001\u305d\u306e\u3046\u3061\u306eCameraWebServer\u3068\u3044\u3046\u30b3\u30fc\u30c9\u3092\u5143\u306b\u3057\u3066WebServer\u90e8\u5206\u3092\u5168\u90e8\u524a\u9664\u3057\u3066\u30ab\u30e1\u30e9\u3060\u3051\u307e\u305a\u52d5\u304b\u3057\u305f\u3002<br>\u305d\u3057\u3066\u3001\u30ab\u30e1\u30e9\u304b\u3089\u53d6\u5f97\u3057\u305fJPEG\u30c7\u30fc\u30bf\u3092\u3001SD\u30ab\u30fc\u30c9(microSD)\u306b\u4fdd\u5b58\u3059\u308b\u3068\u3044\u3046\u90e8\u5206\u3092\u4ed8\u3051\u8db3\u3057\u3066\u4f5c\u6210\u3057\u305f\u3002<br>SD\u30ab\u30fc\u30c9\u95a2\u4fc2\u306f\u3001Arduino IDE\u306eexample\u306eSD_MMC\u3068\u3044\u3046\u30e9\u30a4\u30d6\u30e9\u30ea\u306eexample\u3092\u5143\u306b\u3057\u3066\u66f8\u3044\u3066\u307f\u305f\u3002<\/p>\n\n\n\n<p>\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u3068\u304a\u308a\u3002<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n#include &quot;esp_camera.h&quot;\n#include &quot;FS.h&quot;\n#include &quot;SD_MMC.h&quot;\n\n\/\/ Select camera model\n\/\/#define CAMERA_MODEL_WROVER_KIT\n\/\/#define CAMERA_MODEL_ESP_EYE\n\/\/#define CAMERA_MODEL_M5STACK_PSRAM\n\/\/#define CAMERA_MODEL_M5STACK_WIDE\n#define CAMERA_MODEL_AI_THINKER\n\n#include &quot;camera_pins.h&quot;\n\nvoid setup() {\n  Serial.begin(115200);\n  Serial.setDebugOutput(true);\n  Serial.println();\n\n  camera_config_t config;\n  config.ledc_channel = LEDC_CHANNEL_0;\n  config.ledc_timer = LEDC_TIMER_0;\n  config.pin_d0 = Y2_GPIO_NUM;\n  config.pin_d1 = Y3_GPIO_NUM;\n  config.pin_d2 = Y4_GPIO_NUM;\n  config.pin_d3 = Y5_GPIO_NUM;\n  config.pin_d4 = Y6_GPIO_NUM;\n  config.pin_d5 = Y7_GPIO_NUM;\n  config.pin_d6 = Y8_GPIO_NUM;\n  config.pin_d7 = Y9_GPIO_NUM;\n  config.pin_xclk = XCLK_GPIO_NUM;\n  config.pin_pclk = PCLK_GPIO_NUM;\n  config.pin_vsync = VSYNC_GPIO_NUM;\n  config.pin_href = HREF_GPIO_NUM;\n  config.pin_sscb_sda = SIOD_GPIO_NUM;\n  config.pin_sscb_scl = SIOC_GPIO_NUM;\n  config.pin_pwdn = PWDN_GPIO_NUM;\n  config.pin_reset = RESET_GPIO_NUM;\n  config.xclk_freq_hz = 20000000;\n  config.pixel_format = PIXFORMAT_JPEG;\n  \/\/init with high specs to pre-allocate larger buffers\n  if(psramFound()){\n    config.frame_size = FRAMESIZE_UXGA;\n    config.jpeg_quality = 10;\n    config.fb_count = 2;\n  } else {\n    config.frame_size = FRAMESIZE_SVGA;\n    config.jpeg_quality = 12;\n    config.fb_count = 1;\n  }\n\n#if defined(CAMERA_MODEL_ESP_EYE)\n  pinMode(13, INPUT_PULLUP);\n  pinMode(14, INPUT_PULLUP);\n#endif\n\n  \/\/ camera init\n  esp_err_t err = esp_camera_init(&amp;config);\n  if (err != ESP_OK) {\n    Serial.printf(&quot;Camera init failed with error 0x%x&quot;, err);\n    return;\n  }\n\n  sensor_t * s = esp_camera_sensor_get();\n  \/\/initial sensors are flipped vertically and colors are a bit saturated\n  if (s-&gt;id.PID == OV3660_PID) {\n    s-&gt;set_vflip(s, 1);\/\/flip it back\n    s-&gt;set_brightness(s, 1);\/\/up the blightness just a bit\n    s-&gt;set_saturation(s, -2);\/\/lower the saturation\n  }\n  \/\/drop down frame size for higher initial frame rate\n  s-&gt;set_framesize(s, FRAMESIZE_QVGA);\n\n#if defined(CAMERA_MODEL_M5STACK_WIDE)\n  s-&gt;set_vflip(s, 1);\n  s-&gt;set_hmirror(s, 1);\n#endif\n\n\n  if(!SD_MMC.begin()){\n    Serial.println(&quot;Card Mount Failed&quot;);\n    return;\n  }\n\n  camera_fb_t * fb = NULL;\n\n  fb = esp_camera_fb_get();\n  if (!fb) {\n    Serial.println(&quot;Camera capture failed&quot;);\n    return;\n  }\n  if (fb-&gt;len &lt;= 0) {\n    Serial.println(&quot;capture data size error&quot;);\n    return;\n  }\n  \n  File file = SD_MMC.open(&quot;\/test.jpg&quot;, FILE_WRITE);\n  if(!file){\n    Serial.println(&quot;Failed to open file for writing&quot;);\n    return;\n  }\n\n  if (file.write(fb-&gt;buf, fb-&gt;len)) {\n    Serial.println(&quot;File written&quot;);\n  } else {\n    Serial.println(&quot;Write failed&quot;);\n  }\n  file.close();\n  \n  esp_camera_fb_return(fb);\n\n  Serial.println(&quot;Finished.&quot;);\n  \n}\n\nvoid loop() {\n  \/\/ put your main code here, to run repeatedly:\n  delay(10000);\n}\n\n<\/pre><\/div>\n\n\n<p>\u3053\u306e\u30bd\u30fc\u30b9\u306e\u4ed6\u306bCameraWebServer\u306e\u30b9\u30b1\u30c3\u30c1\u306b\u542b\u307e\u308c\u308bcamera_pins.h\u3068camera_index.h\u3068\u3044\u3046\u30d8\u30c3\u30c0\u30d5\u30a1\u30a4\u30eb\u304c\u5fc5\u8981\u3060\u3002<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>\u52d5\u4f5c\u3068\u3057\u3066\u306f\u3001\u96fb\u6e90\u3092\u5165\u308c\u308b\u3068\u3001\u52dd\u624b\u306b\u8d77\u52d5\u3057\u3066\u30ab\u30e1\u30e9\u3092\u521d\u671f\u5316\u3057\u3001\u753b\u50cf\u30921\u679aJPEG\u30e2\u30fc\u30c9\u3067\u64ae\u5f71\u3057\u3001\u305d\u308c\u3092SD\u30ab\u30fc\u30c9(microSD)\u306btest.jpg\u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u540d\u3067\u4fdd\u5b58\u3059\u308b\u3068\u3044\u3046\u3082\u306e\u3060\u3002<\/p>\n\n\n\n<p>UART\u306b\u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u304c\u8868\u793a\u3055\u308c\u308b\u306e\u3067\u3001\u52d5\u304b\u306a\u3044\u5834\u5408\u306f\u3001\u305d\u308c\u3092\u898b\u308b\u3068\u3069\u3053\u3067\u4e0d\u5177\u5408\u304c\u3067\u3066\u3044\u308b\u304b\u304c\u308f\u304b\u308b\u3060\u308d\u3046\u3002<\/p>\n\n\n\n<p>\u4f55\u5ea6\u304b\u52d5\u304b\u3057\u305f\u3046\u3061\u3001\u3046\u307e\u304f\u52d5\u304b\u306a\u3044\u5834\u5408\u3082\u3042\u3063\u3066\u3001\u306a\u305c\u304b\u30ab\u30e1\u30e9\u304c\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u306a\u3044\u54c1\u7269\u3060\u3068\u8aa4\u5224\u5b9a\u3055\u308c\u305f\u308a\u3001microSD\u30ab\u30fc\u30c9\u304c\u4f7f\u3048\u306a\u3044\u3068\u3044\u3046\u5224\u5b9a\u304c\u51fa\u305f\u308a\u3059\u308b\u3053\u3068\u304c\u3042\u3063\u305f\u3002\u3057\u304b\u3057\u3001\u305d\u306e\u76f4\u5f8c\u306b\u30ea\u30bb\u30c3\u30c8\u30dc\u30bf\u30f3\u3067\u30ea\u30bb\u30c3\u30c8\u3092\u639b\u3051\u308b\u3068\u666e\u901a\u306b\u52d5\u3044\u305f\u308a\u3057\u3066\u3044\u305f\u306e\u3067\u3001\u539f\u56e0\u306f\u3088\u304f\u308f\u304b\u3089\u306a\u304b\u3063\u305f\u3002<\/p>\n\n\n\n<p>\u5b9f\u7528\u306b\u4f7f\u3046\u5834\u5408\u306b\u306f\u30a8\u30e9\u30fc\u306e\u30c1\u30a7\u30c3\u30af\u3092\u3082\u3063\u3068\u3057\u3063\u304b\u308a\u3084\u3063\u3066\u3001\u30ea\u30c8\u30e9\u30a4\u51e6\u7406\u3068\u304b\u3092\u4ed8\u3051\u52a0\u3048\u305f\u307b\u3046\u304c\u3044\u3044\u3060\u308d\u3046\u3002<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>ESP32-CAM\u3068\u3044\u3046\u30ab\u30e1\u30e9\u4ed8\u304dESP32\u30de\u30a4\u30b3\u30f3\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u3001\u30ab\u30e1\u30e9\u3067\u64ae\u5f71\u3057\u305f\u753b\u50cf\u3092SD\u30ab\u30fc\u30c9\u306b\u4fdd\u5b58\u3057\u3066\u307f\u305f\u3002 ESP32-CAM\u306f\u6280\u9069\u30de\u30fc\u30af\u7121\u3057\u306a\u306e\u3067\u3001\u96fb\u6ce2\u3092\u51fa\u3055\u306a\u3044\u3067SD\u30ab\u30fc\u30c9\u306b\u753b\u50cf\u3092\u4fdd\u5b58\u3059\u308b\u3068\u3044\u3046\u30bd\u30d5\u30c8\u3092\u4f5c\u308b\u306e [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3,5,14],"tags":[],"_links":{"self":[{"href":"http:\/\/kako.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/47430"}],"collection":[{"href":"http:\/\/kako.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/kako.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/kako.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/kako.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=47430"}],"version-history":[{"count":3,"href":"http:\/\/kako.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/47430\/revisions"}],"predecessor-version":[{"id":47500,"href":"http:\/\/kako.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/47430\/revisions\/47500"}],"wp:attachment":[{"href":"http:\/\/kako.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=47430"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/kako.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=47430"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/kako.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=47430"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}