In this guide, you’ll create a Firebase Web App to display the last picture taken with an ESP32-CAM saved in the Firebase Storage. The Web App also shows the date and time that the last photo was taken. The web app is freely hosted on Firebase servers, and you can access it from anywhere.

Updated July 2, 2025.
This article is Part 2 of this previous tutorial: ESP32-CAM Save Picture in Firebase Storage. Follow that tutorial first before proceeding.
Project Overview
In this tutorial (Part 2), you’ll create a web app to display the last picture taken with the ESP32-CAM and saved in the Firebase Storage (see this previous tutorial).
The following diagram shows a high-level overview of the project we’ll buildâprogramming the ESP32-CAM and setting up the Firebase Project with Storage was done in Part 1.

- Firebase hosts your web app over a global CDN using Firebase Hosting and provides an SSL certificate. You can access your web app from anywhere using the Firebase-generated domain name.
- The web application displays the last picture saved on Firebase Storage in the data/photo.jpg path.
- It also displays info about when the picture was taken (date and time).
- If the web page is open, and meanwhile, there’s a new picture, you need to press the Refresh button, so that it gets the new picture from the storage path.
- Later, you can update the web app to do this automatically. For example, you can save the time the last picture was taken to Firebase Realtime Database (RTDB). You can then, detect changes on the database, and refresh the web page as needed to display the last picture (we may cover this in a future, more advanced tutorial).
Prerequisites
Before you start creating the Firebase Web App, you need to check the following prerequisites.
Creating a Firebase Project
You should have followed the following tutorial first:
The ESP32-CAM must be running the code provided in that tutorial so that there’s a picture saved in Firebase Storage. The Firebase Storage must be set up as shown in the tutorial.
Installing Required Software
Before getting started, you need to install the required software to create the Firebase Web App. Here’s a list of the software you need to install (click on the links for instructions):
1) Add an App to Your Firebase Project
1) Go to your Firebase project Console and add an app to the project you created in the previous tutorial by clicking on the +Add app button.

2) Select the web app icon.
3) Give your app a name. Then, check the box next to â Also set up Firebase Hosting for this App. Click Register app.

4) Then, copy the firebaseConfig object and save it because you’ll need it later.

After this, you can also access the firebaseConfig object if you go to your Project settings in your Firebase console.
5) Click Next on the proceeding steps, and finally on Continue to console.
2) Setting Up a Firebase Web App Project (VS Code)
Follow the next steps to create a Firebase Web App Project using VS Code.
1) Creating a Project Folder
1) Create a folder on your computer to save your Firebase projectâfor example, Firebase-Project on the Desktop.
2) Open VS Code. Go to File > Open Folder… and select the folder you’ve just created.
3) Go to Terminal > New Terminal. A new Terminal window should open on your project path.

2) Firebase Login
4) On the previous Terminal window, type the following:
firebase login
5) You’ll be asked to collect CLI usage and error reporting information. Enter “n” and press Enter to deny.

Note: If you are already logged in, it will show a message saying: “Already logged in as [email protected]”.
6) After this, it will pop up a new window on your browser to login into your Firebase account.

7) Allow Firebase CLI to access your Google account.

8) After this, Firebase CLI login should be successful. You can close the browser window.

3) Initializing Web App Firebase Project
9) After successfully login in, run the following command to start a Firebase project directory in the current folder.
firebase init
10) You’ll be asked if you want to initialize a Firebase project in the current directory. Enter Y and hit Enter.

11) Then, use up and down arrows and the Space key to select the options. Select the following options:
- Hosting: Configure files for Firebase Hosting and (optionally) set up GitHub Action deploys
- Storage: Configure a security rules file for Cloud Storage
The selected options will show up with a green asterisk. Then, hit Enter.

12) Select the option “Use an existing project”âit should be the project created in Part 1 of this tutorialâthen hit Enter.

13) Then, select the hosting options as shown below:
- What do you want to use as your public directory? Hit Enter to select public.
- Configure as a single-page app (rewrite urls to /index.html)? No
- Set up automatic builds and deploys with GitHub? No

14) Then, press Enter on the following question to select the default file for storage rules.
- What file should be used for Storage Rules?(storage.rules). Hit Enter.

15) The Firebase project should now be initialized successfully. Notice that VS code created some essential files under your project folder.

