網(wǎng)站開(kāi)發(fā)步驟說(shuō)明書(shū)是什么品牌推廣方式
ESP32-CAM模塊Arduino環(huán)境搭建測(cè)試
一.ESP32+OV2640攝像頭模塊CameraWebServer視頻查看
二.測(cè)試ESP32-CAM(后續(xù)稱cam模塊)代碼是否上傳執(zhí)行成功測(cè)試
const int led0 = 12;
const int led1 = 13;void setup() {// put your setup code here, to run once:pinMode(led0, OUTPUT);pinMode(led1, OUTPUT);
}void loop() {// put your main code here, to run repeatedly:digitalWrite(led0, HIGH);digitalWrite(led1, HIGH);delay(5000);digitalWrite(led0, LOW);digitalWrite(led1, LOW);delay(500);
}
PS:上敘代碼是測(cè)試cam模塊代碼是否執(zhí)行成功
二.由于之前使用的是Arduino IDE 1.8.5版本,ESP32-CAM模塊上傳代碼后報(bào)錯(cuò) Camera probe failed with error 0x105(ESP_ERR_NOT_FOUND) Camera init failed with error 0x105 , 代碼如下
代碼片段①
#include <esp_camera.h>// 定義攝像頭模塊的引腳連接
#define CAMERA_MODEL_AI_THINKER // 如果你使用的是 AI Thinker 攝像頭模塊,請(qǐng)取消注釋此行
//#define CAMERA_MODEL_M5STACK_PSRAM // 如果你使用的是 M5Stack 攝像頭模塊,請(qǐng)取消注釋此行const int ledPin = 4; // 攝像頭準(zhǔn)備拍照時(shí)閃爍的 LED 引腳void setup() {Serial.begin(115200);// 配置攝像頭模塊camera_config_t config;config.ledc_channel = LEDC_CHANNEL_0;config.ledc_timer = LEDC_TIMER_0;config.pin_d0 = 5;config.pin_d1 = 18;config.pin_d2 = 19;config.pin_d3 = 21;config.pin_d4 = 36;config.pin_d5 = 39;config.pin_d6 = 34;config.pin_d7 = 35;config.pin_xclk = 0;config.pin_pclk = 22;config.pin_vsync = 25;config.pin_href = 23;config.pin_sscb_sda = 26;config.pin_sscb_scl = 27;config.pin_pwdn = 32;config.pin_reset = -1;config.xclk_freq_hz = 20000000;config.pixel_format = PIXFORMAT_RGB565;config.frame_size = FRAMESIZE_QVGA; // 設(shè)置圖像分辨率為QVGA// 攝像頭初始化esp_err_t err = esp_camera_init(&config);if (err != ESP_OK) {Serial.printf("攝像頭初始化失敗: %s", esp_err_to_name(err));return;}// 設(shè)置 LED 引腳為輸出模式pinMode(ledPin, OUTPUT);
}void loop() {// 拍照camera_fb_t *fb = NULL;fb = esp_camera_fb_get();if (!fb) {Serial.println("獲取圖像緩沖區(qū)失敗");return;}// 在串口打印圖像大小Serial.printf("分辨率: %dx%d, 圖像大小: %u bytes\n", fb->width, fb->height, fb->len);// 閃爍 LED 表示拍照完成digitalWrite(ledPin, HIGH);delay(500);digitalWrite(ledPin, LOW);// 釋放圖像緩沖區(qū)esp_camera_fb_return(fb);
}
ps:上敘代碼片段報(bào)錯(cuò) Camera probe failed with error 0x105(ESP_ERR_NOT_FOUND) Camera init failed with error 0x105,
獲取圖像失敗!
代碼片段②
#include <WiFi.h>
#include <ESPAsyncWebServer.h>
#include <esp_camera.h>// WiFi 參數(shù)
const char* ssid = "your_SSID";
const char* password = "12345678";// 定義攝像頭模塊的引腳連接
#define CAMERA_MODEL_AI_THINKER // 如果你使用的是 AI Thinker 攝像頭模塊,請(qǐng)取消注釋此行
//#define CAMERA_MODEL_M5STACK_PSRAM // 如果你使用的是 M5Stack 攝像頭模塊,請(qǐng)取消注釋此行// 創(chuàng)建 AsyncWebServer 實(shí)例
AsyncWebServer server(80);void setup() {Serial.begin(115200);// 連接到 Wi-FiWiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED) {delay(1000);Serial.print(".");}Serial.println("");Serial.println("Wi-Fi connected");Serial.print("IP address: ");Serial.println(WiFi.localIP());// 配置攝像頭模塊camera_config_t config;// 省略攝像頭配置參數(shù)設(shè)置// 攝像頭初始化esp_err_t err = esp_camera_init(&config);if (err != ESP_OK) {Serial.printf("攝像頭初始化失敗: %s", esp_err_to_name(err));return;}// 設(shè)置路由和處理程序server.on("/", HTTP_GET, handleRoot);server.on("/stream", HTTP_GET, handleStream);// 啟動(dòng)服務(wù)器server.begin();Serial.println("Server started");
}void loop() {// 不需要代碼
}// 處理根路徑請(qǐng)求的處理程序
void handleRoot(AsyncWebServerRequest* request) {request->send(200, "text/plain", "Hello from ESP32!");
}// 處理圖像流請(qǐng)求的處理程序
void handleStream(AsyncWebServerRequest* request) {// 設(shè)置圖像類型為 multipart/x-mixed-replacerequest->sendHeader("Content-Type", "multipart/x-mixed-replace; boundary=boundary");while (true) {// 拍照camera_fb_t* fb = esp_camera_fb_get();if (!fb) {Serial.println("獲取圖像緩沖區(qū)失敗");break;}// 發(fā)送圖像數(shù)據(jù)request->send_P(200, "image/jpeg", (const char*)fb->buf, fb->len);// 釋放圖像緩沖區(qū)esp_camera_fb_return(fb);// 延時(shí)一段時(shí)間,控制圖像刷新率delay(100);}
}
串口報(bào)錯(cuò) Camera probe failed with error 0x105(ESP_ERR_NOT_FOUND) Camera init failed with error 0x105, 報(bào)錯(cuò)ESPAsyncWebServer.h,esp_camera.h not found , 獲取圖像失敗!
代碼片段③
#include "esp_camera.h"// 定義攝像頭配置
camera_config_t config;void setup() {Serial.begin(115200);// 配置攝像頭config.ledc_channel = LEDC_CHANNEL_0;config.ledc_timer = LEDC_TIMER_0;config.pin_d0 = 32;config.pin_d1 = 35;config.pin_d2 = 34;config.pin_d3 = 5;config.pin_d4 = 39;config.pin_d5 = 18;config.pin_d6 = 36;config.pin_d7 = 19;config.pin_xclk = 27;config.pin_pclk = 21;config.pin_vsync = 25;config.pin_href = 26;config.pin_sscb_sda = 22;config.pin_sscb_scl = 23;config.pin_reset = -1; // 不使用復(fù)位引腳config.xclk_freq_hz = 20000000;config.pixel_format = PIXFORMAT_JPEG;// 啟動(dòng)攝像頭esp_err_t err = esp_camera_init(&config);if (err != ESP_OK) {Serial.printf("攝像頭啟動(dòng)失敗!錯(cuò)誤代碼: 0x%x\n", err);return;}Serial.println("攝像頭已啟動(dòng)!");
}void loop() {// 捕獲圖像camera_fb_t *fb = esp_camera_fb_get();if (!fb) {Serial.println("獲取圖像失敗!");Serial.print("fb = ");Serial.println((unsigned long)fb);return;}// 打印圖像數(shù)據(jù)for (size_t i = 0; i < fb->len; i++) {Serial.write(fb->buf[i]);}// 釋放圖像緩存esp_camera_fb_return(fb);delay(1000); // 延遲1秒后再次捕獲圖像
}
上敘代碼還是同樣報(bào)錯(cuò),導(dǎo)致一度懷疑攝像頭是壞的
三.成功運(yùn)行成功代碼.
PS 后經(jīng)過(guò)查詢,看到很多博主教程中使用的都是Arduino 版本都是比本人使用的高,并且選擇的工具開(kāi)發(fā)板是AI -Thinker ESP32-CAM, 本人使用的1.8.5版本經(jīng)過(guò)折騰始終沒(méi)有出現(xiàn)AI-Thinker ESP32-CAM選項(xiàng), 干脆升級(jí)到了 Arduino 2.1.0 版本
安裝過(guò)程中使用魔法后依然報(bào)錯(cuò)Error: 2 UNKNOWN: Get “https://github.com/espressif/crosstool-NG/releases/download/esp-2021r2-patch5/xtensa-esp32-elf-gcc8_4_0-esp-2021r2-patch5-win64.zip”: dial tcp 20.205.243.166:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. 解決辦法直接使瀏覽器貼入https://github.com/espressif/crosstool-NG/releases/download/esp-2021r2-patch5/xtensa-esp32-elf-gcc8_4_0-esp-2021r2-patch5-win64.zip, 下載下來(lái)后,粘貼到 C:\Users\Search\AppData\Local\Arduino15\staging\packages, 注:每個(gè)人電腦C:\Users\Search\路徑不一樣, 然后接著點(diǎn)擊安裝
新版本 2.0.11也嘗試安裝但是失敗
文件首選項(xiàng)開(kāi)發(fā)板管理器地址中的https://dl.espressif.com/dl/package_esp32_index.json,經(jīng)過(guò)查詢最新版本只能到1.0.6
https://arduino.me/packages/esp32.json經(jīng)過(guò)查看最新版本能到2.0.9
猜測(cè)是導(dǎo)致2.0.11安裝失敗的原因吧,
當(dāng)你安裝成功后
四.運(yùn)行示例代碼注意事項(xiàng)
驗(yàn)證代碼過(guò)程中會(huì)報(bào)錯(cuò)項(xiàng)目太大了;閱讀以下頁(yè)面的提示減小文件大小。
http://www.arduino.cc/en/Guide/Troubleshooting#size
為開(kāi)發(fā)板 ESP32 Wrover Module 編譯時(shí)出錯(cuò)。
解決辦法