ESP32-CAM → ESP32 → STM32H7 → TFT
بالاخره این پروژه هم به نتیجه رسید. 🎉
هدف پروژه این بود که تصویر دوربین ESP32-CAM به صورت کاملاً بیسیم دریافت شود، روی STM32H743 پردازش و Decode شود و در نهایت روی نمایشگر ILI9341 نمایش داده شود.
مسیر انتقال داده به این شکل است:
ESP32-CAM
│
│ JPEG
▼
WiFi / TCP
▼
ESP32 (Bridge)
│
│ UART (2 Mbps)
▼
STM32H743
│
│ Hardware JPEG Decoder
▼
RGB565
▼
ILI9341 TFT
مراحل انجام شده
✅ گرفتن تصویر با ESP32-CAM
✅ فشردهسازی سختافزاری JPEG توسط خود ESP32-CAM
✅ ارسال بیسیم تصویر از طریق WiFi/TCP
✅ دریافت تصویر توسط یک ESP32 دوم (Bridge)
✅ انتقال فریم با UART پرسرعت (2Mbps) به STM32H7
✅ دریافت با DMA و Ring Buffer
✅ Decode تصویر توسط واحد سختافزاری JPEG داخل STM32H743
✅ تبدیل به RGB565
✅ نمایش روی TFT با SPI + DMA
چند نکته جالب
هیچ Decode نرمافزاری انجام نمیشود؛ از واحد سختافزاری JPEG خود STM32H7 استفاده شده است.
کل مسیر انتقال تصویر کاملاً بیسیم است و فقط بخش آخر برای نمایش به TFT از SPI استفاده میشود.
حجم تصاویر JPEG معمولاً بین ۴ تا ۶ کیلوبایت است که انتقال آن را بسیار سریعتر از RGB خام میکند.
ساخت Ring Buffer و دریافت پیوسته با DMA باعث شد CPU تقریباً درگیر دریافت دیتا نشود.
سختافزارهای استفاده شده
ESP32-CAM (OV2640)
ESP32-WROOM-32
STM32H743IIT6
ILI9341 TFT
SDRAM خارجی
DMA
Hardware JPEG Decoder
مهمترین بخش پروژه از نظر من
بخش سخت پروژه نوشتن کد نبود؛ پیدا کردن تکتک باگهایی بود که هر کدام چند ساعت تا چند روز زمان گرفت.
از جمله:
تنظیمات FMC و SDRAM
تداخل پایهها در CubeMX
دریافت پایدار UART با DMA
طراحی Ring Buffer
تبدیل صحیح فرمتهای رنگی
Endian و ترتیب بایتهای RGB565
نمایش صحیح روی ILI9341
هماهنگی بین سه میکروکنترلر
تقریباً هر مرحله یک چالش مستقل بود که باید قدمبهقدم حل میشد.
در ادامه قصد دارم روی همین بستر امکانات بیشتری اضافه کنم؛ مثل:
نمایش زنده (Live Stream)
پردازش تصویر روی STM32
استفاده از DMA2D
اعمال فیلترهای تصویر
تشخیص اشیاء با کمک ESP32
و در مراحل بعد ارتباط با FPGA برای پردازشهای سنگینتر
اگر به مباحث Embedded، STM32، ESP32، پردازش تصویر یا سیستمهای نهفته علاقه دارید، این پروژه تازه شروع مسیر است.
Telegram: @ENF_Electronic_AIOT
112 ·