The index.html file contains some HTML text to build a web page. For now, leave the default HTML text. The idea is to replace that with your own HTML text to create a custom web page for your needs. We’ll do that later in this tutorial.
16) To check if everything went as expected, run the following command on the VS Code Terminal window.
firebase deploy
It will ask you if you want to set a new role. Hit Enter to accept.

You should get a Deploy complete! message and an URL to the Project Console and the Hosting URL.
17) Copy the hosting URL and paste it into a web browser window. You should see the following web page. You can access that web page from anywhere in the world.

The web page you’ve seen previously is built with the HTML file placed in the public folder of your Firebase project. By changing the content of that file, you can create your own web app. That’s what we’re going to do in the next section.
3) Creating the Firebase Web App
Now that you’ve created a Firebase project app successfully on VS Code, follow the next steps to customize the app to display the picture saved on Firebase Storage.
index.html
Copy the following to your index.html file. This HTML file creates a simple web page that displays the last picture saved on the Firebase Storage and the time it was taken (created in this previous project).
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ESP Firebase App</title>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="style.css">
<script type="module" src="app.js"></script>
</head>
<body>
<div class="topnav">
<h1>ESP32-CAM Web App <i class="fas fa-camera"></i></h1>
</div>
<p><img id="img" width="500px"></p>
<p>Last picture taken: <span id="date-time"></span></p>
<button type="button" id="refreshBtn">Refresh</button>
</body>
</html>
You need to modify the code with your own firebaseConfig objectâthe one you’ve got in this step.
How it Works
Let’s take a quick look at the HTML file, or skip to the next section.
In the <head> of the HTML file, we must add all the required metadata.
The web page’s title is ESP Firebase App, but you can change it in the following line.
<title>ESP Firebase App</title>
The following line allows us to use fontawesome icons:
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
Reference an external style.css file to format the HTML page.
<link rel="stylesheet" type="text/css" href="style.css">
Load the app.js JavaScript file
<script type="module" src="app.js"></script>
This line tells the browser to load and execute the JavaScript file app.js located in the same directory as the index.html fileâwe’ll create that file next.
We’re done with the metadata. Now, let’s go to the HTML parts that are visible to the userâgo between the <body> and </body> tags.
We create a top “navigation” bar with the name of our app and a small icon from fontawesome.
<div class="topnav">
<h1>ESP32-CAM Web App <i class="fas fa-camera"></i></h1>
</div>
The following line creates a paragraph with an image tag where we’ll display the picture later on. The image tag has a specific id (“img“) so that we can refer to that element in the JavaScript file by its id.
<p><img id="img" width="500px"></p>
Next, we create a paragraph to display the date and time that the picture was taken. There is a <span> tag with the date-time id where we’ll display that information later on.
<p>Last picture taken: <span id="date-time"></span></p>
Finally, there’s a button to refresh the web page (to display a new picture, if that’s the case).
<button onclick="window.location.reload();">Refresh</button>
Save the HTML file.
style.css
Inside the public folder, create a file called style.css. To create the file, select the public folder, and then click on the +file icon at the top of the File Explorer. Call it style.css.

Then, copy the following to the style.css file.
html {
font-family: Arial, Helvetica, sans-serif;
display: inline-block;
text-align: center;
}
h1 {
font-size: 1.8rem;
color: white;
}
p {
font-size: 1.2rem;
}
.topnav {
overflow: hidden;
background-color: #0A1128;
}
body {
margin: 0;
}
button{
background-color: #034078;
border: none;
padding: 14px 20px;
text-align: center;
font-size: 20px;
border-radius: 4px;
transition-duration: 0.4s;
width: 150px;
color: white;
cursor: pointer;
}
The CSS file includes some simple styles to make our webpage look better. We won’t discuss how CSS works in this tutorial.
JavaScript File
Create a new file inside the public folder called app.js.
The following image shows how your web app project folder structure should look.

