Skip to content

Commit 8df6d0c

Browse files
committed
add
1 parent 4969423 commit 8df6d0c

File tree

2 files changed

+215
-0
lines changed

2 files changed

+215
-0
lines changed

examples/esp32cam-send/camera.h

Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
#pragma once
2+
3+
#define CAMERA_MODEL_AI_THINKER
4+
//#define CAMERA_MODEL_WROVER_KIT
5+
//#define CAMERA_MODEL_M5STACK_PSRAM
6+
//#define CAMERA_MODEL_M5STACK_WITHOUT_PSRAM
7+
8+
#include "esp_camera.h"
9+
10+
#if defined(CAMERA_MODEL_WROVER_KIT)
11+
#define PWDN_GPIO_NUM -1
12+
#define RESET_GPIO_NUM -1
13+
#define XCLK_GPIO_NUM 21
14+
#define SIOD_GPIO_NUM 26
15+
#define SIOC_GPIO_NUM 27
16+
17+
#define Y9_GPIO_NUM 35
18+
#define Y8_GPIO_NUM 34
19+
#define Y7_GPIO_NUM 39
20+
#define Y6_GPIO_NUM 36
21+
#define Y5_GPIO_NUM 19
22+
#define Y4_GPIO_NUM 18
23+
#define Y3_GPIO_NUM 5
24+
#define Y2_GPIO_NUM 4
25+
#define VSYNC_GPIO_NUM 25
26+
#define HREF_GPIO_NUM 23
27+
#define PCLK_GPIO_NUM 22
28+
29+
#elif defined(CAMERA_MODEL_M5STACK_PSRAM)
30+
#define PWDN_GPIO_NUM -1
31+
#define RESET_GPIO_NUM 15
32+
#define XCLK_GPIO_NUM 27
33+
#define SIOD_GPIO_NUM 25
34+
#define SIOC_GPIO_NUM 23
35+
36+
#define Y9_GPIO_NUM 19
37+
#define Y8_GPIO_NUM 36
38+
#define Y7_GPIO_NUM 18
39+
#define Y6_GPIO_NUM 39
40+
#define Y5_GPIO_NUM 5
41+
#define Y4_GPIO_NUM 34
42+
#define Y3_GPIO_NUM 35
43+
#define Y2_GPIO_NUM 32
44+
#define VSYNC_GPIO_NUM 22
45+
#define HREF_GPIO_NUM 26
46+
#define PCLK_GPIO_NUM 21
47+
48+
#elif defined(CAMERA_MODEL_M5STACK_WITHOUT_PSRAM)
49+
#define PWDN_GPIO_NUM -1
50+
#define RESET_GPIO_NUM 15
51+
#define XCLK_GPIO_NUM 27
52+
#define SIOD_GPIO_NUM 25
53+
#define SIOC_GPIO_NUM 23
54+
55+
#define Y9_GPIO_NUM 19
56+
#define Y8_GPIO_NUM 36
57+
#define Y7_GPIO_NUM 18
58+
#define Y6_GPIO_NUM 39
59+
#define Y5_GPIO_NUM 5
60+
#define Y4_GPIO_NUM 34
61+
#define Y3_GPIO_NUM 35
62+
#define Y2_GPIO_NUM 17
63+
#define VSYNC_GPIO_NUM 22
64+
#define HREF_GPIO_NUM 26
65+
#define PCLK_GPIO_NUM 21
66+
67+
#elif defined(CAMERA_MODEL_AI_THINKER)
68+
#define PWDN_GPIO_NUM 32
69+
#define RESET_GPIO_NUM -1
70+
#define XCLK_GPIO_NUM 0
71+
#define SIOD_GPIO_NUM 26
72+
#define SIOC_GPIO_NUM 27
73+
74+
#define Y9_GPIO_NUM 35
75+
#define Y8_GPIO_NUM 34
76+
#define Y7_GPIO_NUM 39
77+
#define Y6_GPIO_NUM 36
78+
#define Y5_GPIO_NUM 21
79+
#define Y4_GPIO_NUM 19
80+
#define Y3_GPIO_NUM 18
81+
#define Y2_GPIO_NUM 5
82+
#define VSYNC_GPIO_NUM 25
83+
#define HREF_GPIO_NUM 23
84+
#define PCLK_GPIO_NUM 22
85+
86+
#else
87+
#error "Camera model not selected"
88+
#endif
89+
90+
/*
91+
frame_size
92+
FRAMESIZE_96X96, // 96x96
93+
FRAMESIZE_QQVGA, // 160x120
94+
FRAMESIZE_QCIF, // 176x144
95+
FRAMESIZE_HQVGA, // 240x176
96+
FRAMESIZE_240X240, // 240x240
97+
FRAMESIZE_QVGA, // 320x240
98+
FRAMESIZE_CIF, // 400x296
99+
FRAMESIZE_HVGA, // 480x320
100+
FRAMESIZE_VGA, // 640x480
101+
FRAMESIZE_SVGA, // 800x600
102+
FRAMESIZE_XGA, // 1024x768
103+
FRAMESIZE_HD, // 1280x720
104+
FRAMESIZE_SXGA, // 1280x1024
105+
FRAMESIZE_UXGA, // 1600x1200
106+
FRAMESIZE_FHD, // 1920x1080
107+
FRAMESIZE_P_HD, // 720x1280
108+
FRAMESIZE_P_3MP, // 864x1536
109+
FRAMESIZE_QXGA, // 2048x1536
110+
FRAMESIZE_QHD, // 2560x1440
111+
FRAMESIZE_WQXGA, // 2560x1600
112+
FRAMESIZE_P_FHD, // 1080x1920
113+
FRAMESIZE_QSXGA, // 2560x1920
114+
*/
115+
/*
116+
pixel_format
117+
PIXFORMAT_RGB565, // 2BPP/RGB565
118+
PIXFORMAT_YUV422, // 2BPP/YUV422
119+
PIXFORMAT_YUV420, // 1.5BPP/YUV420
120+
PIXFORMAT_GRAYSCALE, // 1BPP/GRAYSCALE
121+
PIXFORMAT_JPEG, // JPEG/COMPRESSED
122+
PIXFORMAT_RGB888, // 3BPP/RGB888
123+
PIXFORMAT_RAW, // RAW
124+
PIXFORMAT_RGB444, // 3BP2P/RGB444
125+
PIXFORMAT_RGB555, // 3BP2P/RGB555
126+
*/
127+
128+
// jpeg_quality - 0-63 lower means higher quality
129+
130+
bool cam_init(framesize_t frame_size = FRAMESIZE_VGA, pixformat_t pixel_format = PIXFORMAT_JPEG, int jpeg_quality = 12) {
131+
camera_config_t config;
132+
config.ledc_channel = LEDC_CHANNEL_0;
133+
config.ledc_timer = LEDC_TIMER_0;
134+
config.pin_d0 = Y2_GPIO_NUM;
135+
config.pin_d1 = Y3_GPIO_NUM;
136+
config.pin_d2 = Y4_GPIO_NUM;
137+
config.pin_d3 = Y5_GPIO_NUM;
138+
config.pin_d4 = Y6_GPIO_NUM;
139+
config.pin_d5 = Y7_GPIO_NUM;
140+
config.pin_d6 = Y8_GPIO_NUM;
141+
config.pin_d7 = Y9_GPIO_NUM;
142+
config.pin_xclk = XCLK_GPIO_NUM;
143+
config.pin_pclk = PCLK_GPIO_NUM;
144+
config.pin_vsync = VSYNC_GPIO_NUM;
145+
config.pin_href = HREF_GPIO_NUM;
146+
config.pin_sccb_sda = SIOD_GPIO_NUM;
147+
config.pin_sccb_scl = SIOC_GPIO_NUM;
148+
config.pin_pwdn = PWDN_GPIO_NUM;
149+
config.pin_reset = RESET_GPIO_NUM;
150+
config.xclk_freq_hz = 20000000;
151+
config.pixel_format = pixel_format;
152+
config.frame_size = frame_size;
153+
config.jpeg_quality = jpeg_quality;
154+
config.fb_count = 1;
155+
156+
esp_err_t result = esp_camera_init(&config);
157+
return (result == ESP_OK);
158+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// отправка кадра с камеры esp32-cam
2+
// напиши боту команду /start для отправки фото
3+
4+
#include <Arduino.h>
5+
#include <FastBot2.h>
6+
#include <WiFi.h>
7+
8+
#include "camera.h"
9+
10+
#define WIFI_SSID ""
11+
#define WIFI_PASS ""
12+
#define BOT_TOKEN ""
13+
14+
FastBot2 bot;
15+
16+
void updateh(fb::Update& u) {
17+
Serial.println("New message!");
18+
19+
if (u.message().text() == "/start") {
20+
// пропустить прошлый кадр
21+
camera_fb_t* fbj = esp_camera_fb_get();
22+
esp_camera_fb_return(fbj);
23+
24+
camera_fb_t* fbj = esp_camera_fb_get();
25+
if (fbj) {
26+
fb::File f("frame.jpg", fb::File::Type::photo, fbj->buf, fbj->len);
27+
f.chatID = u.message().chat().id();
28+
bot.sendFile(f, true); // обязательно синхронная отправка
29+
}
30+
esp_camera_fb_return(fbj);
31+
}
32+
}
33+
34+
void setup() {
35+
Serial.begin(115200);
36+
Serial.println();
37+
38+
WiFi.mode(WIFI_STA);
39+
WiFi.begin(WIFI_SSID, WIFI_PASS);
40+
while (WiFi.status() != WL_CONNECTED) {
41+
delay(500);
42+
Serial.print(".");
43+
}
44+
Serial.println("Connected");
45+
Serial.println(WiFi.localIP());
46+
47+
bool res = cam_init(FRAMESIZE_VGA, PIXFORMAT_JPEG);
48+
Serial.println(res ? "Camera OK" : "Camera ERROR");
49+
50+
bot.attachUpdate(updateh);
51+
bot.setToken(F(BOT_TOKEN));
52+
bot.setPollMode(fb::Poll::Long, 20000);
53+
}
54+
55+
void loop() {
56+
bot.tick();
57+
}

0 commit comments

Comments
 (0)