esp eye - gfd-dennou-club/mrubyc-esp32 GitHub Wiki

ESP-EYE

  • ボードにはESP32チップ、2メガピクセルカメラ、マイク、8 MバイトのPSRAM、4Mバイトのフラッシュが搭載されている.

    • 現時点では,カメラで撮影した映像を Linux サーバへ送信できるようにしている.マイクは未対応.
  • 顔検出・認識プラットフォーム ESP-WHO に対応しているようだが,個人的には必要性を感じていないので ESP-WHO を試す予定は今のところ無い.

    • 物体認識などの AI 的な操作は,送信先の Linux サーバで頑張る方が筋が良い気がしている.

利用の手順

menuconfig で ESP-EYE を使うために,PSRAM を有効にする. さらに,IRAM が不足するので,Wi-Fi の IRAM 利用を無効化する.

$ make menuconfig

+ mrubyc-esp32 Configuration   
  + [*] USE ESP-EYE CAMERA (idf.py add-dependency "espressif/esp32-camera")

+ Component config
  + ESP PSRAM 
    + [*] Support for external, SPI-connected RAM

+ Component config
  + Wi‑Fi
    + [ ] WiFi IRAM speed optimization  <-- チェックを外す
    + [ ] WiFi RX IRAM speed optimization  <-- チェックを外す

esp32-camera を有効にする

$ idf.py add-dependency "espressif/esp32-camera"

いったん clean してから make して ESP-EYE に書き込む

$ make clean
$ make flash spiffs monitor

利用

ESP-EYE は記録媒体を持たないため,mrubyc-esp32 では HTTP.capture_and_post メソッドを用意し, 写真撮影とサーバへのデータ送信を一度に行えるようにしている.以下の例では 1 分おきに写真をサーバに送っている.

wlan = WLAN.new()
wlan.connect("SSID", "PASS")

puts "ifconfig: #{wlan.ifconfig}"
puts "mac: #{wlan.mac}"
puts "ip: #{wlan.ip}"

url = "https://xxxxxx/~sugiyama/camera.php" #送信先サーバ

loop do
  response = HTTP.capture_and_post(url)  #撮影と送信を一度に行う
  puts "Server responded: #{response}"

  sleep 60
end

注:最初の 1 枚目は露光不足になりがちだが,2 枚目からは問題なくなる.

参考:Linux サーバでのファイル受け取り

以下は受け取ったデータを camera ディレクトリに保存するための PHP スクリプトの例である.

<?php

$upload_dir = "./camera/";
$file_name = "pic_" . date("Ymd_His") . ".jpg";
$file_path = $upload_dir . $file_name;

$jpg_data = file_get_contents('php://input');
if ($jpg_data) {
    file_put_contents($file_path, $jpg_data);
    echo "Success: Image received.";

} else {
    header("HTTP/1.1 400 Bad Request");
    echo "Error: No data received.";
}
?>