- const char* ssid = "WIFINAME";
- const char* password = "PASSWORD";
- String FIREBASE_HOST = "www....";
- String FIREBASE_AUTH = "....";
- #include "FirebaseESP32.h"
- FirebaseData firebaseData;
- #include <WiFi.h>
- #include "soc/soc.h"
- #include "soc/rtc_cntl_reg.h"
- #include "Base64.h"
- #include "esp_camera.h"
- #include "ArduinoJson.h"
- #include "FS.h"
- #include "SD_MMC.h"
- #include "SPI.h"
- #include "driver/rtc_io.h"
- // WARNING!!! Make sure that you have either selected ESP32 Wrover Module,
- // or another board which has PSRAM enabled
- //CAMERA_MODEL_AI_THINKER
- #define PWDN_GPIO_NUM 32
- #define RESET_GPIO_NUM -1
- #define XCLK_GPIO_NUM 0
- #define SIOD_GPIO_NUM 26
- #define SIOC_GPIO_NUM 27
- #define Y9_GPIO_NUM 35
- #define Y8_GPIO_NUM 34
- #define Y7_GPIO_NUM 39
- #define Y6_GPIO_NUM 36
- #define Y5_GPIO_NUM 21
- #define Y4_GPIO_NUM 19
- #define Y3_GPIO_NUM 18
- #define Y2_GPIO_NUM 5
- #define VSYNC_GPIO_NUM 25
- #define HREF_GPIO_NUM 23
- #define PCLK_GPIO_NUM 22
- void setup() {
- Serial.begin(115200);
- WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
- Serial.setDebugOutput(true);
- Serial.println();
- Serial.println("ssid: " + (String)ssid);
- Serial.println("password: " + (String)password);
- WiFi.begin(ssid, password);
- long int StartTime=millis();
- while (WiFi.status() != WL_CONNECTED) {
- delay(500);
- if ((StartTime+10000) < millis()) break;
- }
- if (WiFi.status() == WL_CONNECTED) {
- char* apssid = "ESP32-CAM";
- char* appassword = "12345678"; //AP password require at least 8 characters.
- Serial.println("");
- Serial.print("Camera Ready! Use 'http://");
- Serial.print(WiFi.localIP());
- Serial.println("' to connect");
- WiFi.softAP((WiFi.localIP().toString()+"_"+(String)apssid).c_str(), appassword);
- }
- else {
- Serial.println("Connection failed");
- return;
- }
- 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;
- //init with high specs to pre-allocate larger buffers
- if(psramFound()){
- config.frame_size = FRAMESIZE_UXGA;
- config.jpeg_quality = 10; //0-63 lower number means higher quality
- config.fb_count = 2;
- }
- else {
- config.frame_size = FRAMESIZE_SVGA;
- config.jpeg_quality = 12; //0-63 lower number means higher quality
- config.fb_count = 1;
- }
- // camera init
- esp_err_t err = esp_camera_init(&config);
- if (err != ESP_OK) {
- Serial.printf("Camera init failed with error 0x%x", err);
- delay(1000);
- ESP.restart();
- }
- //drop down frame size for higher initial frame rate
- sensor_t * s = esp_camera_sensor_get();
- s->set_framesize(s, FRAMESIZE_QQVGA); // VGA|CIF|QVGA|HQVGA|QQVGA ( UXGA? SXGA? XGA? SVGA? )
- Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
- Firebase.reconnectWiFi(true);
- Firebase.setMaxRetry(firebaseData, 3);
- Firebase.setMaxErrorQueue(firebaseData, 30);
- Firebase.enableClassicRequest(firebaseData, true);
- pinMode(13,INPUT);
- if (!SD_MMC.begin("/sdcard", true)){
- Serial.println("Failed to mount SD card");
- return;
- }
- // Check for an SD card
- uint8_t cardType = SD_MMC.cardType();
- if (cardType == CARD_NONE){
- Serial.println("No SD card attached");
- return;
- }
- pinMode(13,INPUT);
- while(1){
- float IR = analogRead(13);
- delay(1000);
- Serial.println(IR);
- }
- while(1){
- //digitalWrite(4, HIGH);
- //delay(1000);
- //digitalWrite(4, LOW);
- //float movement = analogRead(13);
- //Serial.println(movement);
- FirebaseJson json1;
- //json.setJsonData("{\"photo\":\"" + Photo2Base64() + "\"}");
- String jsonData = "{\"photo\":\"" + Photo2Base64() + "\"}";
- // json1.add("photo",5);
- //Serial.println(json["photo"]);
- String photoPath = "/esp32-cam";
- if (Firebase.pushJSON(firebaseData, photoPath,jsonData)) {
- Serial.println(firebaseData.dataPath());
- Serial.println(firebaseData.pushName());
- Serial.println(firebaseData.dataPath() + "/"+ firebaseData.pushName());
- }
- else {
- Serial.println(firebaseData.errorReason());
- }
- delay(10000);
- }
- }
- void loop() {
- delay(10000);
- }
- String Photo2Base64() {
- camera_fb_t * fb = NULL;
- fb = esp_camera_fb_get();
- if(!fb) {
- Serial.println("Camera capture failed");
- return "";
- }
- String imageFile = "data:image/jpeg;base64,";
- char *input = (char *)fb->buf;
- char output[base64_enc_len(3)];
- for (int i=0;i<fb->len;i++) {
- base64_encode(output, (input++), 3);
- if (i%3==0) imageFile += urlencode(String(output));
- }
- esp_camera_fb_return(fb);
- return imageFile;
- }
- String urlencode(String str){
- String encodedString="";
- char c;
- char code0;
- char code1;
- char code2;
- for (int i =0; i < str.length(); i++){
- c=str.charAt(i);
- if (c == ' '){
- encodedString+= '+';
- } else if (isalnum(c)){
- encodedString+=c;
- } else{
- code1=(c & 0xf)+'0';
- if ((c & 0xf) >9){
- code1=(c & 0xf) - 10 + 'A';
- }
- c=(c>>4)&0xf;
- code0=c+'0';
- if (c > 9){
- code0=c - 10 + 'A';
- }
- code2='\0';
- encodedString+='%';
- encodedString+=code0;
- encodedString+=code1;
- //encodedString+=code2;
- }
- yield();
- }
- return encodedString;
- }
ESP-32 Cam AI Thinker and IR Sensor Program
ESP-32 Cam AI Thinker and IR Sensor Program
Hey guys, I'm new to this forum but have taken Arduino up as a new hobby and am having some trouble with a project and was wondering if anyone could help me. I am programming my ESP 32 Cam through an Arduino and am currently trying to make a program which reads an IR sensor value and if movement is detected, it takes a pic and uploads it to firebase databases via WIFI. So far, I've got it to take a picture and upload the base 64 code to the database. But, am having trouble reading the analog value of the IR sensor. I am aware many of these GPIO pins are used for WIFI and the SD card. So, I am using pin 13 and have enabled the SD_MMC feature 1-bit mode. Although, when ever I try to read pin 13, it is always reading 4095. Also another important thing is I am using board manager software ESP 32 1.0.4 due to a compatibility issue with uploading to the firebase database. Although, when I do change the board manager software to ESP 32 1.0.6, the pin always reads 0 instead. Any help is appreciated, Thanks in advance. Note: In my code, I have a while loop to test the IR sensor readings, not apart of real code.
Last edited by kash66 on Wed Mar 16, 2022 12:03 am, edited 1 time in total.
-
- Posts: 826
- Joined: Mon Jul 22, 2019 3:20 pm
Re: ESP-32 Cam AI Thinker and IR Sensor Program
ADC2 cannot be used while WiFi is active. (https://docs.espressif.com/projects/esp ... imitations)
You can see which pins are available for ADC1 use on the pinmap. (https://raw.githubusercontent.com/espre ... layout.png)
You can see which pins are available for ADC1 use on the pinmap. (https://raw.githubusercontent.com/espre ... layout.png)
Re: ESP-32 Cam AI Thinker and IR Sensor Program
Hi,
The pins available for use on the esp32cam are:
13 free (used by sd card but free if using 1 bit mode)
12 free (must be low at boot, used by sd card but free if using 1 bit mode)
14 used by sd card (usable is SPI clock?)
2 used by sd card (usable as SPI MISO?)
15 used by sd card (usable as SPI CS?)
1 serial - output only?
3 serial - input only?
4 has the illumination/flash led on it - led could be removed and use as output?
33 onboard led - use as output?
more info here: https://github.com/raphaelbs/esp32-cam- ... n-notes.md
so it looks like adc is not available
The pins available for use on the esp32cam are:
13 free (used by sd card but free if using 1 bit mode)
12 free (must be low at boot, used by sd card but free if using 1 bit mode)
14 used by sd card (usable is SPI clock?)
2 used by sd card (usable as SPI MISO?)
15 used by sd card (usable as SPI CS?)
1 serial - output only?
3 serial - input only?
4 has the illumination/flash led on it - led could be removed and use as output?
33 onboard led - use as output?
more info here: https://github.com/raphaelbs/esp32-cam- ... n-notes.md
so it looks like adc is not available
Who is online
Users browsing this forum: No registered users and 65 guests