2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
- #include <Wire.h>
- #include <ArduCAM.h>
- #include <SPI.h>
- #include <WiFi.h>
- #include <ESPAsyncWebServer.h>
-
- #define CAM_CS 32 // modify according to your own wiring
- #define OV2640_CHIPID_HIGH 0x0A
- #define OV2640_CHIPID_LOW 0x0B
-
- ArduCAM myCAM(OV2640, CAM_CS);
-
- // Set your access point's SSID and password
- const char* ssid = "..."; //wifi名
- const char* password = "....."; // 密码
- AsyncWebServer server(80); // Create an instance of the server
-
- // This function sends the live video frames to the client
- void serverStream(AsyncWebServerRequest *request){
- AsyncWebServerResponse *response = request->beginResponse("multipart/x-mixed-replace;boundary=frame", HTTP_ANY, [](uint8_t *buffer, size_t maxLen, size_t alreadySent) -> size_t {
- if(myCAM.get_bit(ARDUCHIP_TRIG , CAP_DONE_MASK)){
- size_t len = myCAM.read_fifo_length();
- uint8_t * buf = (uint8_t *)malloc(len);
- myCAM.CS_LOW();
- myCAM.set_fifo_burst();
- myCAM.spi_trans(0xFF);
- myCAM.transferBytes(myCAM.camera_model,BUF,buf,len);
- myCAM.CS_HIGH();
- size_t available_len = len - (alreadySent ? 32 : 0);
- size_t will_send =(available_len > maxLen) ? maxLen : available_len;
- if (!alreadySent){ // First chunk
- memcpy_P(buffer, buf, will_send);
- } else { // Consequent chunks
- buffer = buf + 32;
- }
- free(buf);
- if (!alreadySent) {
- return will_send;
- } else if (alreadySent + will_send < len) {
- return will_send;
- } else {
- myCAM.clear_fifo_flag();
- return 0; // Last chunk sent, signaling end of response by returning 0 bytes left
- }
- }
- return 0; // If there's nothing in the buffer, return 0 bytes left
- });
- response->addHeader("Connection", "close");
- request->send(response);
- }
-
- void setup() {
- Wire.begin(21, 22); // SDA, SCL
- WiFi.begin(ssid, password);
- while (WiFi.status() != WL_CONNECTED) {
- delay(1000);
- }
-
- myCAM.set_format(JPEG);
- myCAM.InitCAM();
- myCAM.write_reg(ARDUCHIP_TIM, VSYNC_LEVEL_MASK); // VSYNC is active HIGH
- myCAM.clear_fifo_flag();
- myCAM.write_reg(ARDUCHIP_FRAMES, 0x00);
-
- server.on("/stream", HTTP_GET, serverStream); // Route for live video stream
- server.begin();
- }
-
- void loop() {
- // You can put other code here
- }
ओवी२६४० VCC (विद्युत् आपूर्ति) --> ESP32 3.3V
OV2640 GND (जमीन) --> ESP32 GND
OV2640 SDA (दत्तांशरेखा) --> ESP32 IO21 (I2C आँकडा रेखा SDA)
OV2640 SCL (घड़ी रेखा) --> ESP32 IO22 (I2C घड़ी रेखा SCL)
OV2640 VSNC (फ्रेम समन्वयन) --> ESP32 IO25
OV2640 HREF (पङ्क्ति समन्वयन) --> ESP32 IO23
OV2640 PCLK (पिक्सेल घड़ी) --> ESP32 IO19
OV2640 XCLK (प्रणालीघटिका) --> ESP32 IO18
OV2640 D0 ~ D7 (आँकड़ा रेखा) --> ESP32 IO5 ~ IO13 (8-बिट समानांतर डेटा रेखा)
अस्मिन् समये केचन सावधानाः मित्राणि आविष्कृतवन्तः स्यात् यत् ESP-WROOM-32 विकासबोर्डः २५ युआन्, OV2640 मॉड्यूलः २३ युआन्, कुलम् ४८ युआन् तथा च स्वस्य कॅमेरायुक्तः ESP-WROOM-32 विकासबोर्डः अस्ति २३ युआन् ।ईएसपी३२सीएएम विकासमण्डलस्य मूल्यं केवलं ४१ युआन् एव अस्ति । अन्येषु शब्देषु, "ESP-WROOM-32+ मॉड्यूल" समाधानं न केवलं समायोजनं कठिनं अपितु 7 युआन् अपि मूल्यं भवति, अतः केवलं ESP32CAM विकासबोर्डं किमर्थं न क्रीणीत? मा मां पृच्छतु, यतः अहमपि अधुना एव ज्ञातवान्...