スマホでロボットアームを動かす

 

 

スマホでロボットアームを動かす

 

続き

マイコンESP32でカメラを使うに挑戦していきます。

 

例によってチュートリアルを参考にさせて頂きます。

Sketch_16.1_CameraWebServerをチュートリアルに従って進めて行きます。

ブルートゥースの時と違って結構大掛かりでapp_httpd.cpp、camera_index.h、camera_pins.hも必要です。

 

本体のSketch_16.1_CameraWebServer.inoも倍以上のボリューム

/**********************************************************************
  Filename    : Camera Web Serrver
  Description : ESP32 connects to WiFi and prints a url through a serial port.
                Users visit the site to view the image data ESP32 camera.
  Auther      : www.freenove.com
  Modification: 2021/12/01
**********************************************************************/
#include "esp_camera.h"
#include <WiFi.h>

// Select camera model
#define CAMERA_MODEL_WROVER_KIT // Has PSRAM
//#define CAMERA_MODEL_ESP_EYE // Has PSRAM
//#define CAMERA_MODEL_M5STACK_PSRAM // Has PSRAM
//#define CAMERA_MODEL_M5STACK_V2_PSRAM // M5Camera version B Has PSRAM
//#define CAMERA_MODEL_M5STACK_WIDE // Has PSRAM
//#define CAMERA_MODEL_M5STACK_ESP32CAM // No PSRAM
//#define CAMERA_MODEL_M5STACK_UNITCAM // No PSRAM
//#define CAMERA_MODEL_AI_THINKER // Has PSRAM
//#define CAMERA_MODEL_TTGO_T_JOURNAL // No PSRAM


#include "camera_pins.h"

const char *ssid_Router     = "**********";  //input your wifi name
const char *password_Router = "**********";  //input your wifi passwords
camera_config_t config;

void startCameraServer();
void config_init();

void setup() {
  Serial.begin(115200);
  Serial.setDebugOutput(true);
  Serial.println();

  config_init();
  config.frame_size = FRAMESIZE_VGA;
  config.jpeg_quality = 10;

  // camera init
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x", err);
    return;
  }

  sensor_t * s = esp_camera_sensor_get();
  s->set_vflip(s, 1);        //1-Upside down, 0-No operation
  s->set_hmirror(s, 0);      //1-Reverse left and right, 0-No operation
  s->set_brightness(s, 1);   //up the blightness just a bit
  s->set_saturation(s, -1);  //lower the saturation

  WiFi.begin(ssid_Router, password_Router);
  while (WiFi.isConnected() != true) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  startCameraServer();

  Serial.print("Camera Ready! Use 'http://");
  Serial.print(WiFi.localIP());
  Serial.println("' to connect");
}

void loop() {
  ;
}

void config_init() {
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = Y2_GPIO_NUM;
  config.pin_d1 = Y3_GPIO_NUM;
  config.pin_d2 = Y4_GPIO_NUM;
  config.pin_d3 = Y5_GPIO_NUM;
  config.pin_d4 = Y6_GPIO_NUM;
  config.pin_d5 = Y7_GPIO_NUM;
  config.pin_d6 = Y8_GPIO_NUM;
  config.pin_d7 = Y9_GPIO_NUM;
  config.pin_xclk = XCLK_GPIO_NUM;
  config.pin_pclk = PCLK_GPIO_NUM;
  config.pin_vsync = VSYNC_GPIO_NUM;
  config.pin_href = HREF_GPIO_NUM;
  config.pin_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG;
  config.fb_count = 1;
}

内容は分からなくても指示通りに進めて行くと

パソコンのブラウザにカメラの映像が写し出されました。

 

スマホからもアクセス出来て映像が見れます。

ボタンタップで画像がダウンロードできます。

 

もう一つの方法

Sketch_16.2_As_VideoWebServerからのアクセス

こちらはボタン群は無くストリーミング映像が映るだけ。

 

画像が映るのは確認出来ましたがデータとして取り込む方法を考えなくてはなりません。


Sketch_16.1_CameraWebServerの方はサーバーからボタンタップでダウンロードしてその画像データーを利用できる。流れとしては分かりやすい。

 

もう一つはSketch_16.2_As_VideoWebServerのストリーミング映像を直接取得する。

出来たらこちらの方法で行きたい所ですが難しい場合はSketch_16.1_CameraWebServerのダウンロード方式で行きます。

 

今回も超が付くほど簡単にカメラを使うことが出来ましたが、ライブラリーがもしなかったら一生カメラに映ることは無いでしょう。

 

また、更新します。

 

mckeechan.hatenadiary.jp