1+ #! /bin/bash
2+ set -e
3+
4+ # Default values
5+ IDF_PATH_DEFAULT=" $HOME /esp/esp-idf"
6+ MICROPYTHON_PATH=" "
7+ IDF_PATH=" $IDF_PATH_DEFAULT "
8+ BOARD=" "
9+ BOARD_VARIANT=" "
10+ BUILD_DIR=" build-mp_camera"
11+
12+ # Parse arguments
13+ usage () {
14+ echo " Usage: $0 -m <micropython_path> [-i <idf_path>] [-b <board>] [-v <board_variant>]"
15+ echo " "
16+ echo " Options:"
17+ echo " -m <path> Path to MicroPython directory (required)"
18+ echo " -i <path> Path to ESP-IDF directory (optional, default: $IDF_PATH_DEFAULT )"
19+ echo " -b <board> Board name (optional, e.g. ESP32_GENERIC_S3)"
20+ echo " -v <variant> Board variant (optional, e.g. SPIRAM_OCT)"
21+ echo " -h Show this help message"
22+ echo " "
23+ echo " Examples:"
24+ echo " $0 -m ~/privat/micropython"
25+ echo " $0 -m ~/privat/micropython -i ~/esp/esp-idf"
26+ echo " $0 -m ~/privat/micropython -b ESP32_GENERIC_S3"
27+ echo " $0 -m ~/privat/micropython -b ESP32_GENERIC_S3 -v SPIRAM_OCT"
28+ exit 1
29+ }
30+
31+ # Parse command line options
32+ while getopts " m:i:b:v:h" opt; do
33+ case $opt in
34+ m) MICROPYTHON_PATH=" $OPTARG " ;;
35+ i) IDF_PATH=" $OPTARG " ;;
36+ b) BOARD=" $OPTARG " ;;
37+ v) BOARD_VARIANT=" $OPTARG " ;;
38+ h) usage ;;
39+ * ) usage ;;
40+ esac
41+ done
42+
43+ # Check required arguments
44+ if [ -z " $MICROPYTHON_PATH " ]; then
45+ echo " Error: MicroPython path is required (-m option)"
46+ echo " "
47+ usage
48+ fi
49+
50+ # Validate paths
51+ if [ ! -d " $MICROPYTHON_PATH " ]; then
52+ echo " Error: MicroPython directory not found: $MICROPYTHON_PATH "
53+ exit 1
54+ fi
55+
56+ if [ ! -d " $IDF_PATH " ]; then
57+ echo " Error: ESP-IDF directory not found: $IDF_PATH "
58+ exit 1
59+ fi
60+
61+ if [ ! -f " $IDF_PATH /export.sh" ]; then
62+ echo " Error: ESP-IDF export.sh not found in: $IDF_PATH "
63+ exit 1
64+ fi
65+
66+ # Get absolute paths
67+ MICROPYTHON_PATH=$( realpath " $MICROPYTHON_PATH " )
68+ IDF_PATH=$( realpath " $IDF_PATH " )
69+ MODULE_PATH=$( dirname " $( realpath " $0 " ) " )
70+
71+ echo " =========================================="
72+ echo " Building MicroPython with IR Learn Module"
73+ echo " =========================================="
74+ echo " MicroPython path: $MICROPYTHON_PATH "
75+ echo " ESP-IDF path: $IDF_PATH "
76+ echo " Module path: $MODULE_PATH "
77+ if [ -n " $BOARD " ]; then
78+ echo " Board: $BOARD "
79+ if [ -n " $BOARD_VARIANT " ]; then
80+ echo " Board variant: $BOARD_VARIANT "
81+ BUILD_DIR=" build-${BOARD_VARIANT} "
82+ fi
83+ fi
84+ echo " Build directory: $BUILD_DIR "
85+ echo " =========================================="
86+ echo " "
87+
88+ # Source ESP-IDF environment
89+ echo " Setting up ESP-IDF environment..."
90+ source " $IDF_PATH /export.sh"
91+
92+ # Change to MicroPython ESP32 port directory
93+ cd " $MICROPYTHON_PATH /ports/esp32"
94+
95+ # Build idf.py command with optional parameters
96+ IDF_CMD=" idf.py -B $BUILD_DIR "
97+
98+ if [ -n " $BOARD " ]; then
99+ IDF_CMD=" $IDF_CMD -D MICROPY_BOARD=$BOARD "
100+ fi
101+
102+ if [ -n " $BOARD_VARIANT " ]; then
103+ IDF_CMD=" $IDF_CMD -D MICROPY_BOARD_VARIANT=$BOARD_VARIANT "
104+ fi
105+
106+ IDF_CMD=" $IDF_CMD -D USER_C_MODULES=$MODULE_PATH /micropython.cmake"
107+ IDF_CMD=" $IDF_CMD -D EXTRA_COMPONENT_DIRS=$MODULE_PATH "
108+ IDF_CMD=" $IDF_CMD build"
109+
110+ # Build MicroPython with IR Learn module
111+ echo " "
112+ echo " Building MicroPython..."
113+ echo " Command: $IDF_CMD "
114+ eval $IDF_CMD
115+
116+ # Create firmware images
117+ echo " "
118+ echo " Creating firmware images..."
119+ cd " $BUILD_DIR "
120+
121+ python " $MICROPYTHON_PATH /ports/esp32/makeimg.py" \
122+ sdkconfig \
123+ bootloader/bootloader.bin \
124+ partition_table/partition-table.bin \
125+ micropython.bin \
126+ firmware.bin \
127+ micropython.uf2
128+
129+ echo " "
130+ echo " Build completed successfully!"
131+ echo " Firmware files in: $MICROPYTHON_PATH /ports/esp32/$BUILD_DIR "
132+ echo " =========================================="
0 commit comments