Modul ESP-32 CAM dengan kamera dari
DiymoreServer Streaming Video ESP32-CAM
Contoh penggunaan ada di
sini .
Pertama-tama Anda harus menginstal perpustakaan:
Papan Esp32 di Arduino Ide Windows /
Papan Esp32 di Arduino Ide Linux dan MacPengaturan detail ada di artikel.
Dalam kasus saya, saya menggunakan modul AI-THINKER yang tidak diomentari
#define CAMERA_MODEL_AI_THINKER
Fungsi pengenalan wajah tidak berfungsi untuk saya. Komentar dalam artikel itu sangat membantu.
Tampaknya pengenalan wajah tidak lagi berfungsi (setidaknya dengan program contoh) saat menggunakan inti ESP 1.02. Meluncur kembali ke inti 1.01 dan menggunakan contoh program milik inti itu, akan 'memperbaikinya'
Setelah memutar kembali ke versi 1.01 perpustakaan sebelumnya semuanya bekerja.
Saya memiliki sepasang layar I2C 128x64 dan TFT SPI 128x128
Artikel
OV7670 dengan FIFO cara menghubungkan kamera ke layar jika Anda tidak memiliki modul CAM. Mendukung kamera OV2640 dan OV7670
Pada saat penulisan, berikut ini bekerja untuk saya
Kamera ESP32 + Wifi Server + Layar I2C (AdaFruit)
Kamera ESP32 + Tampilan SPI 1,44 "TFT 128x128 v1.1 (AdaFruit)
Kamera ESP32 + Tampilan SPI 1.8 "TFT 128 * 160 (Espressif library)
Driver WiFi bertentangan dengan bus SPI. Kemungkinan solusi untuk menggunakan perpustakaan yang berbeda. Masalah muncul pada saat inisialisasi modul WiFi.
Masalah utama adalah bahwa modul ESP32-CAM memiliki jumlah kaki bebas yang terbatas. Sebagian port digunakan untuk kamera, sebagian paralel dengan sd-card. Konektor sd-card dipasang di papan tulis. Kesimpulan lain (IO4) adalah senter LED.
Layar I2C B / W tidak begitu menarik untuk digunakan secara nyata dengan gambar yang diterima dari kamera. Warna TFT dan resolusi tinggi. Di atasnya Anda sudah bisa melihat wajahnya. Pada tampilan seperti itu atau sedikit resolusi yang lebih tinggi Anda dapat membuat Door Eye
Saya akan segera mengatakan bahwa perpustakaan AdaFruit bukanlah yang tercepat. Saya berhasil menampilkan beberapa bingkai per detik. Lebih menjanjikan untuk menggunakan perpustakaan yang berfungsi pada level rendah. Tapi saya tidak bisa mendapatkan ESP32_TFT_library dengan tampilan saya 1,44 "128x128 SPI V1.1. Mungkin ILI9163 tidak didukung. Saya mengambil 1,8" 128 * 160 SPI TFT dan saya berhasil memeras sekitar 12 FPS!
TautanAda beberapa perpustakaan yang bekerja lebih cepat. Tetapi beberapa tidak porting untuk esp-32 (
tautan ):
4,98 detik Adafruit_ST7735
1,71 detik ST7735X_kbv
1,30 detik PDQ_ST7735
Video ini terlihat mengesankan:
Saat menggunakan
dua port, salah satu port perangkat keras HSPI atau VSPI pada mikrokontroler dan tampilan dengan driver ILI9341 dapat menerima 30 frame per detik (
tautan ).
Tetapi seperti yang saya katakan sebelumnya dalam modul ESP32-CAM, hanya satu SPI yang gratis. Ini ditampilkan pada PIN berikut:
IO2 - DC (A0)
IO14 - CLK
IO15 - CS
IO13 - MOSI (SDA)
IO12 - MISO (Input. Tidak Digunakan)
IO0 - BCKL (Lampu latar. Tidak digunakan)
IO16 - RST


Perpustakaan pertama yang saya coba adalah AdaFruit SSD1306
I2C 128x64 Layar OLED Biru
#include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) #define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) Adafruit_SSD1306 display; void init_display(){ pinMode(14,INPUT_PULLUP); pinMode(15,INPUT_PULLUP); Wire.begin(14,15); display = Adafruit_SSD1306(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64 Serial.println(F("SSD1306 allocation failed")); for(;;); // Don't proceed, loop forever } ....
Saat bekerja di esp32, emulasi I2C Perangkat Lunak digunakan. Terlibat IO14 dan IO15. Hampir semua port gratis dapat digunakan, bukan bus H / W yang digunakan.
Bagaimana menghubungkan
layar OLED Monochrome 0.96 "i2c . Anda perlu memperhatikan alamat tampilan pada bus I2C. Dalam hal ini, 0x3C
SPI Display 1,8 "TFT 128 * 160 Espressif Library
Diagram pengkabelan:
IO2 - A0
IO14 - SCK
IO15 - CS
IO13 - SDA
IO16 - RESET

