This laboratory tutorial shows you how to:
esp32-c6-devkitm-1).
Edit the generated platformio.ini to look similar to this (adjust board if needed):
[env:sparrow] ; Community fork of espressif32 platform w/ Arduino core 3.x for ESP32-C6 platform = https://github.com/pioarduino/platform-espressif32/releases/download/54.03.20/platform-espressif32.zip board = esp32-c6-devkitm-1 framework = arduino monitor_speed = 115200 build_flags = -D ARDUINO_USB_MODE=1 -D ARDUINO_USB_CDC_ON_BOOT=1 -D ESP32_C6_env ; We'll need Wire (built-in), math, etc. For the RGB LED we'll pull Adafruit NeoPixel. lib_deps = adafruit/Adafruit NeoPixel @ ^1.12.0 bblanchon/ArduinoJson adafruit/Adafruit BME680 Library @ ^2.0.5 adafruit/Adafruit Unified Sensor adafruit/Adafruit BusIO
We will put the firmware in src/main.cpp.
sparrow-lab.europe-west1 or us-central1).Note the generated database URL, it will look like:
https://YOUR_PROJECT_ID-default-rtdb.REGION.firebasedatabase.app
We will call this FIREBASE_DB_URL in the firmware.
Then go to the Users tab and create these accounts:
device@sparrow.localadmin@sparrow.localBoth will use normal passwords of your choice. The device account will be hard-coded in the firmware (fine for lab use).
sparrow-dashboard.Firebase will show you a JavaScript config object like:
const firebaseConfig = { apiKey: "AIzaSy...", authDomain: "your-project-id.firebaseapp.com", databaseURL: "https://your-project-id-default-rtdb.europe-west1.firebasedatabase.app", projectId: "your-project-id", storageBucket: "your-project-id.appspot.com", messagingSenderId: "1234567890", appId: "1:1234567890:web:abcdef123456", };
Copy this; we will use:
apiKeydatabaseURLprojectIdWe will store data in Realtime Database like this:
{
"devices": {
"sparrow-01": {
"telemetry": {
"-Nx123...": {
"timestamp": 1730000000000,
"temperature": 23.5,
"humidity": 45.2,
"pressure": 1008.3
}
},
"led": {
"state": "on",
"color": "#ff00aa"
}
}
}
}
Paths used:
/devices/sparrow-01/telemetry/devices/sparrow-01/led/devices/sparrow-01/led and updates the NeoPixel.In the Firebase console, go to Realtime Database → Rules and set:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
This means:
Thus all data access is password protected.
On boot, the firmware will:
device@sparrow.local and its password.We will use:
WiFiClientSecure for HTTPS.
Edit src/main.cpp, get the code here.
Fill in your credentials:
apiKey and databaseURL.sparrow-01.1. Build and upload the firmware. 2. In the serial monitor, verify: * Wi-Fi connects. * Firebase sign-in succeeds. * POST/GET requests show HTTP 200. 3. In Firebase console → Realtime Database, you should see data appearing under: * ''/devices/sparrow-01/telemetry''
If you see sign-in or HTTPS errors, double-check:
FIREBASE_API_KEYFIREBASE_DB_URLWe will build a simple dashboard with:
The dashboard is protected because:
auth != null.Create a folder for the dashboard, for example:
dashboard/
public/
index.html
app.js
chart.umd.min.js
Firebase Hosting will serve the public/ folder.
Create dashboard/public/index.html with the code from here.
Create dashboard/public/app.js and paste this.
Replace the firebaseConfig values with those from your Firebase console.
Create dashboard/public/chart.umd.min.js. You need this for rendering the charts locally.
The code is here.
Install Firebase CLI globally:
npm install -g firebase-tools
Log in and initialize hosting:
firebase login cd dashboard firebase init hosting
When prompted:
sparrow-lab project.publicy
This will create firebase.json and other files.
From inside dashboard:
firebase deploy --only hosting
After deployment you will get a Hosting URL like:
https://sparrow-lab.web.app
Open that URL in a browser and:
1. Log in with ''admin@sparrow.local'' and its password. 2. You should see: * Latest reading section. * History table. * NeoPixel control panel. 3. With the Sparrow powered and connected, BME680 data should appear. 4. Changing the LED state/color should update the on-board NeoPixel within a few seconds.