MicroGreen, a design space exploration framework for sustainable edge devices. MicroGreen integrates embodied-carbon modeling, workload characterization, and environment-dependent operational analysis. It incorporates parametric embodied-carbon models for MCUs, sensors, regulators, storage, batteries, capacitors, and solar panels, leveraging LCA databases. Using these models, MicroGreen takes as input application requirements (e.g., workload, duty cycle, deployment lifetime) and environmental traces (e.g., solar availability) and identifies carbon-optimal configurations. We empirically characterize a repository of MCUs under diverse workloads, integrate peripheral and power-source options, and generate Pareto-optimal designs to illustrate trade-offs between carbon footprint, performance, and cost
- Clone the repository with all submodules:
git clone --recurse-submodules git@github.com:S4AI-CornellTech/MicroGreen.git
cd MicroGreen- Install Python dependencies using the setup script:
bash setup.shframework/: Core MicroGreen framework and Streamlit UIprofiling/: Hardware profiling code and setup instructionsdatabase/: Precomputed embodied carbon and profiling resultsEmbodiedCarbonModeling/: Embodied carbon modeling submodule
Figure 3 - Board Carbon Breakdown
python3 scripts/carbon_component_composition_plotter.pyFigure 5 - Per Inference Runtime and Energy Plot
python3 scripts/characterization_fig.pyFigure 6 - Carbon Rank Plot
python3 scripts/overall_eval_carbon.py --lifetime-years 1 --solar-panel-area-cap 611Figure 7 - Energy Efficiency Rank Plot
python3 scripts/overall_eval_energy.pyFigure 8 - Irradiance Analysis Plot
python3 framework/main.py --workload kws-l --solar-plotFigure 9 - Battery Analysis Plot
python3 framework/main.py --workload kws-s --battery-plotFigure 10 - Network Analysis Plot
python3 scripts/network_plot.pyFigure 11 - Hybrid Analysis Plot
python3 framework/main.py --workload kws-l --lifetime-plotFigure 14 Heterogeneous Deployment Results
python3 framework/heterogeneousDeployment.py
python3 scripts/case_study_plot.pyThe embodied carbon estimates in database/board_carbon.csv are derived from the EmbodiedCarbonModeling/ submodule. To regenerate the database from the modeling outputs, first follow the submodule's README.md to generate carbon estimates from BoMs, then run the following script to port the results to database/:
python3 scripts/board_carbon_csv_generator.py \
EmbodiedCarbonModeling/outputs/coralDevMicro_output \
EmbodiedCarbonModeling/outputs/ESP32_output \
EmbodiedCarbonModeling/outputs/ESP32-C6_output \
EmbodiedCarbonModeling/outputs/ESP32-S3_output \
EmbodiedCarbonModeling/outputs/nRF52840_output \
EmbodiedCarbonModeling/outputs/RP2040_output \
EmbodiedCarbonModeling/outputs/RP2350_output \
EmbodiedCarbonModeling/outputs/STM32F411_output \
-o database/board_carbon.csvThe database/ directory contains per-MCU inference latency and power measurements collected using the hardware setup described in the paper. To verify or regenerate these results, refer to the guides below.
| Guide | Location | Description |
|---|---|---|
| INFERENCE_PROFILING_GUIDE.md | profiling/inference/ |
Environment setup, compilation, flashing, and latency measurement for all inference workloads running on each MCU |
| WIRELESS_PROFILING_GUIDE.md | profiling/wireless/ |
Replicating BLE wireless measurements reported in the paper |
| POWER_PROFILING_GUIDE.md | profiling/ |
Hardware, software, and operation details for power profiling |
This project is licensed under the MIT License. See the LICENSE file for full details.