文章目录
- ESP32 之 esp32-cam wifi拍照传图系统
- 1.效果演示
- 2.材料准备
- 3.原理图接线
- 4.下载代码
ESP32 之 esp32-cam wifi拍照传图系统
1.效果演示
2.材料准备
- ESP32-cam
- USB转TTL
- 按钮x2 开关x2
3.原理图接线
GND - GND
TX - RX
RX - TX
VCC - 5V
GPIO_0 - GND 下载模式
GPIO_0 不接线 运行模式
4.下载代码
- 需要提前搭建Arduino环境,在这就不多说,在这里要注意安装好程序相关的库
代码下载,主函数代码如下
#include "camera_pins.h"
const char* ssid = "DY";
const char* password = "1403119048";
AsyncWebServer server(80);
boolean takeNewPhoto = false;
bool LED_flag = false;
void setup() {
Serial.begin(115200);
pinMode(LED_1, OUTPUT);
pinMode(KEY_1, INPUT);
pinMode(KEY_2, INPUT);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
if (!SPIFFS.begin(true)) {
Serial.println("An Error has occurred while mounting SPIFFS");
ESP.restart();}
else {
delay(500);
Serial.println("SPIFFS mounted successfully");
}
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
camera_config_t config;
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
config.pin_d0 = Y2_GPIO_NUM;
config.pin_d1 = Y3_GPIO_NUM;
config.pin_d2 = Y4_GPIO_NUM;
config.pin_d3 = Y5_GPIO_NUM;
config.pin_d4 = Y6_GPIO_NUM;
config.pin_d5 = Y7_GPIO_NUM;
config.pin_d6 = Y8_GPIO_NUM;
config.pin_d7 = Y9_GPIO_NUM;
config.pin_xclk = XCLK_GPIO_NUM;
config.pin_pclk = PCLK_GPIO_NUM;
config.pin_vsync = VSYNC_GPIO_NUM;
config.pin_href = HREF_GPIO_NUM;
config.pin_sscb_sda = SIOD_GPIO_NUM;
config.pin_sscb_scl = SIOC_GPIO_NUM;
config.pin_pwdn = PWDN_GPIO_NUM;
config.pin_reset = RESET_GPIO_NUM;
config.xclk_freq_hz = 20000000;
config.pixel_format = PIXFORMAT_JPEG;
if (psramFound()) {
config.frame_size = FRAMESIZE_UXGA;
config.jpeg_quality = 10;
config.fb_count = 2;
} else {
config.frame_size = FRAMESIZE_SVGA;
config.jpeg_quality = 12;
config.fb_count = 1;
}
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
Serial.printf("Camera init failed with error 0x%x", err);
ESP.restart();
}
server.on("/", HTTP_GET, [](AsyncWebServerRequest * request) {
request->send_P(200, "text/html", index_html);
});
server.on("/capture", HTTP_GET, [](AsyncWebServerRequest * request) {
takeNewPhoto = true;
request->send_P(200, "text/plain", "Taking Photo");
});
server.on("/saved-photo", HTTP_GET, [](AsyncWebServerRequest * request) {
request->send(SPIFFS, FILE_PHOTO, "image/jpg", false);
});
server.on("/LED", HTTP_GET, [](AsyncWebServerRequest * request) {
LED_flag =!LED_flag;
digitalWrite(LED_1, LED_flag);
});
server.begin();
Serial.print("IP Address: http://");
Serial.println(WiFi.localIP());
}
void loop() {
if (takeNewPhoto) {
capturePhotoSaveSpiffs();
takeNewPhoto = false;
}
while(Serial.available()){
char c=Serial.read();
if(c=='1'){
LED_flag =!LED_flag;
digitalWrite(LED_1, LED_flag);
Serial.write("1\n");
}
else if(c=='2') {
takeNewPhoto = true;
Serial.write("2\n");
}
}
int key_val = KEY_Scan();
if(key_val == 1){
digitalWrite(LED_1, HIGH);
takeNewPhoto = true;
delay(500);
digitalWrite(LED_1, LOW);
}
if(key_val == 2){
LED_flag =!LED_flag;
digitalWrite(LED_1, LED_flag);
}
delay(1);
}
bool checkPhoto( fs::FS &fs ) {
File f_pic = fs.open( FILE_PHOTO );
unsigned int pic_sz = f_pic.size();
return ( pic_sz > 100 );
}
void capturePhotoSaveSpiffs( void ) {
camera_fb_t * fb = NULL;
bool ok = 0;
do {
Serial.println("Taking a photo...");
fb = esp_camera_fb_get();
if (!fb) {
Serial.println("Camera capture failed");
return;
}
Serial.printf("Picture file name: %s\n", FILE_PHOTO);
File file = SPIFFS.open(FILE_PHOTO, FILE_WRITE);
if (!file) {
Serial.println("Failed to open file in writing mode");
}
else {
file.write(fb->buf, fb->len);
Serial.print("The picture has been saved in ");
Serial.print(FILE_PHOTO);
Serial.print(" - Size: ");
Serial.print(file.size());
Serial.println(" bytes");
}
file.close();
esp_camera_fb_return(fb);
ok = checkPhoto(SPIFFS);
} while ( !ok );
}
int KEY_Scan(void)
{
static int key_up = 1;
if(key_up && (digitalRead(KEY_1) == 0 || digitalRead(KEY_2) == 0 ))
{
delay(10);
key_up=0;
if(digitalRead(KEY_1) == 0)return 1;
if(digitalRead(KEY_2) == 0)return 2;
}else if( digitalRead(KEY_1) == 1 || digitalRead(KEY_2) == 1)key_up=1;
return 0;
}
完整代码下载地址
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)