Arducam (arduino) Can't find OV2640 module!
-
@m5stack Have you guys got any idea how to get the arducam esp32 examples working on the M5Camera (2nd version)?
-
// ArduCAM Mini demo (C)2017 Lee // Web: http://www.ArduCAM.com // This program is a demo of how to use most of the functions // of the library with ArduCAM ESP32 2MP/5MP camera. // This demo was made for ArduCAM ESP32 2MP/5MP Camera. // It can take photo and send to the Web. // It can take photo continuously as video streaming and send to the Web. // The demo sketch will do the following tasks: // 1. Set the camera to JPEG output mode. // 2. if server receives "GET /capture",it can take photo and send to the Web. // 3.if server receives "GET /stream",it can take photo continuously as video //streaming and send to the Web. // This program requires the ArduCAM V4.0.0 (or later) library and ArduCAM ESP32 2MP/5MP camera // and use Arduino IDE 1.8.1 compiler or above #include <WiFi.h> #include <Wire.h> #include <ESP32WebServer.h> #include <ArduCAM.h> #include <SPI.h> #include "memorysaver.h" #if !(defined ESP32 ) #error Please select the ArduCAM ESP32 UNO board in the Tools/Board #endif //This demo can only work on OV2640_MINI_2MP or ARDUCAM_SHIELD_V2 platform. #if !(defined (OV2640_MINI_2MP)||defined (OV5640_MINI_5MP_PLUS) || defined (OV5642_MINI_5MP_PLUS) \ || defined (OV5642_MINI_5MP) || defined (OV5642_MINI_5MP_BIT_ROTATION_FIXED) \ ||(defined (ARDUCAM_SHIELD_V2) && (defined (OV2640_CAM) || defined (OV5640_CAM) || defined (OV5642_CAM)))) #error Please select the hardware platform and camera module in the ../libraries/ArduCAM/memorysaver.h file #endif // set GPIO17 as the slave select : const int CS = 17; const int CAM_POWER_ON = D10; #if defined (OV2640_MINI_2MP) || defined (OV2640_CAM) ArduCAM myCAM(OV2640, CS); #elif defined (OV5640_MINI_5MP_PLUS) || defined (OV5640_CAM) ArduCAM myCAM(OV5640, CS); #elif defined (OV5642_MINI_5MP_PLUS) || defined (OV5642_MINI_5MP) || defined (OV5642_MINI_5MP_BIT_ROTATION_FIXED) ||(defined (OV5642_CAM)) ArduCAM myCAM(OV5642, CS); #endif //you can change the value of wifiType to select Station or AP mode. //Default is AP mode. int wifiType = 1; // 0:Station 1:AP //AP mode configuration //Default is arducam_esp8266.If you want,you can change the AP_aaid to your favorite name const char *AP_ssid = "M5Cam"; //Default is no password.If you want to set password,put your password here const char *AP_password = NULL; //Station mode you should put your ssid and password const char *ssid = "SSID"; // Put your SSID here const char *password = "PASSWORD"; // Put your PASSWORD here static const size_t bufferSize = 2048; static uint8_t buffer[bufferSize] = {0xFF}; uint8_t temp = 0, temp_last = 0; int i = 0; bool is_header = false; ESP32WebServer server(80); void start_capture(){ myCAM.clear_fifo_flag(); myCAM.start_capture(); } void camCapture(ArduCAM myCAM){ WiFiClient client = server.client(); uint32_t len = myCAM.read_fifo_length(); if (len >= MAX_FIFO_SIZE) //8M { Serial.println(F("Over size.")); } if (len == 0 ) //0 kb { Serial.println(F("Size is 0.")); } myCAM.CS_LOW(); myCAM.set_fifo_burst(); if (!client.connected()) return; String response = "HTTP/1.1 200 OK\r\n"; response += "Content-Type: image/jpeg\r\n"; response += "Content-len: " + String(len) + "\r\n\r\n"; server.sendContent(response); i = 0; while ( len-- ) { temp_last = temp; temp = SPI.transfer(0x00); //Read JPEG data from FIFO if ( (temp == 0xD9) && (temp_last == 0xFF) ) //If find the end ,break while, { buffer[i++] = temp; //save the last 0XD9 //Write the remain bytes in the buffer if (!client.connected()) break; client.write(&buffer[0], i); is_header = false; i = 0; myCAM.CS_HIGH(); break; } if (is_header == true) { //Write image data to buffer if not full if (i < bufferSize) buffer[i++] = temp; else { //Write bufferSize bytes image data to file if (!client.connected()) break; client.write(&buffer[0], bufferSize); i = 0; buffer[i++] = temp; } } else if ((temp == 0xD8) & (temp_last == 0xFF)) { is_header = true; buffer[i++] = temp_last; buffer[i++] = temp; } } } void serverCapture(){ delay(1000); start_capture(); Serial.println(F("CAM Capturing")); int total_time = 0; total_time = millis(); while (!myCAM.get_bit(ARDUCHIP_TRIG, CAP_DONE_MASK)); total_time = millis() - total_time; Serial.print(F("capture total_time used (in miliseconds):")); Serial.println(total_time, DEC); total_time = 0; Serial.println(F("CAM Capture Done.")); total_time = millis(); camCapture(myCAM); total_time = millis() - total_time; Serial.print(F("send total_time used (in miliseconds):")); Serial.println(total_time, DEC); Serial.println(F("CAM send Done.")); } void serverStream(){ WiFiClient client = server.client(); String response = "HTTP/1.1 200 OK\r\n"; response += "Content-Type: multipart/x-mixed-replace; boundary=frame\r\n\r\n"; server.sendContent(response); while (1){ start_capture(); while (!myCAM.get_bit(ARDUCHIP_TRIG, CAP_DONE_MASK)); size_t len = myCAM.read_fifo_length(); if (len >= MAX_FIFO_SIZE) //8M { Serial.println(F("Over size.")); continue; } if (len == 0 ) //0 kb { Serial.println(F("Size is 0.")); continue; } myCAM.CS_LOW(); myCAM.set_fifo_burst(); if (!client.connected()) break; response = "--frame\r\n"; response += "Content-Type: image/jpeg\r\n\r\n"; server.sendContent(response); while ( len-- ) { temp_last = temp; temp = SPI.transfer(0x00); //Read JPEG data from FIFO if ( (temp == 0xD9) && (temp_last == 0xFF) ) //If find the end ,break while, { buffer[i++] = temp; //save the last 0XD9 //Write the remain bytes in the buffer myCAM.CS_HIGH();; if (!client.connected()) break; client.write(&buffer[0], i); is_header = false; i = 0; } if (is_header == true) { //Write image data to buffer if not full if (i < bufferSize) buffer[i++] = temp; else { //Write bufferSize bytes image data to file myCAM.CS_HIGH(); if (!client.connected()) break; client.write(&buffer[0], bufferSize); i = 0; buffer[i++] = temp; myCAM.CS_LOW(); myCAM.set_fifo_burst(); } } else if ((temp == 0xD8) & (temp_last == 0xFF)) { is_header = true; buffer[i++] = temp_last; buffer[i++] = temp; } } if (!client.connected()) break; } } void handleNotFound(){ String message = "Server is running!\n\n"; message += "URI: "; message += server.uri(); message += "\nMethod: "; message += (server.method() == HTTP_GET)?"GET":"POST"; message += "\nArguments: "; message += server.args(); message += "\n"; server.send(200, "text/plain", message); Serial.println(message); if (server.hasArg("ql")){ int ql = server.arg("ql").toInt(); #if defined (OV2640_MINI_2MP) || defined (OV2640_CAM) myCAM.OV2640_set_JPEG_size(ql); #elif defined (OV5640_MINI_5MP_PLUS) || defined (OV5640_CAM) myCAM.OV5640_set_JPEG_size(ql); #elif defined (OV5642_MINI_5MP_PLUS) || defined (OV5642_MINI_5MP_BIT_ROTATION_FIXED) ||(defined (OV5642_CAM)) myCAM.OV5642_set_JPEG_size(ql); #endif Serial.println("QL change to: " + server.arg("ql")); } } void setup() { uint8_t vid, pid; uint8_t temp; //set the CS as an output: pinMode(CS,OUTPUT); pinMode(CAM_POWER_ON , OUTPUT); digitalWrite(CAM_POWER_ON, HIGH); #if defined(__SAM3X8E__) Wire1.begin(); #else Wire.begin(); #endif Serial.begin(115200); Serial.println(F("ArduCAM Start!")); // initialize SPI: SPI.begin(); SPI.setFrequency(4000000); //4MHz /* //Check if the ArduCAM SPI bus is OK myCAM.write_reg(ARDUCHIP_TEST1, 0x55); temp = myCAM.read_reg(ARDUCHIP_TEST1); if (temp != 0x55){ Serial.println(F("SPI1 interface Error!")); while(1); } //Check if the ArduCAM SPI bus is OK myCAM.write_reg(ARDUCHIP_TEST1, 0x55); temp = myCAM.read_reg(ARDUCHIP_TEST1); if (temp != 0x55){ Serial.println(F("SPI1 interface Error!")); while(1); } */ #if defined (OV2640_MINI_2MP) || defined (OV2640_CAM) //Check if the camera module type is OV2640 myCAM.wrSensorReg8_8(0xff, 0x01); myCAM.rdSensorReg8_8(OV2640_CHIPID_HIGH, &vid); myCAM.rdSensorReg8_8(OV2640_CHIPID_LOW, &pid); if ((vid != 0x26 ) && (( pid != 0x41 ) || ( pid != 0x42 ))) Serial.println(F("Can't find OV2640 module!")); else Serial.println(F("OV2640 detected.")); Serial.print ("vid = "); Serial.println (vid); Serial.print ("pid = "); Serial.println (pid); #elif defined (OV5640_MINI_5MP_PLUS) || defined (OV5640_CAM) //Check if the camera module type is OV5640 myCAM.wrSensorReg16_8(0xff, 0x01); myCAM.rdSensorReg16_8(OV5640_CHIPID_HIGH, &vid); myCAM.rdSensorReg16_8(OV5640_CHIPID_LOW, &pid); if((vid != 0x56) || (pid != 0x40)) Serial.println(F("Can't find OV5640 module!")); else Serial.println(F("OV5640 detected.")); #elif defined (OV5642_MINI_5MP_PLUS) || defined (OV5642_MINI_5MP) || defined (OV5642_MINI_5MP_BIT_ROTATION_FIXED) ||(defined (OV5642_CAM)) //Check if the camera module type is OV5642 myCAM.wrSensorReg16_8(0xff, 0x01); myCAM.rdSensorReg16_8(OV5642_CHIPID_HIGH, &vid); myCAM.rdSensorReg16_8(OV5642_CHIPID_LOW, &pid); if((vid != 0x56) || (pid != 0x42)){ Serial.println(F("Can't find OV5642 module!")); } else Serial.println(F("OV5642 detected.")); #endif //Change to JPEG capture mode and initialize the OV2640 module myCAM.set_format(JPEG); myCAM.InitCAM(); #if defined (OV2640_MINI_2MP) || defined (OV2640_CAM) myCAM.OV2640_set_JPEG_size(OV2640_320x240); #elif defined (OV5640_MINI_5MP_PLUS) || defined (OV5640_CAM) myCAM.write_reg(ARDUCHIP_TIM, VSYNC_LEVEL_MASK); //VSYNC is active HIGH myCAM.OV5640_set_JPEG_size(OV5640_320x240); #elif defined (OV5642_MINI_5MP_PLUS) || defined (OV5642_MINI_5MP) || defined (OV5642_MINI_5MP_BIT_ROTATION_FIXED) ||(defined (OV5642_CAM)) myCAM.write_reg(ARDUCHIP_TIM, VSYNC_LEVEL_MASK); //VSYNC is active HIGH myCAM.OV5640_set_JPEG_size(OV5642_320x240); #endif myCAM.clear_fifo_flag(); if (wifiType == 0){ if(!strcmp(ssid,"SSID")){ Serial.println(F("Please set your SSID")); while(1); } if(!strcmp(password,"PASSWORD")){ Serial.println(F("Please set your PASSWORD")); while(1); } // Connect to WiFi network Serial.println(); Serial.println(); Serial.print(F("Connecting to ")); Serial.println(ssid); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print(F(".")); } Serial.println(F("WiFi connected")); Serial.println(""); Serial.println(WiFi.localIP()); }else if (wifiType == 1){ Serial.println(); Serial.println(); Serial.print(F("Share AP: ")); Serial.println(AP_ssid); Serial.print(F("The password is: ")); Serial.println(AP_password); WiFi.mode(WIFI_AP); WiFi.softAP(AP_ssid, AP_password); Serial.println(""); Serial.println(WiFi.softAPIP()); } // Start the server server.on("/capture", HTTP_GET, serverCapture); server.on("/stream", HTTP_GET, serverStream); server.onNotFound(handleNotFound); server.begin(); Serial.println(F("Server started")); } void loop() { server.handleClient(); } -
@ajb2k3
Hi, I have not tried ArduCAM. But once I'm free, I'll try that. -
This post is deleted! -
@ajb2k3
Here's the pinmap about camera supplied by m5stack. -
@watson 在 Arducam (arduino) Can't find OV2640 module! ä¸è¯´ï¼š
@ajb2k3
Here's the pinmap about camera supplied by m5stack.That doesn't tie up because the arducams arduino_pin.h has D2 as I/O12
and slave select as I/O17
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login