Sahadaki bir ESP32, bir OpenWrt router’ındaki USB-seri adaptöre (UART ile) bağlıysa, yeni firmware’i tamamen SSH üzerinden flash edebilirsin — fiziksel erişim gerekmez, ayrı programlayıcı gerekmez. Numara: esptool‘u router’ın kendisinde çalıştırmak.
Ön koşullar
- OpenWrt router’ına SSH erişimi.
- ESP32 UART’ı (TX/RX/GND/EN/BOOT veya auto-reset devresi) router’ın USB portuna takılı USB-seri adaptöre bağlı.
- Router’da
kmod-usb-serialartı adaptörünün sürücüsü (örn.kmod-usb-serial-ftdi,kmod-usb-serial-cp210xveyakmod-usb-serial-ch341) kurulu →/dev/ttyUSB0belirir.
Adım 1: Router’a Python + esptool kur
OpenWrt’nin Python’u yeterli flash/RAM’e sahip router’lara rahat sığar:
router-setup.sh
ssh root@ROUTER_IP '
opkg update
opkg install python3 python3-pip rsync
pip3 install esptool pyserial --break-system-packages 2>/dev/null || pip3 install esptool pyserial
'(Alternatif olarak scp/rsync ile kendi kendine yeten bir esptool kopyası ve managed_components‘i router’a kopyala.)
Adım 2: Firmware dosyalarını kopyala
upload.sh
scp build/bootloader/bootloader.bin \
build/partition_table/partition-table.bin \
build/ota_data_initial.bin \
build/MyFirmware.bin \
root@ROUTER_IP:/tmp/flash/Adım 3: SSH üzerinden flash et
flash.sh
ssh root@ROUTER_IP 'python3 -m esptool --chip esp32 --port /dev/ttyUSB0 -b 460800 \
--before default-reset --after hard-reset \
write-flash --flash-mode dio --flash-size detect --flash-freq 40m \
0x1000 /tmp/flash/bootloader.bin \
0x8000 /tmp/flash/partition-table.bin \
0x9000 /tmp/flash/ota_data_initial.bin \
0x10000 /tmp/flash/MyFirmware.bin'esptool, USB adaptörü üzerinden DTR/RTS’i geçiş yaparak bootloader’a girer, flash eder ve hard-reset atar — tam olarak yerel flash gibi, sadece SSH üzerinden taşınır.
Adım 4: Boot log’unu uzaktan yakala
Çipi resetleyip seri konsolu okuyarak yeni firmware’in gerçekten boot ettiğini doğrula:
remote_monitor.py
# Router'da şöyle çalışır: ssh root@ROUTER_IP 'python3 -' < remote_monitor.py
import serial, time
s = serial.Serial("/dev/ttyUSB0", 115200, timeout=0.3)
# DTR/RTS üzerinden reset pulse'ı (esptool usulü)
s.dtr = False; s.rts = True; time.sleep(0.1) # EN low
s.rts = False; time.sleep(0.05) # release
end = time.time() + 15
while time.time() < end:
data = s.read(4096)
if data:
print(data.decode("utf-8", "replace"), end="")Sorun giderme
rsync: not found→ önce router’daopkg install rsync. Teltonika RutOS’ta bu firmware sürümüne özgüdür — bkz. Son Teltonika RUTOS sürümlerinde standart OpenWRT paketleri nasıl kurulur ve paket feed’leri başarısız olursa Teltonika RUTOS’ta opkg unknown package ve vuci feed indirme hatası nasıl düzeltilir./dev/ttyUSB0yok → takıncadmesg | tail‘e bak; eşleşenkmod-usb-serial-*sürücüsünü kur. Hiçbir şey görünmüyorsa adaptör gerçekten o router’a bağlı değildir.- SSH’te permission denied → Dropbear
~/.ssh/authorized_keysveya/etc/dropbear/authorized_keysokur, her zaman ikisini birden değil. connectingaşamasında flash başarısız → uzun/gürültülü kablolama için baud çok yüksek;-b 115200‘e düşür.
İlgili
- HTTP POST ile ESP32 Firmware OTA Güncellemesi Yapma — cihaz ağa kavuşunca OTA’ya geç, böylece seriye hiç gerek kalmaz.
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow