带
Diymore相机的ESP-32 CAM模块
ESP32-CAM视频流服务器
这里是一个使用示例。
您必须首先安装库:
Arduino Ide Windows中的 Esp32板 /
Arduino Ide Linux和Mac中的Esp32板详细的设置在本文中。
就我而言,我使用了未注释的AI-THINKER模块
#定义CAMERA_MODEL_AI_THINKER
人脸识别功能不适用于我。 文章中的评论很有帮助。
使用1.02 ESP内核时,面部识别似乎不再起作用(至少对于示例程序而言)。 回滚到1.01内核并使用属于该内核的示例程序,将对其进行“修复”
回滚到库1.01的先前版本后,一切正常。
我有一对I2C 128x64和TFT SPI 128x128显示器
如果您没有CAM模块,
带FIFO的OV7670文章如何将相机连接到显示器。 支持OV2640和OV7670摄像机
在撰写本文时,以下内容对我有用
ESP32相机+ Wifi服务器+ I2C显示屏(AdaFruit)
ESP32相机+ SPI Display 1.44“ TFT 128x128 v1.1(AdaFruit)
ESP32摄像头+ SPI Display 1.8英寸TFT 128 * 160(Espressif库)
WiFi驱动程序与SPI总线冲突。 使用其他库的可能解决方案。 WiFi模块初始化时出现问题。
主要问题是ESP32-CAM模块的自由支脚数量有限。 端口的一部分用于相机,一部分与sd卡并行。 sd卡连接器已安装在板上。 另一个结论(IO4)是LED手电筒。
I2C Display B / W对于从摄像机接收到的图像的实际使用并不特别感兴趣。 TFT彩色和高分辨率。 在它上面,您已经可以看到脸。 在这样的显示器或更高的分辨率上,您可以制作门眼
我马上要说AdaFruit库不是最快的。 我设法每秒显示几帧。 使用低级别的库更有希望。 但是我无法通过显示1.44“ 128x128 SPI V1.1。来获得ESP32_TFT_library。也许不支持ILI9163。我使用1.8” 128 * 160 SPI TFT,设法压缩了大约12 FPS!
友情链接有几个库的运行速度更快。 但是有些没有移植到esp-32(
link ):
4.98秒Adafruit_ST7735
1.71秒ST7735X_kbv
1.30秒PDQ_ST7735
该视频令人印象深刻:
当使用
两个端口时,微控制器上的HSPI或VSPI硬件端口之一以及带有ILI9341驱动程序的显示器可以每秒接收30帧(
链接 )。
但是正如我之前在ESP32-CAM模块中所说,只有一个SPI是可用的。 它显示在以下PINS上:
IO2-直流(A0)
IO14-时钟
IO15-CS
IO13-MOSI(SDA)
IO12-MISO(输入。未使用)
IO0-BCKL(背光。未使用)
IO16-RST


我尝试的第一个库是AdaFruit SSD1306
I2C 128x64蓝色OLED显示屏
#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 } ....
在esp32中工作时,使用软件I2C仿真。 涉及IO14和IO15。 几乎可以使用任何可用端口,而不使用H / W总线。
如何连接
单色0.96“ i2c OLED显示器 。您需要注意I2C总线上的显示地址。在这种情况下,为0x3C
SPI Display 1.8“ TFT 128 * 160乐鑫库
接线图:
IO2-A0
IO14-SCK
IO15-CS
IO13-SDA
IO16-重置

板上还有一个SD卡读卡器
IO配置:
从
Espressif安装环境和开发环境。 有关
如何执行此操作的详细说明。
安装
库 。 需要进行两个更正才能组装库。
生成文件:
+ CFLAGS += -Wno-error=tautological-compare \ + -Wno-implicit-fallthrough \ + -Wno-implicit-function-declaration
组件/ tft / tftspi.c:
+ #include "driver/gpio.h
→
补丁然后安装
ESP32 Camera Driver 。
配置:
# $ HOME / esp / esp-idf / export.sh
#idf.py menuconfig
允许访问USB端口以进行固件和监视:
#sudo chmod 777 /开发/ ttyUSB0
我们收集并填写:
#make -j4 && make flash
通过使用send_data方法写入数据包可实现12FPS。 记录不是逐像素进行的,而是整行等于屏幕的宽度:
esp_err_t camera_capture(){ uint32_t tstart, t1, t2; tstart = clock();
→
要点FRAME_WIDTH是QVGA的320像素的帧宽度 config.frame_size = FRAMESIZE_QVGA;
实际上,我们在显示窗口中以全帧形式看到128 * 160
使用一个摄像机缓冲区记录配置日志(config.fb_count = 1)
拍摄相机时间:32毫秒
发送缓冲时间:47毫秒
捕获框架。结果
1000 /(32 + 47)= 12.65帧记录两个便携式摄像机缓冲区的配置(config.fb_count = 2)拍摄相机时间:39毫秒
发送缓冲时间:63毫秒
捕获框架。
拍摄相机时间:0毫秒
发送缓冲时间:59毫秒
捕获框架。
拍摄相机时间:0毫秒
发送缓冲时间:34毫秒
捕获框架。
拍摄相机时间:40毫秒
发送缓冲时间:64 ms
捕获框架。
拍摄相机时间:0毫秒
发送缓冲时间:59毫秒
捕获框架。
拍摄相机时间:0毫秒
发送缓冲时间:34毫秒
捕获框架。
拍摄相机时间:40毫秒
发送缓冲时间:63毫秒
捕获框架。
拍摄相机时间:0毫秒
发送缓冲时间:60毫秒
捕获框架。
拍摄相机时间:0毫秒
发送缓冲时间:34毫秒
捕获框架。
拍摄相机时间:39毫秒
发送缓冲时间:63毫秒
捕获框架。
拍摄相机时间:0毫秒
发送缓冲时间:60毫秒
捕获框架。
拍摄相机时间:1毫秒
发送缓冲时间:34毫秒
捕获框架。
拍摄相机时间:40毫秒
发送缓冲时间:63毫秒
捕获框架。
拍摄相机时间:0毫秒
发送缓冲时间:60毫秒
捕获框架。
拍摄相机时间:0毫秒
发送缓冲时间:34毫秒
捕获框架。
拍摄相机时间:40毫秒
发送缓冲时间:63毫秒
捕获框架。
拍摄相机时间:0毫秒
发送缓冲时间:59毫秒
捕获框架。
拍摄相机时间:0毫秒
发送缓冲时间:35毫秒
捕获框架。
由于使用了摄录一体机的第二个缓冲区,因此可以立即获得某些周期的缓冲区。 首先,使用不到一个缓冲区就可以获得完整的循环,但是这一次“继续”进行。 周期之间的间隔是浮动的。
几次我在日志中发现“触发了欠压检测器”,因此我关闭了检测器。 因为起初我从3.3V ESP32-CAM引脚提供了背光显示
#include "soc/rtc_cntl_reg.h" ... WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
结论
ESP32低成本功能模块。 对于板的CAM版本中已实现的端口,缺乏结论性的灾难性结论,因此,如果您确实需要相机,请选择CAM版本。