چرا ESP32 و فریمورک IDF

شروع کار عملی با ESP-IDF :
در این مقاله قصد دارم شما مهندس عزیز رو با پردازنده قدرتمند ESP32 بیشتر آشنا کنم تا یک انتخاب قدرتمند برای کارهای IOT داشته باشید همچنین با نحوه نصب و آماده سازی محیط کدنویسی و نصب فریمورک رسمی شرکت Espressif که فریمورک IDF نام دارد آشنا نمایم.
دلیل انتخاب این SDK رفع نیازهای حرفه ای کاربران سطح بالا میباشد که تمایل دارند در پروژه های خود از این پردازنده قدرتمند استفاده نمایند.البته نمونه های دیگری نیز از این SDK منشعب شده و در حال استفاده میباشد مانند کتابخانه اردوینو و یا PlatformIO که با اینکه نیاز های ابتدایی و اولیه کاربران را رفع میکند و همچنین استفاده از آنها راحت و اسان میباشد.
ولی با توجه به موارد رویت شده امکانات کمتر و همراه با باگهای متعدد بوده است.همچنین به روز رسانی های آن نیز در پلتفرم های نام برده با تاخیر زیاد همراه است که استفاده از امکانات و قابلیتهای بروز را نا ممکن میسازد و عملا شما را از دایره رقابت با افراد حرفه ای خارج میسازد.
آشنایی با پردازنده ESP32 :
احتمالا در گذشته با ماژول ESP8266 کار کرده اید یا حداقل اسم آن را شنیده اید ماژول وایفایی که در سال 2014 معرفی شد و در ابتدا برای ارتباط میکروکنترلرها با شبکه وایفای از آن استفاده میشد. و قیمت بسیار مناسبی داشت.
از آنجایی که سخت افزار اصلی به خوبی مستند نشده بود و داکیومنتهای کاملی نداشت، دارای برخی باگها بود و فقط ویژگیهای استانداردی را ارائه میکرد (از طریق دستورات AT)، اما توسعه دهندگان دیگر بیکار ننشستند و برخی Firmware های جایگزین را برای بهرهبرداری کامل از امکانات تراشه توسعه دادند که معروفترین آنها مطمئناً NodeMCU است .این توسعه باعث شد که دیگر نیازی به یک میکروکنترلر واسط احساس نشود.
در سپتامبر 2016، پس از چند ماه انجام تستهای آزمایشی، Espressif جانشین esp8266 را با نام ESP32 معرفی و در دسترس همگان قرار داد.
ویژگی های اصلی تراشه جدید به شرح زیر بود:
- Tensilica LX6 dual core processor at 240 MHz
- 520Kb of SRAM memory
- Wifi 802.11 b/g/n connectivity with support for WEP, WPA/WPA2 PSK/Enterprise
- Bluetooth connectivity (classic and LE)
- 32 I/O pins with several builtin peripherals
- hardware acceleration for security algorithms (AES, SHA2, RSA-4096)
که امکانات بسیار هیجان انگیزی برای کاربردهای اینترنت اشیاء در اختیار کاربران قرار داده است.
تا به امروز مدلهای مختلفی از پردازنده ESP32 ارائه گردیده است:
- ESP32-S2 Series
- ESP32-S3 Series
- ESP32-C2 Series
- ESP32-C3 Series
- ESP32-C6 Series
- ESP32-H Series
- ESP32 SoC
- ESP8266 SoC
این پردازنده ها هر کدام با ویژگیهای سخت افزاری متفاوت و با تعداد هسته های متفاوت و معماری مختلف طراحی و تولید شده اند و به طبع آن تعداد زیادی ماژولهای مختلف براساس آنها تولید گردیده است. که برای دیدن جزییات بیشتر میتواند به سایت سازنده مراجعه نمایید.
آموزشهای این دوره بر اساس پردازنده ESP32-S3 خواهد بود که من برای راحتی کار شما و عدم نیاز به سخت افزار کاستوم ماژولESP32-S3-WROOM-1 را انتخاب کردم. البته که آموزشها با مقداری تغییر برای سایر اعضای خانواده ESP32 نیز قابل استفاده میباشد.
ویژگیها سخت افزاری ESP32-S3:
ESP32-S3 یک سیستم روی تراشه (SoC) مبتنی بر یک میکروکنترلر کم مصرف است که از Wi-Fi 2.4 گیگاهرتز و بلوتوث کم انرژی (بلوتوث LE) پشتیبانی می کند. این سری شامل یک ریزپردازنده دو هسته ای با کارایی بالا (Xtensa® 32-bit LX7)، یک پردازنده کمکی کم توان، یک باند پایه Wi-Fi، یک باند پایه بلوتوث LE، ماژول RF و تجهیزات جانبی است. بلوک دیاگرام این SoC را در زیر مشاده مینمایید.
نکات برجسته ESP32 در زیر آمده است :
یک زیرسیستم WiFi کامل که :
با پروتکل IEEE 802.11b/g/n مطابقت دارد و از آن پشتیبانی می کند.
حالت های Station، SoftAP، و SoftAP + Station را پشتیبانی میکند.
پردازنده دو هسته ای Xtensa® 32bit LX7 با ویژگیهای :
یک خط لوله پنج مرحله ای که تا فرکانس 240 مگاهرتز کار می کند.
یک گذرگاه داده 128 بیتی و مجموعه دستورالعمل های اختصاصی SIMD
برای انجام محاسبات با کارایی بالا.
کش L1 کارآمد برای بهبود اجرا کد ازحافظه خارجی.
واحد ممیز شناور با دقت سینگل (FPU) به منظور سرعت بخشیدن به انجام محاسبات.
یک زیر سیستم بلوتوث LE که :
از ویژگی های بلوتوث 5 و مش پشتیبانی میکند.
ماژول RF کاملا یکپارچه که :
که عملکرد بسیار عالی و مطابق استانداردهای روز را ارائه میکند.
ظرفیت ذخیره سازی قدرتمند که :
با 512 KB SRAM و 384 KB ROM روی تراشه و رابطهای SPI، Dual SPI، Quad SPI، Octal SPI، QPI و OPI که امکان ارتباط با حافظه فلش و رم خارجی را مهیا میکنند.
مدیریت توان کارامد که :
برای طیف گسترده ای از برنامه ها با حالت های کم مصرف متعدد طراحی شده است.
همچنین پردازنده کمکی ULP که می تواند در حالت بسیار کم مصرف کار کند.
ویژگی های امنیتی قابل اعتماد تضمین شده توسط:
شتاب دهنده های سخت افزاری رمزنگاری که از AES-128/256، Hash، RSA، HMAC،امضای دیجیتال و بوت امن پشتیبانی میکنند.
مولد اعداد تصادفی.
کنترل مجوز دسترسی به حافظه داخلی و خارجی.
رمزگذاری و رمزگشایی حافظه خارجی.
مجموعه ای غنی از رابط های جانبی و GPIO:
ایده آل برای سناریوهای مختلف و برنامه های پیچیده.
همچنین در زیر لیستی از ویژگیهای اصلی پردازنده های ESP32 امده است:
وای فای
IEEE 802.11 b/g/n-compliant
Supports 20 MHz, 40 MHz bandwidth in 2.4GHz band
1T1R mode with data rate up to 150 Mbps
Wi-Fi Multimedia (WMM)
TX/RX A-MPDU, TX/RX A-MSDU
Immediate Block ACK
Fragmentation and defragmentation
Automatic Beacon monitoring (hardware TSF)
4 × virtual Wi-Fi interfaces
Simultaneous support for Infrastructure BSS in
Station, SoftAP, or Station + SoftAP modes
Note that when ESP32-S3 scans in Station
mode, the SoftAP channel will change along with the Station channel Antenna diversity
802.11mc FTM
External PA is supporte
بلوتوث
Bluetooth LE: Bluetooth 5, Bluetooth mesh
High power mode (20 dBm, share the same PA
with Wi-Fi)
Speed: 125 Kbps, 500 Kbps, 1 Mbps, 2 Mbps
Advertising extensions
Multiple advertisement sets
Channel selection algorithm #2
Internal co-existence mechanism between Wi-Fi
and Bluetooth to share the same antenna
CPU و حافظه
Xtensa® dual-core 32-bit LX7 microprocessor,up to 240 MHz
CoreMark® score:
– 1 core at 240 MHz: 613.86 CoreMark; 2.56 CoreMark/MHz
– 2 cores at 240 MHz: 1181.60 CoreMark; 4.92 CoreMark/MHz
128-bit data bus and SIMD commands
384 KB ROM
512 KB SRAM
6 KB SRAM in RTC
SPI, Dual SPI, Quad SPI, Octal SPI, QPI and OPI
interfaces that allow connection to multiple flash and external RAM
Flash controller with cache is supported
Flash in-Circuit Programming (ICP) is supported
واحدهای جانبی پیشرفته
Digital interfaces:
4 × SPI
1 × LCD interface (8-bit ~16-bit parallel RGB, I8080 and MOTO6800), supporting
conversion between RGB565, YUV422,YUV420 and YUV411
1 × DVP 8-bit ~16-bit camera interface
3 × UART
2 × I2C
2 × I2S
1 × RMT (TX/RX)
1 × pulse counter
LED PWM controller, up to 8 channels
1 × full-speed USB OTG
1 × USB Serial/JTAG controller
2 × MCPWM
1 × SDIO host controller with 2 slots
General DMA controller (GDMA), with 5transmit channels and 5 receive channels
– 1 × TWAI® controller, compatible with ISO11898-1 (CAN Specification 2.0)
Analog interfaces:
2 × 12-bit SAR ADCs, up to 20 channels
1 × temperature sensor
14 × touch sensing IOs
Timers:
4 × 54-bit general-purpose timers
1 × 52-bit system timer
3 × watchdog timers
مدیریت کم مصرف
Power Management Unit with five power modes
Ultra-Low-Power (ULP) coprocessors:
ULP-RISC-V coprocessor
ULP-FSM coprocessor
امنیت
Secure boot
• Flash encryption
• 4-Kbit OTP, up to 1792 bits for users
• Cryptographic hardware acceleration:
AES-128/256 (FIPS PUB 197)
Hash (FIPS PUB 180-4)
RSA
Random Number Generator (RNG)
HMAC
Digital signature
به دلیل داشتن امکانات فوقالعاده ، مصرف توان پایین و کتابخانه های بسیار قدرتمند ESP32 گزینه بسیار مناسبی برای استفاده در حوزه اینترنت اشیاء و توسعه تجهیزات هوشمند میباشد که در ادامه به صورت تیتروار تعدادی از آنها نام برده شده است که هرکدام از آنها قابلیت تبدیل شدن به یک محصول و فروش در بازار را دارند.پس آستینهاتون رو بالا بزنید…
خانه هوشمند :
- کنترل روشنایی
- کلیدهای هوشمند
- پریزهای هوشمند
اتوماسیون صنعتی :
- رباتهای صنعتی
- شبکه های مش
- واسط کاربری ماشین و انسان (HMI)
مراقبتهای بهداشتی :
- نظارت بهداشتی
- نظارت کودکان
الکترونیک مصرفی :
- ساعت و دست بند هوشمند
- Over-the-top (OTT) devices
- بلندگوهای وای فای یا بلوتوثی
- Logger toys and proximity sensing toys
کشاورزی هوشمند :
- گلخانه هوشمند
- ابیاری هوشمند
- رباتهای کشاورز
خرده فروشی و پذیرایی :
- دستگاه های POS
- رباتهای خدمتکار
- واسط کاربری ماشین و انسان (HMI)
دستگاه های صوتی :
- موزیک پلیر اینترنتی
- دستگاه های پخش زنده
- رادیو های اینترنتی
حسگرهای لمسی :
- طراحی ضد آب
- تجهیزات اندازه گیری فاصله
- طراحی اسلایدرهای خطی و چرخنده
- Logger toys and proximity sensing toys
من در این دوره از اموزشها از برد توسعه YD-ESP32-23 که یک برد توسعه ساده با ماژول ESP32-S3-WROOM-1 و پردازنده ESP32-S3 میباشد استفاده میکنم که به راحتی از بازار قابل تهیه میباشد.البته از هر برد توسعه دیگر مبتنی بر ESP32-S3 میتوان استفاده نمود.
خب تا اینجا امیدوارم خسته نشده باشد مطالب بالا یک اشنایی کلی و اجمالی با پردازنده ESP32-S3 بود که البته اگر علاقه به تحقیق و مطالعه بیشتر دارید میتوانید به دیتاشیت پردازنده مراجعه نمایید.
خب بریم سراغ اصل کار
محیطهای توسعه ESP32 :
در ادامه قصد دارم تعدادی از محیطهای توسعه ESP32 رو بهتون معرفی و یک بررسی اجمالی کنم:
- Arduino IDE (C++)
- ESP-IDF (C and C++)
- PlatformIO (C)
- Thonny (MicroPython)
- nanoFramework(C#)
Arduino IDE (C++) :
آردوینو یک IDE بسیار محبوب در میان توسعه دهندگان غیر تخصصی و افرادی که تخصص اصلی آنها الکترونیک نیست میباشد. اگرچه ESP32 بخشی از نصب پیش فرض این IDE نیست، برای دسترسی به آن فقط باید یک افزونه نصب کنید. زبان برنامه نویسی پیش فرض برای آردوینو C++ است.
ESP-IDF (C/C++) :
فریم ورک ESP-IDF فریم ورک یکپارچه و رسمی شرکت Espressif برای توسعه کد در دستگاه های مبتنی بر ESP32 میباشد.ESP-IDF بیشترین کنترل رو بر روی پردازنده به شما میدهد و البته یکی از سخت ترین و حرفه ای ترین محیطها برای راه اندازی و توسعه است. البته نگران این موضوع نباشید من اینجام برای راحت کردن و آموزش استفاده از این فریم ورک.مطمعن بعد از انجام چند پروژه به قدرت و کیفیت استفاده از فریم ورک رسمی ایمان خواهید آورد.برای استفاده از این فریم ورک نیاز است که آن را روی یک IDE نصب نمایید که از میام همه خوبان VsCode رو انتخاب کردم .دلیل این کار هم محبوبیت و همچنین قابلیتهای فراوان آن به واسطه وجود مقدار زیادی اکستنشن کاربردی است که کار کدنویسی و توسعه رو برای شما دلپذیرتر میکند.
ESP-IDF کتابخانه های بسیار گسترده ای را برای استفاده بیشتر ارائه می دهد.همچنین تعداد زیادی مثال کاربردی برای یادگیری مفاهیم نیز همراه آن ارائه شده است. زبان برنامه نویسی پیش فرض برای ESP-IDF زبان C میباشد، با این حال، نوشتن پروژه ها به زبان ++C به راحتی انجام می شود.
PlatformIO (C) :
PlatformIO در جایی بین Arduino و ESP-IDF قرار می گیرد. شما می توانید از هر دو تولچین برای پروژه ها استفاده کنید و راه اندازی آن نسبتاً ساده است. زبان برنامه نویسی پیش فرض برای PlatformIO به لایه زیرین بستگی دارد. اگر از زنجیره ابزار ESP-IDF استفاده می کنید، زبان برنامه نویسی C خواهد بود در حالی که اگر از زنجیره ابزار آردوینو استفاده کنید، زبان برنامه نویسی ++C خواهد بود. البته باید در نظ داشته باشید که خود PlatformIO به عنوان یک فریم ورک بر روی VsCode نصب و اجرا میشود.
Tonny (MicroPython) :
Thonny یک IDE پایتون است. علیرغم اینکه شعار آنها ارائه این پلتفرم برای مبتدیان بود، ولی با یک بررسی کلی میتوان متوجه شد که از نظر پشتیبانی از ویژگی های کافی برخوردار است. Thonny از MicroPython برای توسعه ESP32 پشتیبانی می کند. قبل از اینکه بتونید از پایتون در دستگاه استفاده نمایید ، باید میان افزاری را روی ESP32 نصب کنید که از مفسر میکروپایتون در دستگاه ESP32 پشتیبانی میکند. خوشبختانه، Thonny ابزاری را برای انجام این کار با استفاده از پورت سریال تعبیه کرده است.
nanoFramework(C#) :
اینهم یکی از محیطهای توسعه جالب است. برای استفاده از آن باید یک فرمور سفارشی را روی ESP32 بارگذاری کنید. ا. استفاده از سی شارپ برای اکثر برنامه نویسان نسبت به C و ++C آسانتر است و در سیستم عامل ویندوز میتواند با ویژوال استودیو نیز کدنویسی نمایید. اشکال زدایی که از طریق پورت سریال استفاده می کنید را نباید نادیده گرفت، این قابلیت به یافتن اشکالات در کد شما بسیار کمک می کند.
جمع بندی :
راه های مختلفی برای توسعه ESP32 وجود دارد و هر روش جای خود را دارد.
برای پروژه های تک منظوره، پایتون گزینه خوبی خواهد بود. اگر با اکوسیستم آردوینو آشنایی دارید و می خواهید پروژه های نسبتا ساده ای ایجاد کنید، آردوینو گزینه خوبی است. اگر نگران استفاده از آخرین نسخه ESP-IDF نیستید، ممکن است PlatformIO گزینه خوبی باشد. برای پروژههای بزرگی که نیاز به استفاده از تمام ویژگیهایی دارند که دستگاههای ESP32 ارائه میدهند، ESP-IDF راه حل پیشروی شماست. برای پروژه های پیچیده نیز باید میتوان روی چارچوب نانو حساب کرد.
بررسی ESP-IDF :
ESP-IDF یا Espressif IoT Development Framework، یک چارچوب رسمی توسعه برای سری میکروکنترلرهای ESP32 است.
چارچوب ESP IDF مجموعه ای از کتابخانه ها، ابزارها و API ها را برای توسعه برنامه های کاربردی مبتنی بر میکروکنترلر ESP32 ارائه می کند. این طیف گسترده ای از ویژگی ها، برای برنامه های IoT مورد نیاز است و برای ارائه یک پلت فرم جامع و انعطاف پذیر طراحی شده است.
یکی از مزیت های اصلی فریم ورک ESP-IDF این است که به طور کامل از زبان های برنامه نویسی استاندارد C و C++ استاندارد پشتیبانی می کند که امکان نوشتن کدهای کارآمد و با کارایی بالا را فراهم می کند.این ویژگی یکی از تفاوتهای اصلی استفاده از فریم ورک اصلی و رسمی نسبت به سایر پلتفرمها مانند آردوینو میباشد پشتیبانی کامل از زبانهای ++C/C یعنی شما از تمام ویژگیهای این زبانها میتوانید در برنامه خود استفاده نمایید.درصورتی که در سایر پلتفرمها اینگونه نیست.
علاوه بر این، ESP-IDF مجموعهای از ویژگیها و قابلیتها را برای ساخت برنامههای IoT فراهم میکند، مانند:
پشتیبانی از اتصال Wi-Fi و بلوتوث
مجموعه ای غنی از درایورها برای سنسورهای مختلف، تجهیزات جانبی و پروتکل های ارتباطی
پشتیبانی از به روز رسانی های هوایی (OTA) و بوت ایمن
پشتیبانی از FreeRTOS، یک سیستم عامل بلادرنگ برای میکروکنترلرها
یکی از هیجان انگیزترین ویژگی هایESP-IDF، قابلیت ESP Rainmaker است، یک پلت فرم توسعه برای ساخت دستگاه های متصل به کلود.
نصب و راه اندازی محیط توسعه
در این بخش نحوه نصب ESP-IDF در ویندوز و سپس پیکربندی آن با VS Code را به شما نشان خواهم داد. چارچوب رسمی توسعه اینترنت اشیا برای سری SoC های ESP32، ESP32-S و ESP32-C به عنوان ESP-IDF شناخته می شود. این فریم ورک یک SDK مستقل برای ایجاد هر نوع برنامه عمومی در پلتفرم های مختلف با استفاده از زبان های برنامه نویسی C و C++ ارائه می دهد. VS Code یک ویرایشگر کد منبع طراحی شده برای ویندوز، macOS و لینوکس است که در ساخت و اشکال زدایی برنامه های مختلف استفاده می شود.


