تمشک یا پرتقال، مسئله این است!!! (مقایسه رزبری پای با اورنج پای)
ساخت یک پروژه با برد رزبریپای (Raspberry Pi) میتواند نسبتاً پرهزینه و گران باشد. بردهای ارنج پای (Orange Pi) ساخت چین دارای یکی دو نمونه مختلف است که هم ازلحاظ قیمت و هم ازلحاظ قدرت پردازش جذاب به نظر میرسد. در این مقاله ما در مورد برد Orange Pi Lite بررسی مختصری انجام میدهیم.
بنیاد رزبریپای برای مدتهای زیادی بازار علاقهمندان به رایانههای تک بردی را از آن خود داشت. به دلیل اینکه پردازشگر این بردها در حجم زیاد برای استفاده در گوشیهای هوشمند ساختهشده بود، قیمت نسبتاً پایینی داشتند. این پایین بودن قیمت به مدیریت شرکت Broadcom اجازه میداد رایانهای یکپارچه تولید کنند که حداقل در آن زمان ازنظر قیمت غیرقابل رقابت بود.
اغلب گفته میشود که تولیدکنندگان چینی دیر یا زود، در واکنش به وجود یک محصول به بازار میآیند. شرکت Allwinner نیز که یک تولیدکننده پردازشگر در چین است قصد نداشت به همتای خود یعنی شرکت Broadcom اجازه بدهد که بدون مبارزه از این بازار لذت ببرد. به همین منظور در سال 2015 ارنج پای را وارد بازار کرد. از آن زمان به بعد خانواده این برد رشد پیداکرده است و هماکنون انواع مختلفی از بردهای ارنج پای را میتوانید در فروشگاههای معتبر کالاهای الکترونیکی نظیر فروشگاه ECA یا از سایتهای خارجی از قبیل AliExpress پیدا کنید.
یک مهندس همیشه در تلاش است تا راههایی پیدا کند که هزینهها را پایین آورده و قدرت پردازشی را بالا ببرد. خانواده ارنج پای برای هرکسی که بخواهد با استفاده از یک رایانه لینوکسی، سختافزارهای خارجی را کنترل کند بردی پیشنهاد میکند که ازنظر عملکرد مشابه با برد رزبریپای باشد. یکی از ویژگیهای جذاب بردهای چینی، پوشش خوب وای فای آنها است. البته ممکن است کسی عقایدش با عقاید سیاسی بنیاد رزبریپای همسو نباشد و به همین دلیل به دنبال بردی جایگزین برای برد رزبریپای بگردد.
دسترسی به برد
اگرچه بردهای کنترلکننده ارنج پای توسط توزیعکنندههای بسیاری در سرتاسر دنیا به فروش میرسند، ولی شاید کسی بخواهد مستقیماً از خود شرکت تولیدکننده خرید نماید. Shenzhen Xunlong انواع مختلفی از کیتها و لوازم جانبی را در سایت خود به معرض فروش گذاشته است. همچنین محصولات این شرکت در سایت eshop.eca.ir یا سایت AliExpress هم در دسترس هستند.
سؤالی که در اینجا پیش میآید این است که کدام برد برای آزمایشها مناسبتر است. میتوان بردهای کنترلی را با توجه به طرح نشان دادهشده در تصویر 1 به چهار دسته تقسیم کرد. لازم به ذکر است نقشه پینهای تعداد نسبتاً زیادی از بردها (بهجز بردهای خانواده زیرو) در شکل 2 آورده شده است که با نقشه پینهای رزبریپای مطابقت دارد. شکل 3 را ببینید.
در آزمایشهای آتی ما از برد ارنج پای لایت استفاده میکنیم. وزن این برد 28.8 گرم است که سبکتر از رزبریپای 3 بوده و قیمت نسبتاً پایینتری هم دارد (در حدود 12 دلار). علاوه بر این، این برد دارای 2 پورت USB و یک آنتن وای فای هست.
برد ارنج پای 1 تنها 1 پورت USB داشته و بهجای وای فای پورت شبکه دارد و باقیمتی کمتر در حدود 9 دلار به فروش میرسد.
تصویر 1- اعضا خانواده ارنج پای بهصورت کلی
تصویر 2- طرح هدر 40 پایه ارنج پای که درست مثل پایههای رزبریپای است (منبع: www.orangepi.org)
پیکربندی
ابتدا بهتر است در مورد بنیاد رزبریپای مطلبی را بیان کنیم: اگر شما یکی از بردهای این شرکت را خریداری کنید متوجه میشوید که ازلحاظ پشتیبانی نرمافزاری و اکوسیستم بسیار عالی هستند. همچنین شما میتوانید برد رزبریپای را با هر شارژر معمولی با پورت میکرو USB روشن کنید که برای شروع، کار را راحت میکند.
ارنج پای لایت هم پورت میکرو USB دارد ولی جالب اینکه شما به خاطر قطعات استفادهشده در رابط این برد نمیتوانید از این پورت برای روشن کردن برد استفاده کنید. بهجای این پورت شما میتوانید یک جریان 5 ولت را به فیش منبع تغذیه و یا به پایههای 2 و 4 و 6 هدر وصل کنید. (پینهای 2 و 4 به مثبت 5 ولت و پین 6 به زمین). این نکته غیرمعمول و ناراحتکننده در همه خانواده ارنج پای وجود دارد درنتیجه اگر میخواهید با استفاده از پورت میکرو USB بردتان را روشن کنید، باید به فکر خرید بردی غیر از محصولات Shenzhen Xunlong باشید.
مشکل دیگر بردهای ارنج پای، نرمافزار است. فایلهای سیستمعاملی که بر روی سایت سازنده ارنج پای وجود دارد اندکی بیشتر از تغییر پوشش ویندوز است. لینکهای دانلود برخی اوقات کار نمیکنند و هر فایلی هم که دانلود میکنید احتمالاً پشتیبانی قوی ندارد.
توزیع Armbian کموبیش توانسته خود را بهعنوان یک استاندارد در میان گروه کاربران ارنج پای جا دهد که میتوانید آن را از اینجا دانلود کنید. توجه داشته باشید که هرکدام از اعضای خانواده ارنج پای، نسخه مخصوص به خود از این توزیع را دارد.
برای برد ارنج پای لایت ما از یک توزیع مبتنی بر دبیان استفاده میکنیم؛ البته توزیع ابونتویی هم بهخوبی روی این برد کار میکند. تفاوت بین نسخهها بهصورت کلی اندک است ولی بهمرورزمان این تفاوتها خود را نشان میدهند و ازاینرو در زمان تست باید بیشتر مراقب باشید.
فایل نصب موردنظر را دانلود کرده و بر روی یک کارت حافظه SD که بهاندازه کافی ظرفیت داشته باشد رایت میکنیم. برد پردازشگر را از طریق پورت HDMI به نمایشگر وصل کرده و سپس منبع نیرو را وصل میکنیم. ممکن است یک دقیقه یا بیشتر طول بکشد تا اتفاقی رخ دهد بنابراین خیلی تعجبزده نشوید. دربردهای ارنج پای مدت طولانی طول میکشد تا برد شروع به کار کنند و شما بتوانید تصویری در نمایشگر ببینید.
تصویر 3- مراقب باشید! جهت هدر این دو بورد باهم فرق دارد.
اندروید بر روی برد
حافظه فلش داخلی رایانه ارنج پای پلاس حاوی یک نسخه چینی از اندروید است که بر اساس گزارشها کاملاً کاربردی است
این برد لینوکس را اجرا میکند!
ایمیج های Armbian، سیستمعاملهایی برای رایانههای معمولی هستند. بعد از بالا آمدن سیستمعامل علامت ورود نام کاربری و رمز عبور نشان داده میشود. نام کاربری و رمز عبوری که شما در اینجا میتوانید استفاده کنید برای نسخههای مختلف تفاوت دارد. برای ارنج پای لایت نام کاربری root و رمز عبور 1234 است.
بعد از اولین ورود سیستمعامل از شما میخواهد که به دلایل امنیتی رمز عبور را تغییر دهید و سپس ویزارد نصب سیستمعامل نشان داده میشود. نام کاربری حتماً باید وارد شود ولی قسمتهای دیگر را میتوانید با فشار دادن دکمه Enter خالی بگذارید. پسازاین مرحله سیستم ریبوت میشود و شما میتوانید بار دیگر رابط کاربری گرافیکی Armbian (تصویر 4) را مشاهده کنید. Armbian از نوع دبیان است که یک توزیع لینوکسی با تاریخچهای طولانی هست.
تصویر 4- درست مثل همان لینوکسی که میشناسیم و دوستش داریم.
توزیع Raspbian که بر روی بردهای رزبریپای استفاده میشود نیز بر مبنای دبیان است. همانطور که مشخص است ازلحاظ نرمافزاری رزبریپای و ارنج پای کموبیش مشابه هم هستند. اولین تفاوتی که مشاهده میشود در نحوه کنترل سختافزارهای خارجی است. رزبریپای از کتابخانه WiringPi و ارنج پای از WiringOP استفاده میکند. قبل از استفاده از کتابخانه باید آن را دانلود کرده و کامپایل نمود که میتوان با واردکردن دستورات زیر کتابخانه را کامپایل نمود:
cd ~ mkdir opigpiolib git clone https://github.com/zhaolei/WiringOP.git -b h3 cd WiringOP chmod +x ./build sudo ./build
در مرحله بعدی ما نگاهی به یک برنامه کوچک میاندازیم که یک موج مربعی بر روی یکی از پینهای GPIO ایجاد میکند. برای این کار یک فایل به اسم main.c میسازیم و خطوط زیر را داخل آن مینویسیم:
#include <wiringPi.h> int main (void) { wiringPiSetup () ; pinMode (0, OUTPUT) ; for (;;) { digitalWrite (0, HIGH) ; digitalWrite (0, LOW) ; digitalWrite (0, HIGH) ; digitalWrite (0, LOW) ; } return 0 ; }
فرایند پردازش این کد بسیار شبیه به فرایند پردازش در رزبریپای است:
$ gcc -Wall main.c -lwiringPi $ sudo ./a.out
در برخی نسخههای ارنج پای ممکن است به خطای کامپایلری برخورد نمایید که به دلیل عدم وجود کتابخانه pthread هست:
$ gcc -Wall main.c -lwiringPi //usr/local/lib/libwiringPi.so: undefined reference to 'pthread_join' //usr/local/lib/libwiringPi.so: undefined reference to 'pthread_create' //usr/local/lib/libwiringPi.so: undefined reference to 'pthread_cancel' collect2: error: ld returned 1 exit status
این امر نیز بهنوبه خود ناشی از پیکربندی اشتباه کامپایلر gcc است که بهصورت اتوماتیک اتصال به کتابخانه pthread را انجام نداده است. برای حل این مشکل کافی است یک گزینه دیگر به دستورات کامپایلر اضافه کنید:
$ gcc -Wall main.c -lwiringPi -pthread $
میتوان با استفاده از دستور gpio readall نمایی از وضعیت هرکدام از پینهای GPIO را به دست آورد. برای سادهتر شدن این موضوع، نتیجه اجرای آزمایشی این دستور بر روی یک رایانه ارنج پای پلاس در شکل 5 نشان دادهشده است.
تصویر 5- گزینههای موجود برای GPIO در ارنج پای مقداری پیچیده است.
حالا ما میتوانیم این برد را به دو ابزار دیگر متصل کنیم. یک انالایزر حوزه مدولاسیون و یک اسیلوسکوپ ذخیره کننده دیجیتالی. شکل 6 و 7 نتایجی که ممکن است ببینید را نشان میدهند.
یک گل حساس
بردهای ارنج پای بسیار به ولتاژ تغذیهای که خیلی پایین باشد حساس هستند. این موضوع میتواند درزمانی که رابط گرافیکی فعال است باعث اشکال در کارکرد برد و خواندن اطلاعات از کارت SD شود. اگر در بوت کردن رایانه جدید خود مشکل دارید یکی از چیزهایی که باید در ابتدا چک کنید، افت ولتاژ در کابلهای تغذیه است توجه داشته باشید که این برد میتواند تا 800 میلیآمپر جریان بکشد.
فعالسازی UART
در مثال بعدی ما به شما نشان میدهیم که چگونه یک کارت RFID را بخوانید. ماژول فرستنده Seeed RFID که با فرکانس 125 کیلوهرتز کار میکند به خاطر نیاز به پیکربندی اندک برای این آزمایش مناسب است. قیمت این ماژول به همراه آنتن در حدود 12 دلار است. شکل 8 شماتیک الکترونیکی موردنیاز برای اتصال این ماژول را نشان میدهد. درحالیکه برد رزبریپای 3 دارای حد تحمل ولتاژ 5 ولت است این وضعیت در مورد برد ارنج پای صادق نیست و به یک مدار تغییر شیفت ولتاژ نیاز است.
شرکت Allwinner پیکربندی سختافزاری برای SoC (System on Chip = سیستمهای روی تراشه) محصولات خود را به شکل یک فایل باینری ارائه میکند که توسط هسته سیستمعامل بهعنوان بخشی از فرایند بوت شدن در دستگاه بارگذاری میشود. فایل پیکربندی برای تنظیم رگولاتور های ولتاژ، منابع ساعت و دیگر زیرسیستمها بکار میرود. UART مورداستفاده ما در این مثال، بهصورت معمول در دسترس نیست. اگر به دایرکتوری /dev نگاهی بیندازید، میبینید که فقط یک UART موجود است (ttyS0):
$ ls -l . . . crw--w---- 1 root tty 4, 9 Apr 12 06:07 tty9 crw--w---- 1 root tty 251, 0 Apr 12 06:08 ttyS0 crw------- 1 root root 248, 0 Apr 12 06:07 tv
برای حل این مشکل اولین قدم این است که فایل پیکربندی را که در هنگام فرایند بوت شدن در سختافزار بارگذاری شده است ویرایش کنیم. اسکریپتی که برای این منظور استفاده میکنیم در کارت SD در دایرکتوری /boot/bin وجود دارد که محتوای آن در سیستم Armbian چیزی مثل شکل زیر است:
درعینحال فایلی که برای شروع به کاربرد مورداستفاده قرارگرفته در دایرکتوری بالاتر از این دایرکتوری قرار دارد و اسم آن script.bin است البته این یک لینک نمایشی است و شما میتوانید فایل واقعی را با استفاده از دستور realpath پیدا کنید:
$ pwd /boot $ realpath script.bin /boot/bin/orangepipcplus.bin
این فایل پیکربندی میتواند به شکلهای مختلفی وجود داشته باشد. علاوه بر فایل بهصورت باینری که فقط خود پردازشگر آن را میفهمد فایلی هم با فرمت .fex وجود دارد که برای ما قابلفهم است. فایل باینری (که فقط برای کامپیوتر قابلفهم است و در مسیر /boot/bin/orangepipcplus.bin قرار دارد) را هم با استفاده از دستور زیر میتوانیم به فایلی تبدیل کنیم که برای ما قابلفهم باشد:
$ sudo bin2fex orangepipcplus.bin orangepipcplus.fex [sudo] password for spotter: . . . fexc-bin: orangepipcplus.bin: version: 1.2 fexc-bin: orangepipcplus.bin: size: 36392 (84 sections), header value: 36392
ساختار فایل .fex شبیه به ساختار فایل های .ini است و با جزئیات کامل در اینجا در مورد آن توضیح دادهشده است. چیزی که ما در اینجا به دنبال آن هستیم نحوه پیکربندی UART است که اکنون به ماژول RFID متصل شده است. قسمت مربوط به UART را ویرایش کنید تا به این صورت دربیاید:
[uart3] uart_used = 1 uart_port = 3 uart_type = 4 uart_tx = port:PA13<3><1><default><default> uart_rx = port:PA14<3><1><default><default> uart_rts = port:PA15<3><1><default><default> uart_cts = port:PA16<3><1><default><default>
قسمتی که در مورد UART غیرفعال وجود دارد چیزی شبیه به این است:
[uart2] uart_used = 0 uart_port = 2
البته فقط ویرایش فایل .fex و ریبوت سیستم کافی نیست و این کار تغییری در کارکرد دستگاه ایجاد نمیکند. ما باید اول فایل ویرایش شده .fex را با استفاده از دستور fex2bin به فایل .bin تبدیل کنیم.
$ sudo fex2bin orangepipcplus. fex orangepipcplus.bin
حالا ماشین را ریبوت میکنیم و از ثمره تلاشمان لذت میبریم. حالا اگر به دایرکتوری /dev مراجعه کنید میبینید که پورت سریال جدید در این دایرکتوری ایجادشده است.
crw--w---- 1 root tty 251, 0 Apr 24 13:34 ttyS0 crw-rw---- 1 root dialout 251, 3 Apr 24 13:34 ttyS3 crw------- 1 root root 248, 0 Apr 24 13:34 tv
فعال کردن و پیکربندی UART فقط یکی از کارهایی بود که با ویرایش فایل .fex قادر به انجامش هستیم. یکی دیگر از کارهایی که میتوانیم با ویرایش این فایل انجام دهیم تغییر فرکانس ساعت پردازش گر است. با تغییر فرکانس ساعت پردازشگر میتوانیم سرعت پردازش را بالاتر ببریم یا در مصرف نیرو صرفهجویی کنیم.
با خواندن مقدار اطلاعات از ماژول RFID بحث را ادامه میدهیم.
اسکن یک کارت RFID
حالا همهچیزی که ما برای درست کردن یک کارتخوان کامل نیاز داریم یک برنامه است که بتواند اطلاعات سریالی که از سمت UART میآید را بخواند. اولین کار این برنامه باز کردن اتصال به UART است.
#include <string.h> #include <errno.h> #include <wiringPi.h> #include <wiringSerial.h> int main () { int fd ; int count ; unsigned int nextTime ; if ((fd = serialOpen ("/dev/ttyS3", 9600)) < 0) { fprintf (stderr, "Unable to open serial device: %s\n", strerror (errno)) ; return 1 ; } if (wiringPiSetup () == -1) { fprintf (stdout, "Unable to start wiringPi: %s\n", strerror (errno)) ; return 1 ; } nextTime = millis () + 300 ; for (count = 0 ; count < 256 ; ) { delay (3) ; while (serialDataAvail (fd)) { printf (" -> %3d", serialGetchar (fd)) ; fflush (stdout) ; } } printf ("\n") ; return 0 ; }
گام بعدی خواندن اطلاعات ورودی است. با توجه به اهمیت روزافزون تکنولوژی RFID به نظر میرسد. توضیح مختصری در مورد این تکنولوژی خالی از لطف نباشد. بهصورت کلی دو نوع RFID خوان وجود دارد. اولین دسته از آنها که ماژول آزمایشی ما هم به آن تعلق دارد همه اطلاعاتی که در کارت وجود دارد را میخواند و بهصورت یک جریان داده سریال به هر چیزی که به ماژول وصل است میفرستد. کارتخوانهای نوع دوم از رابطهای Wiegand استفاده میکنند. این رابط شامل یک پروتکل ارتباطی است که با استفاده از یکی از دو خط ارتباطی به تبادل اطلاعات و برقراری ارتباط میپردازد.
علیرغم اینکه این پروتکل محدود به ارسال دادههایی با طول 26 یا 31 بیت است، ولی این روش ارتباطی هیچ نشانهای از پیش افتادن نشان نمیدهد و در محدوده کارکرد نرمافزارهای کنترل تعبیهشده باقی میماند. بیشتر کارتخوانها در هر دو فرم وجود دارند هرچند که استفاده از UART نسبت به Wiegand پیچیدهتر است. برای سادگی بیشتر برنامه ما هر بار یک بایت اطلاعات را جمعآوری میکند؛ و بر روی پنجره ترمینال نشان میدهد.
حالا برای اولین تست آماده هستیم. برنامه را به روش معمول کامپایل میکنیم و یک کارت را به سیمپیچ قرمز کارتخوان نزدیک میکنیم. چیزی که در پنجره ترمینال نشان داده میشود، میبایست چیزی شبیه به تصویر 9 باشد.
بررسی بیشتر
همانطور که دیدیم ارنج پای یک برد کنترل کلاسیک است که سیستمعامل لینوکس را اجرا میکند که به این معنا است که همانند بردهای رزبریپای دیگر بردهای شبیه به آن، تعداد بسیار زیادی از پروتکلها از قبیل I2c و SPI بر روی ارنج پای قابلاستفاده بوده و حمایت میشود. هرکسی که قصد دارد با API های لینوکسی پروتکلهای SPI و I2C سروکله بزند (و کسانی میخواهند با کتابخانه WiringOP کار کنند) متوجه میشود که اتصال انواع مختلفی از ابزارهای جانبی از قبیل صفحات نمایش و سنسورها در هراندازه و شکلی بهراحتی صورت میگیرد.
نتیجهگیری
هنگامیکه رایانه ارنج پای متولد شد بسیاری از افراد با توجه به سابقه کم شرکت تولیدکننده دچار شک و ابهام نسبت به این برد بودند. دو سال بعد Shenzhen Xunlong هنوز هم باقدرت به فعالیت خود ادامه میدهد و مدلهای بسیاری به بازار ارائه کرده است و بهراحتی به همه بردهای آن میتوان دسترسی داشت. استفاده از ارنج پای در سیستمهای تولید عمده باصرفه است: یک کاهش هزینه به میزان 50 درصد یا حتی بیشتر چیزی نیست که بتوان از آن چشمپوشی کرد. در تعدادهای کم، مسئله مهم، هزینههای توسعه است. اگر شما یک کاربر حرفهای لینوکس نیستید شاید بهتر باشد که به دنبال خرید یک برد رزبریپای و استفاده از اطلاعات و کمک جامعه رزبریپای باشید.
نظرات خود را در زمینه کار با بردهای اورنج پای و رزبری پای با ما در میان بگذارید.
عالی
خیلی وقت بود دنبال چنین چیزی میگشتم.
دتتون درد نکنه واقعا
کامل و جامع
ممنون