ESP32 之 esp32-cam wifi拍照传图系统1
文章目录
- 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"// 你的wifi账号密码
const char* ssid = "DY";
const char* password = "1403119048";// 在端口80上创建AsyncWebServer对象
AsyncWebServer server(80);boolean takeNewPhoto = false;
bool LED_flag = false;void setup() {Serial.begin(115200); //串口初始化pinMode(LED_1, OUTPUT); //初始化 LEDpinMode(KEY_1, INPUT); //按键1初始化pinMode(KEY_2, INPUT); //按键2初始化WiFi.begin(ssid, password); //连接wifiwhile (WiFi.status() != WL_CONNECTED) {delay(1000);Serial.println("Connecting to WiFi...");}if (!SPIFFS.begin(true)) { //初始化SPIFFSSerial.println("An Error has occurred while mounting SPIFFS");ESP.restart();}else {delay(500);Serial.println("SPIFFS mounted successfully");}//Turn-off the 'brownout detector'WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);// Camera initOV2640 camera modulecamera_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);});//路由控制LED开关server.on("/LED", HTTP_GET, [](AsyncWebServerRequest * request) {LED_flag =!LED_flag;digitalWrite(LED_1, LED_flag);});// 启动服务器server.begin();Serial.print("IP Address: http://"); //打印IP地址用于服务器连接Serial.println(WiFi.localIP());
}void loop() {//判断是否抓拍if (takeNewPhoto) {capturePhotoSaveSpiffs();takeNewPhoto = false;}//串口接收指令while(Serial.available()){char c=Serial.read();if(c=='1'){//开关LEDLED_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){ //按键1按下digitalWrite(LED_1, HIGH);takeNewPhoto = true;delay(500);digitalWrite(LED_1, LOW); }if(key_val == 2){ //按键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 );
}// 捕捉照片并保存到SPIFFS
void capturePhotoSaveSpiffs( void ) {camera_fb_t * fb = NULL; // pointerbool 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); // payload (image), payload lengthSerial.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);// 检查文件是否正确地保存在SPIFFS中ok = checkPhoto(SPIFFS);} while ( !ok );//将文件保存到SD卡当中
}
//按键扫描
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; // 无按键按下
}
完整代码下载地址
ESP32 之 esp32-cam wifi拍照传图系统1相关推荐
- esp32拍照传输到手机android,ESP32 之 esp32-cam wifi拍照传图系统2
ESP32 之 esp32-cam wifi拍照传图系统2 ESP32 之 esp32-cam wifi拍照传图系统2 ESP32 之 esp32-cam wifi拍照传图系统 补充说明 ESP32- ...
- ESP32 之 esp32-cam wifi拍照传图系统2
ESP32 之 esp32-cam wifi拍照传图系统 补充说明 ESP32-CAM总结 一. ESP32初识 ESP32-CAM模组的核心芯片:ESP32-S 模块是一款超小体积的多功能通用型 8 ...
- 用20块的摄像头(不带fifo的OV7670)做WiFi实时传图小车
博客地址 用20块的摄像头(不带fifo的OV7670)做WiFi实时传图小车 – Infinite's Blog 零.导读 在这篇文章中,你将看到如下内容: OV7670 QVGA配置的注意事项: ...
- 用Mixly ESP8266 ESP32本地局域网/在线OTA无线wifi上传方法
Arduino ESP32 ESP8266 远程无线上传 下载 Mixly 齐护机器人 局域网OTA ESP8266 ESP32本地局域网及在线OTA无线wifi上传方法 方法1:在线升级方法 1-1 ...
- SimpleFOC之ESP32(九)—— WIFI、UDP和TCP
目录 说明 一.网络通信 1.1.准备工作 1.2.UDP通信 1.3.TCP通信 二.硬件准备 三.代码参考 四.代码演示 4.1.WIFI_AP模式UDP通信 4.2.WIFI_STA模式TCP ...
- 大家常见的以ESP32为代表的WIFI、蓝牙双模模块,今天启明云端带来了一款低功耗、距离远的LoRa+蓝牙无线通讯模块WT5105-L1,我们一起看看这款模块在功能上有哪些优势?
首先我们进行一组LoRa.WIFI.蓝牙无线组网对比 LoRa LoRa(长距离)的典型工作频率在美国是915MHz,在欧洲是868MHz,在亚洲是433MHz.允许多个无线电设备使用相同的频段,其典 ...
- esp32与android蓝牙,ESP32通过蓝牙配置WIFI
ESP32通过蓝牙配置WIFI [复制链接] 以下内容通过软件自动翻译,源文为:https://robotzero.one/esp32-wi-fi-connection-bluetooth/ 使用蓝牙 ...
- ESP32学习入门:WiFi连接网络
目录 一.ESP32简单介绍 二.ESP32 Wi-Fi模块介绍 三.ESP32 Wi-Fi 编程模型 四.ESP32 Wi-Fi 事件处理流程 五.ESP32 Wi-Fi开发环境 六.ESP32 W ...
- 基于ESP32 CAM的人脸识别考勤系统
概述:使用 ESP32 CAM 的人脸识别考勤系统 本教程介绍了使用ESP32 CAM 模组的人脸识别考勤系统.我们将为此应用程序使用OpenCV和Visual Studio .OpenCV 是一个开 ...
最新文章
- 用python解“逆序三位数”问题
- 最权威北美放射学会年会回顾:AI的进化与下一个前沿
- 如何在github存储库中添加屏幕截图到README?
- php根据指定字段去重,php二维数组根据某个字段去重
- python和office_Python在office开发中的应用
- 05-树7 堆中的路径 (25 分)
- element走马灯自动_详细element-ui的走马灯carousel轻松实现自适应全屏banner详细过程...
- 提升效率的几个小绝招
- MTK:GPIO的配置与接口说明
- SD/TF卡驱动(一)--------SD卡相关简介
- IE浏览器为什么打不开java_IE浏览器拒绝访问的原因及其解决方法。
- 软件项目估算概念、步骤、方法、戒律总览
- 国家计算机考试培训心得,最新计算机培训心得总结5篇
- python 飞机大战爆炸效果_Pygame飞机大战为什么飞机与敌机碰撞后不再有图片动态切换效果...
- 王垠:完全用Linux工作
- C语言课设-单位车辆调度管理
- 巴比特 | 元宇宙每日必读:大厂的高薪、期权都不香了,互联网精英纷纷涌向的Web3,魅力到底有多大?...
- 广州市天河区2021-2022学年八年级第一学期期末考试英语试题
- springboot+vue框架搭建教程
- 消防法及相关法律法规(一)