Ada juga pembaca kartu SD di papan tulis
Konfigurasi IO:
Instal lingkungan dan lingkungan pengembangan dari
Espressif . Petunjuk terperinci tentang
cara melakukan ini .
Instal
perpustakaan . Dua koreksi perlu dilakukan untuk merakit perpustakaan.
Makefile:
+ CFLAGS += -Wno-error=tautological-compare \ + -Wno-implicit-fallthrough \ + -Wno-implicit-function-declaration
komponen / tft / tftspi.c:
+ #include "driver/gpio.h
→
TempelKemudian instal
Driver Kamera ESP32 .
Konfigurasikan:
#. $ HOME / esp / esp-idf / export.sh
# idf.py menuconfig
Izinkan akses untuk port USB untuk firmware dan pemantauan:
#sudo chmod 777 / dev / ttyUSB0
Kami mengumpulkan dan mengisi:
#membuat -j4 && membuat flash
12FPS dicapai melalui penulisan paket menggunakan metode send_data. Rekaman bukan pixel demi pixel, tetapi seluruh baris sama dengan lebar layar:
esp_err_t camera_capture(){ uint32_t tstart, t1, t2; tstart = clock();
→
IntisariFRAME_WIDTH adalah lebar bingkai 320 piksel untuk QVGA config.frame_size = FRAMESIZE_QVGA;
Bahkan, kita melihat pada jendela tampilan 128 * 160 dari bingkai penuh
Log untuk konfigurasi dengan satu buffer kamera video (config.fb_count = 1)
Tangkap waktu kamera: 32 ms
Kirim waktu buffer: 47 ms
Ambil bingkai ok.Hasil
1000 / (32 + 47) = 12,65 FPSLog untuk konfigurasi dengan dua buffer camcorder (config.fb_count = 2)Tangkap waktu kamera: 39 ms
Kirim waktu buffer: 63 ms
Ambil bingkai ok.
Tangkap waktu kamera: 0 ms
Kirim waktu buffer: 59 ms
Ambil bingkai ok.
Tangkap waktu kamera: 0 ms
Kirim waktu buffer: 34 ms
Ambil bingkai ok.
Tangkap waktu kamera: 40 ms
Kirim waktu buffer: 64 ms
Ambil bingkai ok.
Tangkap waktu kamera: 0 ms
Kirim waktu buffer: 59 ms
Ambil bingkai ok.
Tangkap waktu kamera: 0 ms
Kirim waktu buffer: 34 ms
Ambil bingkai ok.
Tangkap waktu kamera: 40 ms
Kirim waktu buffer: 63 ms
Ambil bingkai ok.
Tangkap waktu kamera: 0 ms
Kirim waktu buffer: 60 ms
Ambil bingkai ok.
Tangkap waktu kamera: 0 ms
Kirim waktu buffer: 34 ms
Ambil bingkai ok.
Tangkap waktu kamera: 39 ms
Kirim waktu buffer: 63 ms
Ambil bingkai ok.
Tangkap waktu kamera: 0 ms
Kirim waktu buffer: 60 ms
Ambil bingkai ok.
Tangkap waktu kamera: 1 ms
Kirim waktu buffer: 34 ms
Ambil bingkai ok.
Tangkap waktu kamera: 40 ms
Kirim waktu buffer: 63 ms
Ambil bingkai ok.
Tangkap waktu kamera: 0 ms
Kirim waktu buffer: 60 ms
Ambil bingkai ok.
Tangkap waktu kamera: 0 ms
Kirim waktu buffer: 34 ms
Ambil bingkai ok.
Tangkap waktu kamera: 40 ms
Kirim waktu buffer: 63 ms
Ambil bingkai ok.
Tangkap waktu kamera: 0 ms
Kirim waktu buffer: 59 ms
Ambil bingkai ok.
Tangkap waktu kamera: 0 ms
Kirim waktu buffer: 35 ms
Ambil bingkai ok.
Karena penggunaan buffer kedua camcorder, buffer dalam beberapa siklus diperoleh secara instan. Pada awalnya, siklus lengkap diperoleh dalam waktu kurang dari menggunakan satu buffer, tetapi kemudian kali ini "berjalan". Interval antara siklus mengambang.
Beberapa kali saya terjebak di log "Detektor Brownout dipicu" jadi saya mematikan detektor. Karena pada awalnya saya mengisi tampilan lampu latar dari pin 3.3V ESP32-CAM
#include "soc/rtc_cntl_reg.h" ... WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
Kesimpulan
Modul fungsional murah ESP32. Ada kekurangan kesimpulan besar untuk port yang diimplementasikan di papan CAM versi CAM, jadi pilih versi CAM jika Anda benar-benar membutuhkan kamera.