Repository navigation
Expand file tree
/
Copy pathsetup_user.sh
More file actions
291 lines (249 loc) · 8.27 KB
/
Copy pathsetup_user.sh
File metadata and controls
291 lines (249 loc) · 8.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
#!/bin/bash
# ============================================
# ESP32-C6 Matter Fan - User Setup Script
# ============================================
# Script này chạy KHÔNG CẦN sudo
# Cài đặt ESP-IDF và ESP-Matter vào $HOME/esp/
# ============================================
set -e
PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
ESP_IDF_PATH="$HOME/esp/esp-idf"
ESP_MATTER_PATH="$HOME/esp/esp-matter"
ESP32_C6_PORT="/dev/ttyACM0"
USER_NAME=$(whoami)
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
echo "============================================"
echo " ESP32-C6 Matter Fan - User Setup"
echo "============================================"
echo ""
# ============================================
# Bước 1: Kiểm tra dependencies
# ============================================
echo "[1/6] Checking dependencies..."
MISSING_DEPS=()
for cmd in git python3 pipx; do
if ! command -v $cmd &> /dev/null; then
MISSING_DEPS+=($cmd)
fi
done
if [ ${#MISSING_DEPS[@]} -gt 0 ]; then
log_warn "Missing dependencies: ${MISSING_DEPS[*]}"
echo ""
echo "Please install missing dependencies manually:"
echo " sudo apt-get update"
echo " sudo apt-get install -y git python3 python3-pip pipx python3-venv"
echo ""
echo "Then run this script again."
exit 1
fi
# Kiểm tra cmake và ninja
for cmd in cmake ninja; do
if ! command -v $cmd &> /dev/null; then
log_warn "$cmd not found - sẽ được cài đặt bởi ESP-IDF"
fi
done
log_success "Core dependencies found!"
echo ""
# ============================================
# Bước 2: Cài đặt dependencies bổ sung
# ============================================
echo "[2/6] Installing additional dependencies..."
# Chỉ cài nếu chưa có, không dùng sudo cho apt
if ! command -v cmake &> /dev/null || ! command -v ninja &> /dev/null; then
echo ""
log_warn "cmake or ninja not found!"
echo ""
echo "Please run these commands with sudo first:"
echo ""
echo " sudo apt-get update"
echo " sudo apt-get install -y cmake ninja-build"
echo ""
echo "Then run this script again."
echo ""
exit 1
else
log_success "cmake and ninja found!"
fi
# Cài đặt các package pip cần thiết cho user
log_info "Installing pip packages for user..."
pipx install --force cffi 2>/dev/null || true
log_success "Additional dependencies ready!"
echo ""
# ============================================
# Bước 3: Clone và cài đặt ESP-IDF v5.5.4
# ============================================
echo "[3/6] Setting up ESP-IDF v5.5.4..."
mkdir -p $HOME/esp
if [ -d "$ESP_IDF_PATH" ]; then
log_info "ESP-IDF already exists at $ESP_IDF_PATH"
read -p "Reinstall ESP-IDF? (y/N): " reinstall
if [ "$reinstall" != "y" ] && [ "$reinstall" != "Y" ]; then
log_info "Skipping ESP-IDF installation"
else
rm -rf "$ESP_IDF_PATH"
git clone --depth 1 --branch v5.5.4 https://github.com/espressif/esp-idf.git "$ESP_IDF_PATH"
cd "$ESP_IDF_PATH"
./install.sh esp32c6
log_success "ESP-IDF installed!"
fi
else
log_info "Cloning ESP-IDF v5.5.4..."
git clone --depth 1 --branch v5.5.4 https://github.com/espressif/esp-idf.git "$ESP_IDF_PATH"
cd "$ESP_IDF_PATH"
log_info "Installing ESP-IDF tools for ESP32-C6..."
./install.sh esp32c6
log_success "ESP-IDF installed!"
fi
echo ""
# ============================================
# Bước 4: Clone và cài đặt ESP-Matter SDK
# ============================================
echo "[4/6] Setting up ESP-Matter SDK..."
# QUAN TRỌNG: Set biến môi trường để ghi đè PEP 668
export PIP_BREAK_SYSTEM_PACKAGES=1
log_info "Set PIP_BREAK_SYSTEM_PACKAGES=1 (required for Python 3.12+)"
if [ -d "$ESP_MATTER_PATH" ]; then
log_info "ESP-Matter already exists at $ESP_MATTER_PATH"
read -p "Reinstall ESP-Matter? (y/N): " reinstall_matter
if [ "$reinstall_matter" != "y" ] && [ "$reinstall_matter" != "Y" ]; then
log_info "Skipping ESP-Matter installation"
else
rm -rf "$ESP_MATTER_PATH"
git clone --depth 1 --recursive https://github.com/espressif/esp-matter.git "$ESP_MATTER_PATH"
cd "$ESP_MATTER_PATH"
./install.sh
log_success "ESP-Matter installed!"
fi
else
log_info "Cloning ESP-Matter SDK..."
git clone --depth 1 --recursive https://github.com/espressif/esp-matter.git "$ESP_MATTER_PATH"
cd "$ESP_MATTER_PATH"
log_info "Bootstrapping ESP-Matter..."
./install.sh
log_success "ESP-Matter installed!"
fi
echo ""
# ============================================
# Bước 5: Cấu hình environment variables
# ============================================
echo "[5/6] Configuring environment variables..."
# Source ESP-IDF
source "$ESP_IDF_PATH/export.sh"
export ESP_MATTER_PATH=$ESP_MATTER_PATH
# Thêm vào ~/.bashrc nếu chưa có
BASHRC="$HOME/.bashrc"
if ! grep -q "# ESP-IDF Configuration" "$BASHRC" 2>/dev/null; then
cat >> "$BASHRC" << EOF
# ESP-IDF Configuration
export IDF_PATH=$ESP_IDF_PATH
source $ESP_IDF_PATH/export.sh
# ESP-Matter Configuration
export ESP_MATTER_PATH=$ESP_MATTER_PATH
# PEP 668 override for Python 3.12+
export PIP_BREAK_SYSTEM_PACKAGES=1
EOF
log_success "Environment variables added to $BASHRC"
else
log_info "ESP-IDF configuration already exists in .bashrc"
fi
# Source lại để sử dụng ngay
source "$BASHRC"
log_success "Environment variables configured!"
echo ""
# ============================================
# Bước 6: Build firmware
# ============================================
echo "[6/6] Building firmware..."
cd "$PROJECT_DIR"
# Clean old build
log_info "Cleaning old build..."
idf.py fullclean
# Build firmware
log_info "Building firmware..."
idf.py build
log_success "Build successful!"
echo ""
log_info "Firmware location: $PROJECT_DIR/build/esp32_c6_matter_fan.bin"
echo ""
# ============================================
# Flash firmware
# ============================================
echo ""
echo "============================================"
echo " Checking ESP32-C6 connection..."
echo "============================================"
if [ -e "$ESP32_C6_PORT" ]; then
log_success "ESP32-C6 detected at $ESP32_C6_PORT"
# Kiểm tra permission
if [ -w "$ESP32_C6_PORT" ]; then
log_success "Write permission granted"
else
log_warn "No write permission, trying with sudo..."
SUDO="sudo"
fi
echo ""
read -p "Flash firmware now? (y/N): " flash
if [ "$flash" = "y" ] || [ "$flash" = "Y" ]; then
log_info "Flashing firmware..."
$SUDO idf.py -p $ESP32_C6_PORT flash
log_success "Flash successful!"
fi
echo ""
read -p "Start serial monitor? (y/N): " monitor
if [ "$monitor" = "y" ] || [ "$monitor" = "Y" ]; then
log_info "Starting serial monitor (Ctrl+] to exit)..."
$SUDO idf.py -p $ESP32_C6_PORT monitor
fi
else
log_warn "ESP32-C6 not found at $ESP32_C6_PORT"
log_info "Available serial ports:"
ls -la /dev/ttyACM* /dev/ttyUSB* 2>/dev/null || echo " No serial devices found"
echo ""
log_info "Connect ESP32-C6 via USB and run:"
log_info " idf.py -p $ESP32_C6_PORT flash"
fi
# ============================================
# Hoàn thành
# ============================================
echo ""
echo "============================================"
echo " Setup Complete!"
echo "============================================"
echo ""
echo "Environment setup:"
echo " ESP-IDF: $ESP_IDF_PATH"
echo " ESP-Matter: $ESP_MATTER_PATH"
echo ""
echo "Firmware:"
echo " Location: $PROJECT_DIR/build/esp32_c6_matter_fan.bin"
echo ""
echo "Next time, to build and flash:"
echo " cd $PROJECT_DIR"
echo " source $ESP_IDF_PATH/export.sh"
echo " export ESP_MATTER_PATH=$ESP_MATTER_PATH"
echo " idf.py build flash"
echo ""
echo "To monitor serial output:"
echo " idf.py -p $ESP32_C6_PORT monitor"
echo ""
echo "Note: If you don't have dialout group permission, you may need to run:"
echo " sudo usermod -a -G dialout $USER_NAME"
echo " (Then logout and login again)"
echo ""