Open3
ESP32-CAMをブラウザから操作
ブラウザからの操作でESP32-CAMにPWM信号を発生させ、サーボモーターを動かす。
ESP32-CAMに新しい命令を追加するのは
と同様。
CameraWebServer.ino
下記によればSDカードを使わなければgpio14が使えそう。
なのでCameraWebServer.ino
pinMode(4, OUTPUT); //LEDフラッシュライト用 GPIO出力
の下に
CameraWebServer.ino
pinMode(14, OUTPUT);
を追加。
以上。
本質的ではないが、githubなどにあげる際、パスワードなどが公開されるのを防ぐために、ssidの情報を別ファイルに移す。下記を追加し、.gitignore に ssid.h を入れる。
CameraWebServer.ino
#include "ssid.h"
const char* ssid = MY_SSID;
const char* password = MY_SSID_PASS;
ssid.h
ssid.h
#define MY_SSID "ssid"
#define MY_SSID_PASS "pass"
app_httpd.cpp
初めの方の色々宣言してあるところに下記を追加
app_httpd.cpp
static int8_t pin14 = 0;
サーボを動かすために下記を追加。
app_httpd.cpp
#include <ESP32Servo.h>
Servo myservo;
app_httpd.cpp
static esp_err_t cmd_handler(httpd_req_t *req)
内の else if が連続しているところの末尾に下記を追加。
app_httpd.cpp
else if(!strcmp(variable, "pin14")){
pin14=val;
myservo.attach(14);
if(pin14){
//digitalWrite(14, HIGH);
myservo.write(0); // サーボモーターを0度の位置まで動かす
delay(500);
myservo.write(90); // サーボモーターを90度の位置まで動かす
delay(500);
myservo.write(0); // サーボモーターを180度の位置まで動かす
delay(500);
digitalWrite(14, LOW);
}else{
digitalWrite(14, LOW);
}
app_httpd.cpp
static esp_err_t status_handler(httpd_req_t *req)
内の p+=... が連続しているところの末尾に下記を追加。
app_httpd.cpp
p+=sprintf(p, "\"pin14\":%u", pin14);
以上。
本質的ではないエラー処理。
カメラが起動した後、flashを動作させても問題ないが、サーボモーターを動かすとカメラが止まってエラーを吐き続ける。エラーが発生した際はsetup()関数を呼び始めからやりなおす。
app_httpd.cpp
static esp_err_t stream_handler(httpd_req_t *req)
内の無限ループを下記のように変更。
app_httpd.cpp
while(true){
detected = false;
face_id = 0;
fb = esp_camera_fb_get();
if (!fb) {
Serial.println("Camera capture failed!!");
setup(); // to reboot after servo moter.
//res = ESP_FAIL;
res = ESP_OK;
これで下記にアクセスすればサーボモータが回るようになる。
http://(ip address)/control?var=pin14&val=1"
機能的には前回投稿で終わりだが、使い勝手が悪いので、
htmlでボタンを作り、クリックすると、phpにPOSTでsubmitされ、
curl-execされるようにした。
前回投稿の最後で触れたように、所定のアドレスにアクセスしさえすれば良い。
phpファイルはgithubにあげるかも。
ブラウザのレイアウトはこんな感じ。
動作しているところを載せたかったが、特定のサービスにアップしていないとダメらしい。
作成者以外のコメントは許可されていません