app.js
Copy the following to the app.js file you created previously.
import { initializeApp } from 'https://www.gstatic.com/firebasejs/10.14.1/firebase-app.js';
import { getAuth, signInWithEmailAndPassword } from 'https://www.gstatic.com/firebasejs/10.14.1/firebase-auth.js';
import { getStorage, ref, getDownloadURL, getMetadata } from 'https://www.gstatic.com/firebasejs/10.14.1/firebase-storage.js';
// Firebase configuration
const firebaseConfig = {
apiKey: "REPLACE_WITH_YOUR_Firebase_CONFIGURATION",
authDomain: "REPLACE_WITH_YOUR_Firebase_CONFIGURATION",
databaseURL: "REPLACE_WITH_YOUR_Firebase_CONFIGURATION",
projectId: "REPLACE_WITH_YOUR_Firebase_CONFIGURATION",
storageBucket: "REPLACE_WITH_YOUR_Firebase_CONFIGURATION",
messagingSenderId: "REPLACE_WITH_YOUR_Firebase_CONFIGURATION",
appId: "REPLACE_WITH_YOUR_Firebase_CONFIGURATION"
};
const email = 'AUTHORIZED_USER_EMAIL'; // Replace with your user email
const password = 'PASSWORD'; // Replace with your user password
// Initialize Firebase
const app = initializeApp(firebaseConfig);
const auth = getAuth(app);
const storage = getStorage(app);
// Format date and time
const formatDateTime = (date) => {
const pad = (num) => String(num).padStart(2, '0');
return `${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())} at ${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;
};
// Authenticate user
const authenticate = async () => {
try {
const userCredential = await signInWithEmailAndPassword(auth, email, password);
return userCredential.user;
} catch (error) {
document.getElementById('date-time').textContent = `Authentication error: ${error.message}`;
throw error;
}
};
// Load image and metadata
const loadImageData = async (user) => {
try {
const storageRef = ref(storage, 'data/photo.jp');
const url = await getDownloadURL(storageRef);
document.querySelector('#img').src = url;
const metadata = await getMetadata(storageRef);
document.getElementById('date-time').textContent = formatDateTime(new Date(metadata.timeCreated));
} catch (error) {
document.getElementById('date-time').textContent = `Error: ${error.message}`;
}
};
// Initialize on page load
document.addEventListener('DOMContentLoaded', async () => {
const user = await authenticate();
await loadImageData(user);
document.querySelector('#refreshBtn').addEventListener('click', async () => {
const user = await authenticate();
await loadImageData(user);
});
});
This file gets the picture saved on the Firebase Storage and the time it was taken, and displays that on the HTML page.
Firebase Modules
First, we load the necessary Firebase modules we’ll use.
import { initializeApp } from 'https://www.gstatic.com/firebasejs/10.14.1/firebase-app.js';
import { getAuth, signInWithEmailAndPassword } from 'https://www.gstatic.com/firebasejs/10.14.1/firebase-auth.js';
import { getStorage, ref, getDownloadURL, getMetadata } from 'https://www.gstatic.com/firebasejs/10.14.1/firebase-storage.js';
Firebase Configuration Object
Then, add your Firebase configuration object for this project. The one you’ve got in previous steps in this tutorial.
const firebaseConfig = {
apiKey: "REPLACE_WITH_YOUR_Firebase_CONFIGURATION",
authDomain: "REPLACE_WITH_YOUR_Firebase_CONFIGURATION",
databaseURL: "REPLACE_WITH_YOUR_Firebase_CONFIGURATION",
projectId: "REPLACE_WITH_YOUR_Firebase_CONFIGURATION",
storageBucket: "REPLACE_WITH_YOUR_Firebase_CONFIGURATION",
messagingSenderId: "REPLACE_WITH_YOUR_Firebase_CONFIGURATION",
appId: "REPLACE_WITH_YOUR_Firebase_CONFIGURATION"
};
User Email and Password
Insert the authorized user email and password. You should have set this up in part 1 of this tutorial.
const email = 'AUTHORIZED_USER_EMAIL'; // Replace with your user email
const password = 'PASSWORD'; // Replace with your user password
Initialize the Firebase App
The following lines initialize the Firebase App.
// Initialize Firebase
const app = initializeApp(firebaseConfig);
const auth = getAuth(app);
const storage = getStorage(app);
Format Data and Time
The following lines format data and time to be displayed on the web page in a specified format. For example: 11:05:11 at 2025-07-02.
// Format date and time
const formatDateTime = (date) => {
const pad = (num) => String(num).padStart(2, '0');
return `${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())} at ${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;
};
Authentication
The following function will authenticate with the user and password we defined previously.
// Authenticate user
const authenticate = async () => {
try {
const userCredential = await signInWithEmailAndPassword(auth, email, password);
return userCredential.user;
} catch (error) {
document.getElementById('date-time').textContent = `Authentication error: ${error.message}`;
throw error;
}
};
Load the Image and Metadata
The loadImageData function will get the image from Firebase storage and place it in the right place in the web page.
const loadImageData = async (user) => {
try {
const storageRef = ref(storage, 'data/photo.jp');
const url = await getDownloadURL(storageRef);
document.querySelector('#img').src = url;
This is the specific line that gets a reference to the image:
const storageRef = ref(storage, 'data/photo.jp');
Note: in my case, at the moment, there’s some sort of bug that truncates the name of the picture to data/photo.jp instead of data/photo.jpg. Adjust the name of the picture, if that’s not the case for you.
We can get the time the image was taken from its metadata. The following lines get the date and time the picture was taken and place them in the right place in the web page.
const metadata = await getMetadata(storageRef);
document.getElementById('date-time').textContent = formatDateTime(new Date(metadata.timeCreated));
} catch (error) {
document.getElementById('date-time').textContent = `Error: ${error.message}`;
}
Initialize App on Page Load
The following lines will run every time you open or refresh the webpage.
// Initialize on page load
document.addEventListener('DOMContentLoaded', async () => {
const user = await authenticate();
await loadImageData(user);
document.querySelector('#refreshBtn').addEventListener('click', async () => {
const user = await authenticate();
await loadImageData(user);
});
});
When that happens, we authenticate with the user and password.
const user = await authenticate();
Then, we load the image.
await loadImageData(user);
We also add an event listener to the Refresh Button. When we click that button, it will authenticate with the user and password and also load the image.
document.querySelector('#refreshBtn').addEventListener('click', async () => {
const user = await authenticate();
await loadImageData(user);
});
Storage Rules
At the left sidebar of your Firebase Project, you should have a file called storage.rules.

Open that file and copy the following rules. These rules allow any authenticated user to read and write to Firebase Storage. Save the file.
rules_version = '2';
// Craft rules based on data in your Firestore database
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
Deploy your App
After saving the HTML and JavaScript files, deploy your app on VS Code by running the following command.
firebase deploy
Firebase offers a free hosting service to serve your assets and web apps. Then, you can access your web app from anywhere.
The Terminal should display something as follows:

You can use the Hosting URL provided to access your web app from anywhere.
Demonstration
Congratulations! You successfully deployed your app. It is now hosted on a global CDN using Firebase hosting. You can access your web app from anywhere on the Hosting URL provided. In my case, it is https://esp-firebase-demo.web.app.
The web app is responsive, and you can access it using your smartphone, computer, or tablet.

Reset your ESP32-CAM board, and it should take a new picture when it first starts. Then, click on the web app Refresh button so that it retrieves the latest picture taken.
Wrapping Up
In this tutorial, you learned how to create a Firebase Web App that interacts with Firebase Storage to display the last image taken with the ESP32-CAM.
You can apply what you learned here to display any other type of file (not just jpeg), and you can change the files in the public folder to add different functionalities and features to your project. For example, add an authentication form, display multiple pictures, etc.
If you want to learn more about Firebase, we recommend taking a look at our new eBook:
We have other resources related to ESP32 and ESP8266 that you may like:
Thanks for reading.
Hello, in this RNT project content, the editorial content is really good, very careful, I like it very much, (you are the best) I will find a time to study the firebase account by myself, and the code department. thank you for posting this item
Thank you đ
Very interesant tutorial can open the next horizonts in development.
Thanks!
Thank you.
Very interesting project.
But it does not upload the photo and the time / date when accessing the hosting address.
It is possible to see the body of the html/css.
It’s like it doesn’t access the app.js
Any ideas or if anyone has experienced the same?
Thank you.
Hi.
Make sure that you’ve created all the necessary files in the right places and that you’ve copied the code correctly.
Additionally, you might need to hard refresh your web browser for the javascript changes to take effect.
Regards,
Sara
Hi,
Did you solve it? I just had the same issue and am actually working around it.
In app.j, I replaced:
“firebase.auth().signInAnonymously().then(function() {”
with:
“const email = “[email protected]”;
const password = “mypassword”
firebase.auth().signInWithEmailAndPassword(email, password).then(function() {“
Hi.
I need to fix the tutorial.
If you use the firebase.auth().signInAnonymously().then(function() {
You need to set up anonymous user in the authentication methods.
Otherwise, you should log in with email and password.
Regards,
Sara
What a nice project. I just wana ask if it is possible to stream video on the web app with this method.
Hi.
I don’t think it is possible, but I haven’t studied that subject yet.
Regards,
Sara
Nice project, but it does not upload the photo and the time / date. I wonder how to debugg the code when running the html file?
esp-firebase-demo-da1c8.web.app is the url if someone would like to look.
Hi.
Make sure that you have all the necessary files to build the app on your project folder. Not just the HTML file.
Regards.
Sara
I have the same problems as Svein.
The 404.html, index.html, and app.js files are in the public directory.
Is this because I’m using the Google Console’s Spark plan and not the Blaze plan?
Hi.
It should work perfectly with the free plan.
Do you get any errors on the JavaScript console on the web browser?
What web browser are you using?
Did you insert your firebaseConfig object on the HTML file?
Regards,
Sara
Hallo.
My browser reports the following:
11:51:52.136 FirebaseError: Firebase Storage: User does not have permission to access ‘data/photo.jpg’. (storage/unauthorized)
{
“error”: {
“code”: 403,
“message”: “Permission denied.”
}
}
app.js:16
app.js:27:13
https://xxxx-xxxx.web.app/app.js:27
(Async: promise callback)
https://xxxx-xxxx.web.app/app.js:26
11:51:52.383 Uncaught
Object { code: “auth/admin-restricted-operation”, message: “This operation is restricted to administrators only.”, a: null, stack: “” }
nexttick.js:33:38
Hi.
Check that your rules in Storage are as shown below:
rules_version = â2â;
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
REgards,
Sara
Sara,
it is not working. The picture is not loaded on the web.
This is web console error ….
FirebaseError: Firebase Storage: User does not have permission to access ‘data/photo.jpg’. (storage/unauthorized)
{
“error”: {
“code”: 403,
“message”: “Permission denied.”
}
}
(anonymous) @ app.js:26
Promise.catch (async)
(anonymous) @ app.js:25
Hi.
Check that your rules in Storage are as shown below:
rules_version = â2â;
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
REgards,
Sara
Hallo.
It works perfectly if you log in to the project using the anonymous sign-in method.
It is due to app.js file in the line:
firebase.auth().signInAnonymously().then(function()
Hallo.
If you have logged into the project with email, then you have to change the App.js file as follows:
firebase.auth().signInWithEmailAndPassword(email, password)
.then((userCredential)
It works perfectly.
Thank you .
Toni,
Where to change the code in App.js to implement this line …
firebase.auth().signInWithEmailAndPassword(email, password)
.then((userCredential)
Hi,
Simply replace this line in the App.js file
firebase.auth().signInAnonymously().then(function()
with
firebase.auth().signInWithEmailAndPassword(email, password)
.then((userCredential)
Tried all the above incl signinwithemail and does’nt work
where can I see the console (I assume its the node.js web host)
last try , I haven’t found the console anywhere on firebase console
..
}).catch(function(error) {
console.error(error);
how to upload in VS code application sir? I’m confused
Hi.
Read this tutorial to get started with VS Code: https://randomnerdtutorials.com/vs-code-platformio-ide-esp32-esp8266-arduino/
Regards,
Sara
Hi,
I want to get and post data to Firebase by using AT commands ESP01 via TCP/IP.
I connected to Firebase but I canât get or post.
AT+CIPSTART=âTCPâ,âXXXX.firebaseio.comâ,80
â> CONNECT
OK
AT+CIPSEND=length
curl âhttps://xxxx.firebaseio.com/users/test.jsonâ
â> 404 bad request…
Thanks for helping!
Mine isn’t working
The image and timestamp are not showing on the web page
Thanks
Hi.
Can you provide more details?
If you open the JavaScript console on the web browser, do you get any errors?
Does the image show up in the Firebase Storage Files?
Regards,
Sara
I do not get any errors
The image shows in the storage folder
It just does not show in the browser… I deleted everything and started again but the image and time do not show
Thanks
Hi.
Please read comments from April 2022.
The answer is there.
Regards,
Sara
Hi, sara. i have some problems.
In my project, the image shows in the storage folder, but It just does not show in the browser⊠and in the serial monitor Android IDE said “Uploading picture… Permission denied.” i’ve been trying for several times and still can’t fix it
Hi.
Please read all previous comments.
Make sure you have set up an anonymous user and that you have set the right storage permissions.
Regards,
Sara
Hi Sara. I’m good until in VS typing in firebase login. VS says that firebase isn’t recognized. I’m new to VS and this was a fresh install. Is there something I need to do in configuring VS to accept this command?
Bart
Hi.
Did you follow the Prerequisites section?
Did you install Nodejs and Firebase tools?
– https://randomnerdtutorials.com/esp32-firebase-web-app/#install-nodejs
– https://randomnerdtutorials.com/esp32-firebase-web-app/#install-nodejs-extension-pack
– https://randomnerdtutorials.com/esp32-firebase-web-app/#install-firebase-tools
Regards,
Sara
Thank you. I missed that step.
Love your tutorials!
Hi Sara,
Bart again. I modified the image capture program with a date for the file names (yyyymmdd-mmss.jpg) uploaded to Firebase. Now, I can’t see them with the web app because they are looking for a file called photo.jpg in app.js. I have multiple photos from my ESP32-Cam used on a bird feeder. I’d like to browse all the pictures from the web app. Without knowing the names of the files, what changes can I make to the app.js to be able to view them?
Hello Sara, thanks for a great and very useful tutorial. Firebase side is all good I think, but I get an error when the ESP32 tries to upload the picture. Any ideas? I get this error with Platformio and Arduino IDE…I’m using a Freenove-ESP32-WROVER-DEV module and had to change the pin config to suit but it seems to take the photo ok.
Connecting to WiFi…
Connecting to WiFi…
SPIFFS mounted successfully
Token info: type = id token (GITKit token), status = on request
Token info: type = id token (GITKit token), status = ready
Taking a photo…
Picture file name: /data/photo.jpg
The picture has been saved in /data/photo.jpg – Size: 57344 bytes
Uploading picture… File not found.
Hi.
Can you try replacing SPIFFS in your code with LittleFS?
Let me know if that solves the problem.
Regards,
Sara
Hi Sara,
As you suggested, the fault was in the ‘Firebase Arduino Library for ESP8266 and ESP32’ version 4.3.7
The latest version, just out, 4.3.8 seems to work fine and does not give the ‘File not found’ error.
That’s great!
Thanks for the follow-up.
Regards,
Sara
Hello Sara,
When I finished and tired to got to my web app the link still takes me to the page shown in step 2 part 18. Have any idea on what I need to do?
Thanks
Update: Got the web app up but now I am getting âUploading PhotoâŠPermission denied.â My storage rules are correct Iâm not sure on what to do next.
Thanks
Hi Random Nerd Tutorials,
I need some help and was wondering if you could provide some support?
I need to power the following projects/components directly via my motorcycle’s 12V Battery (the same battery would be powering all the bike’s electricals)
Reverse camera + GPS (Fitted at back of bike, rear facing)
Parts used:
– ESP 32 Cam module
– NEO 6M GPS Module
Application:
To keep an eye on vehicles coming from the rear end
Proximity sensor (Fitted at back of bike, rear facing)
Parts used:
– Arduino Nano
– HC SR04 sensor
– Buzzer
– Red LED
Application:
To detect vehicles coming from the rear end and activate the buzzer and led if vehicle comes in a certain range of distance
Placement of both projects:
On a motorcycle, directly attached with the battery terminals (Same battery will be used to power other motorcycle electronics)
Question:
1. What is the safest way to hook up the circuit with the bike’s battery? As you may know, the bike battery offers fluctuating voltage (9-15.5V, even lower during cold cranking) and there may also be voltage surges/transients upto 100V.
2. What is the best way to power up the ESP32 cam module – Arduino Nano or other source?
Motive: I want to provide a safe, stable, clean power source to my circuits.
Any help would be appreciated. Thanks in advance.
I am still getting “Uploading Picture… Permission Denied.”. I have my rule right and an anonymous user set. Can anyone help me?
Hi.
What are your database rules?
How are you setting the anonymous user in the code?
Regards,
Sara
Both the rules and code are unchanged from the ‘ESP32-CAM Save Picture in Firebase Storage’ tutorial.
Thanks
Hi,
How do you make the ESP32 Cam display video to firebase?
Hi Sara ! when I initially add the app for the site to firebaseConfig, I don’t see databaseURL: “”, and I did all the same steps as you. is this a problem or can I continue my project without this aspect?