شروع توضیحات فایل نمونه
تا اینجای کار شما اگر با platformio آشنا نبوده اید، مقداری آشنا شده اید و برای آموزش بیشتر می توانید در اینترنت جستجو نمایید.
هرجا نیاز به توضیحات بیشتر یا کمک بیشتر داشتید می توانید علاوه بر تیکت زدن به بخش پشتیبانی، از چت جی پی تی نیز کمک بگیرید

فایل platformio.ini
platformio.ini که در ساختار اصلی پروژه وجود دارد به شرح زیر است :
; ----------------------------
; فایل تنظیمات پروژه PlatformIO
;
; این فایل برای پیکربندی پروژه استفاده میشود و شامل تنظیمات برد، کتابخانهها، تنظیمات کامپایل و موارد دیگر است.
; ----------------------------
; ----------------------------
; تنظیمات کلی PlatformIO
; ----------------------------
[platformio]
; مشخص کردن مسیر دایرکتوری کدهای منبع (source code)
src_dir = products/key_ch2_iot_01
; ----------------------------
; تنظیمات پیشفرض برای همه محیطها
; ----------------------------
[env]
; مشخص کردن مسیرهای اضافی کتابخانهها
lib_extra_dirs = .
; فعالسازی حالت بارگذاری عمیق برای حل وابستگی کتابخانهها
lib_ldf_mode = deep+
; نادیده گرفتن پوشهی خاص برای بارگذاری کتابخانهها
lib_ignore = products
; فریمورک برنامهنویسی که در این پروژه استفاده میشود
framework = arduino
; پلتفرم سختافزاری که پروژه برای آن طراحی شده است
platform = espressif32
; گزینههای مربوط به بیلد (کامپایل) پروژه
build_flags =
-Os ; بهینهسازی سایز کد
-DDEBUG_ESP32 ; فعالسازی حالت دیباگ برای ESP32
-g ; اضافه کردن اطلاعات اشکالزدایی (Debugging Info)
; سرعت مانیتور سریال برای ارتباط با برد
monitor_speed = 9600
; سایز فلش مموری برد مشخصشده
board_build.flash_size = 4MB
; مسیر فایل پارتیشنهای سفارشی
board_build.partitions = partitions_custom_4mb.csv
; ----------------------------
; محیط برنامهنویسی برای برد ESP32
; ----------------------------
[env:esp32dev]
; مشخص کردن پلتفرم (ESP32) و نوع برد
platform = espressif32
board = esp32dev
; مشخص کردن فریمورک Arduino برای توسعه
framework = arduino
; گزینههای بیلد اختصاصی برای محیط ESP32
build_flags =
-Os ; بهینهسازی سایز کد
-DDEBUG_ESP32 ; فعالسازی حالت دیباگ برای ESP32
-g ; اضافه کردن اطلاعات اشکالزدایی (Debugging Info)
; لیست وابستگیهای کتابخانهها که باید نصب شوند
lib_deps =
knolleary/PubSubClient@^2.8 ; کتابخانه MQTT برای ارتباط با سرور
adafruit/Adafruit NeoPixel@^1.12.3; کتابخانه برای کنترل LEDهای NeoPixel
bblanchon/ArduinoJson@^7.2.1 ; کتابخانه مدیریت دادههای JSON
arduino-libraries/Arduino_DebugUtils@^1.4.0 ; کتابخانه ابزارهای دیباگ
arduino-libraries/ArduinoHttpClient@^0.6.1 ; کتابخانه HTTP برای ارتباط اینترنتی
marian-craciunescu/ESP32Ping@^1.7.0 ; کتابخانه برای ارسال پینگ از ESP32
توضیحات تکمیلی:
[platformio] در این بخش مسیر اصلی کد منبع مشخص میشود تا PlatformIO فایلهای مورد نظر را پیدا کند.
[env] این بخش تنظیمات پیشفرض برای تمامی محیطها را شامل میشود:
مسیر کتابخانهها و نادیدهگیری برخی فولدرها. پیکربندی عمومی برای فریمورک، پلتفرم، سرعت سریال، و سایز فلش.
[env:esp32dev] این محیط بهصورت ویژه برای برد ESP32 پیکربندی شده است. تنظیمات کامپایل و کتابخانهها برای این برد در اینجا مشخص شدهاند.
lib_deps لیست کتابخانههای مورد نیاز برای پروژه که PlatformIO بهطور خودکار آنها را دانلود و نصب میکند.
برای راحتی انتقال پروژه های خود از آردینو به vs code می توانید روش زیر را امتحان کنید :
همانطور که مشاهده می کنید در فایل platformio.ini مسیر src_dir = products/key_ch2_iot_01 مشخص شده است و در این مسیر دقیقا فایل اصلی آردینو قرار داده ایم. به واسطه این دستور می توانید به platformio.ini بگویید از کدام فایل شروع به کامپایل نماید.
vs code دارای شورت کات های فراوان است که می توانید آن ها را ج ستجو پیدا نمایید.
فایل partitions_custom_4mb.csv
برای Esp32 با ورژن های مختلف میزان flash متفاوت است به طور مثال 4,8,16 مگابایت که می توانید از دیتاشیت میکروکنترلر خود آن را پیدا نمایید. این حافظه را به گونه ای ما تقسیم کرده ایم که بتوان حالت آپدیت فریمورک OTA را نیز داشته باشیم.
پارتیشنبندی حافظه در بردهای ESP32 به ما اجازه میدهد تا فضای فلش مموری را برای ذخیره دادهها، برنامهها و بهروزرسانیهای OTA بهطور مؤثر مدیریت کنیم. فایل پارتیشن در PlatformIO معمولاً از نوع CSV است و هر خط آن یک پارتیشن را تعریف میکند. در ادامه بهطور کامل توضیح میدهم که هر قسمت از پارتیشنها چه کاربردی دارد.
ساختار کلی پارتیشنها
فیلدها در هر خط بهترتیب به این معنی هستند:
Name: نام پارتیشن (برای شناسایی). Type: نوع داده ذخیرهشده (مثلاً app یا data). SubType: زیرشاخه نوع داده (مانند nvs، ota یا spiffs). Offset: شروع آدرس پارتیشن در حافظه فلش (به هگزادسیمال). Size: اندازه حافظه اختصاصیافته به پارتیشن (به هگزادسیمال). Flags: تنظیمات اضافی (در بیشتر موارد خالی است).
- پارتیشن NVS (Non-Volatile Storage) Type: data SubType: nvs آدرس شروع: 0x9000 اندازه: 0x5000 (20 کیلوبایت) کاربرد: NVS برای ذخیره دادههای دائمی (مثل تنظیمات کاربر، پارامترهای وایفای و متغیرهای کوچک) استفاده میشود. مانند EEPROM در بردهای قدیمیتر عمل میکند، اما کارایی و مدیریت بهتری دارد.
- پارتیشن OTADATA Type: data SubType: ota آدرس شروع: 0xe000 اندازه: 0x2000 (8 کیلوبایت) کاربرد: برای ذخیره اطلاعات مربوط به OTA (Over The Air) استفاده میشود. اطلاعات مربوط به وضعیت فعلی فریمورک (کدام اپلیکیشن در حال اجرا است) در این بخش ذخیره میشود.
- پارتیشن APP0 و APP1 Type: app SubType: ota_0 و ota_1 آدرسها: app0: 0x10000 app1: 0x1D0000 اندازهها: هر کدام 0x1C0000 (1.75 مگابایت) کاربرد: این دو بخش برای ذخیره دو نسخه از فریمورک برنامه استفاده میشوند. OTA Updates: زمانی که آپدیت OTA انجام میشود، نسخه جدید فریمورک در پارتیشن خالی (مثل app1) ذخیره میشود. پس از بوت موفقیتآمیز، برد بهطور خودکار پارتیشن جدید را بهعنوان اپلیکیشن اصلی انتخاب میکند.
- پارتیشن SPIFFS Type: data SubType: spiffs آدرس شروع: 0x390000 اندازه: 0x4B000 (300 کیلوبایت) کاربرد: SPIFFS (SPI Flash File System) یک فایل سیستم سبک است که برای ذخیره دادههای متنی، فایلهای تنظیمات و دیگر دادههای غیرضروری استفاده میشود. مثالهایی از کاربرد: ذخیره فایلهای HTML، CSS و جاوااسکریپت برای وبسرور داخلی. لاگفایلها و اطلاعات متنی کوچک.
نکات مهم درمورد پارتیشنها چرا از پارتیشنبندی استفاده میکنیم؟
برای مدیریت بهتر فضای فلش مموری. امکان آپدیت OTA و استفاده همزمان از دو نسخه فریمورک. ذخیره دادههای کاربر و اطلاعات مهم بهصورت دائمی. نحوه تنظیم پارتیشنها:
در PlatformIO فایل CSV پارتیشن را از طریق گزینه board_build.partitions تنظیم میکنیم. این فایل میتواند برای هر پروژه سفارشیسازی شود. نحوه مشاهده اطلاعات پارتیشن:
با استفاده از دستور esptool.py میتوان اطلاعات فلش و پارتیشنها را مشاهده کرد.
پارتیشنبندی فضای حافظه فلش در ESP32 به ما کمک میکند تا کد برنامه، دادههای دائمی و بهروزرسانیهای OTA را بهطور بهینه مدیریت کنیم. این ساختار برای توسعه پروژههای IoT و سیستمهای پیچیده ضروری است.
src
این بخش از پروژه، فایل های مشترک م ا قرار دارد که می خواهیم در تمام پروژه ها از آن استفاده نماییم.
شما یم توانید ساختار و اسم گذاری های خود را داشته باشید. این نمونه صرفا راهنما و کمکی برای تسریع کد نویسی شما است.
به مرور تمامی تمام متدهای پروژه را کامنت گذاری فارسی خواهیم کرد، اما اگر نیاز به کمک دارید از طریق تیکت در بخش پشتیبانی با ما در تماس باشید