کار با کتابخانهها
کتابخانه در آردوینو چیست و چرا به آن نیاز دارید؛ نصب از Library Manager و نصب دستی و ZIP؛ ساختار پوشهٔ کتابخانه، تفاوت include با گیومه و علامت کوچکتر و جدول کتابخانههای پرکاربرد.
آنچه در این درس میآموزید
- مفهوم کتابخانه و نقش include را توضیح دهید
- کتابخانه را گامبهگام از Library Manager در IDE 2.x نصب کنید
- نصب دستی و نصب ZIP را در پوشهٔ libraries انجام دهید
- خطای No such file or directory را بر اساس علت اصلی رفع کنید
فهرست مطالب
سنسور دما را در نظر بگیرید: برای خواندنش باید پالسهای زمانسنجی دقیق بفرستید، پاسخ را بیتبهبیت بخوانید و عدد نهایی را از دل دادههای خام دربیاورید. این کار صدها خط کد تخصصی میخواهد — و هر سازندهٔ سنسور محبوبی همین کار را یک بار کرده و نتیجه را بهشکل «کتابخانه» (Library) در اختیار همه گذاشته است. کتابخانه بستهای از کد آماده است که با یک #include به اسکچ شما میچسبد و جعبهابزارتان را یکشبه بزرگ میکند. در این درس یاد میگیرید کتابخانه را از کجا بگیرید، چطور نصبش کنید و وقتی نصب «انجام شده» اما کد کامپایل نمیشود، چه بکنید.
کتابخانه چیست و چطور وارد اسکچ میشود؟
کتابخانه از نظر فنی مجموعهای از فایلهای کد C++ است: فایل سرآیند با پسوند .h که فهرست امکانات را معرفی میکند، و فایل پیادهسازی با پسوند .cpp که بدنهٔ توابع را دارد. شما فقط به سرآیند نگاه میکنید؛ خط زیر در بالای اسکچ، کل امکانات کتابخانه را در دسترس میگذارد:
#include <Servo.h>دو شکل include را از هم تشخیص دهید: علامت < > یعنی «کتابخانهای که در پوشههای کتابخانهٔ سیستم نصب است» و گیومهٔ " " یعنی «فایلی کنار همین اسکچ»، مثل "myHelper.h". اشتباهگرفتن این دو یکی از علتهای رایج خطای کامپایل است.
نصب از Library Manager (روش اصلی)
Arduino IDE 2.x مدیر بستهٔ داخلی دارد و تقریباً همهٔ کتابخانههای مشهور آنجا هستند:
- IDE را باز کنید و از منوی Tools گزینهٔ Manage Libraries را بزنید (کلید میانبر
Ctrl+Shift+I). - در کادر جستوجوی بالا نام کتابخانه را بنویسید؛ مثلاً DHT sensor library.
- در فهرست نتایج، نسخهٔ سازندهٔ معتبر را انتخاب کنید (برای این مثال، Adafruit) و از منوی کنار دکمه، نسخه را بگذارید Latest مگر دلیل دیگری داشته باشید.
- دکمهٔ Install را بزنید.
- اگر پنجرهای باز شد و از نصب وابستگیها (Dependencies) پرسید، Install All را بزنید؛ بعضی کتابخانهها روی کتابخانههای دیگر سوارند و ردکردن این پنجره یعنی کامپایل بعدی شکست میخورد.
پس از پایان، نام کتابخانه باید در فهرست File ← Examples ← کتابخانههای نصبشده دیده شود؛ همین، تأیید موفقیت نصب است. IDE نیازی به ریاستارت ندارد.
نصب دستی و نصب ZIP
بعضی کتابخانهها در Library Manager نیستند — مثلاً نسخهٔ آزمایشی از صفحهٔ GitHub سازنده. دو راه دارید:
- فایل ZIP: از منوی Sketch به Include Library و بعد Add .ZIP Library بروید و فایل ZIP دانلودشده را انتخاب کنید؛ IDE خودش آن را استخراج و در جای درست میگذارد.
- پوشهٔ دستی: پوشهٔ کتابخانه را در مسیر
Documents/Arduino/librariesکپی کنید. هر کتابخانه باید پوشهٔ خودش را داشته باشد، مثلاًDocuments/Arduino/libraries/MFRC522. بعد از کپی، اگر IDE باز بود ببندید و دوباره باز کنید.
ساختار یک پوشهٔ کتابخانه
پوشهٔ استاندارد کتابخانه چنین شکلی دارد:
| مسیر | نقش |
|---|---|
Servo.h (یا src/Servo.h) |
سرآیند؛ همان که include میکنید |
src/ یا فایلهای .cpp |
پیادهسازی توابع |
examples/ |
نمونهاسکچهای سازنده، از منوی File ← Examples |
library.properties |
شناسنامهٔ کتابخانه: نام، نسخه، سازنده |
بخش examples/ گنج بیبدیل یادگیری است: تقریباً هر کتابخانهای برای هر قابلیتش یک نمونهٔ اجراشدنی دارد. عادت حرفهای: پیش از نوشتن هیچ کدی، اول نمونهٔ کتابخانه را آپلود و اجرا کنید تا مطمئن شوید سختافزار و اتصالها درستاند.
کتابخانههای پرکاربرد
| کتابخانه | نوع | کاربرد |
|---|---|---|
| LiquidCrystal | همراه هسته | نمایشگر کاراکتری 16x2 حالت موازی |
| Servo | همراه هسته | کنترل سرووموتور |
| Wire | همراه هسته | ارتباط I2C |
| SPI | همراه هسته | ارتباط SPI |
| EEPROM | همراه هسته | ذخیرهٔ ماندگار در حافظهٔ EEPROM |
| DHT sensor library | Adafruit (نصب از مدیر بسته) | سنسورهای دما و رطوبت DHT11 و DHT22 |
| RTClib | Adafruit (نصب از مدیر بسته) | ماژولهای ساعت واقعی مثل DS3231 |
| MFRC522 | جامعهٔ کاربران (GitHub) | ماژول خوانندهٔ RFID RC522 |
کتابخانههای «همراه هسته» پیشنصباند و include کافی است؛ بقیه را یک بار نصب میکنید.
اشتباهات رایج و عیبیابی
| خطا یا نشانه | علت رایج | راهحل |
|---|---|---|
خطای No such file or directory هنگام کامپایل |
کتابخانه نصب نیست، نام include اشتباه است یا کلاهبردار < > و " " جابهجا شده |
نام سرآیند را از examples همان کتابخانه چک کنید و نصب را در Library Manager تأیید کنید |
| چند نسخه از یک کتابخانه نصب شده و رفتار عجیب یا خطای تعریف تکراری | کپی دستی + نسخهٔ مدیر بسته همزمان موجودند | نسخهٔ اضافه را از Documents/Arduino/libraries حذف کنید و فقط یکی نگه دارید |
| کتابخانه قدیمی با IDE یا هستهٔ جدید نمیسازد | نسخهٔ خیلی قدیمی یا خیلی جدید با وابستگیهای ناسازگار | در مدیر بسته نسخه را عوض کنید؛ نسخهٔ قبلی پایدار را از منوی نسخه انتخاب کنید |
| examples کتابخانه در منوی Examples دیده نمیشود | پوشهٔ examples جابهجا شده یا IDE پیش از کپی باز بوده | ساختار پوشه را با الگوی استاندارد مقایسه کنید و IDE را یک بار ریاستارت کنید |
تمرینها
تمرین
تمرین ۱ — نصب Servo و حرکت رفتوبرگشتی
کتابخانهٔ Servo را از Library Manager نصب کنید و اسکچی بنویسید که یک سرووموتور روی پین ۹ بگیرد و بازویش را پیوسته از زاویهٔ ۰ تا ۱۸۰ و برعکس بچرخاند؛ هر پله ۱۵ میلیثانیه فاصله داشته باشد.
نمایش راهحل
الگوی حلقههای رفت و برگشت مثل درس PWM است؛ فقط بهجای analogWrite از توابع Servo استفاده میشود:
#include <Servo.h>
Servo myServo; // Create a servo object
void setup() {
myServo.attach(9); // Signal wire on pin 9
}
void loop() {
for (int angle = 0; angle <= 180; angle += 5) {
myServo.write(angle);
delay(15);
}
for (int angle = 180; angle >= 0; angle -= 5) {
myServo.write(angle);
delay(15);
}
}توضیح: Servo myServo یک شیء میسازد؛ attach(9) پین سیگنال را معرفی میکند و write(angle) بازو را به همان زاویه میفرستد. سیم سیگنال به پین ۹، تغذیهٔ سرو به 5V و GND مشترک — و برای سروهای بزرگتر، تغذیهٔ خارجی را در درس موتورها دنبال کنید.
:::
خلاصه
- کتابخانه بستهٔ کد آماده است؛
#include <Name.h>امکاناتش را به اسکچ اضافه میکند و< >برای کتابخانهٔ نصبشده و" "برای فایل کنار اسکچ است. - روش اصلی نصب، Library Manager با
Ctrl+Shift+Iاست؛ پنجرهٔ وابستگیها را همیشه با Install All بپذیرید. - نصب ZIP از Sketch ← Include Library و نصب دستی در
Documents/Arduino/librariesبرای کتابخانههای خارج از مدیر بسته است. - پوشهٔ استاندارد کتابخانه سرآیند
.h، پیادهسازی.cppیاsrc/و پوشهٔexamples/دارد؛ نمونهها بهترین نقطهٔ شروعاند.
حالا ابزار هر کتابخانهای را میتوانید به اسکچ اضافه کنید؛ در درس بعدی با I2C آشنا میشوید، پروتکلی که بیشتر کتابخانههای ماژولها روی آن سوارند.