از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
روش برنامه نویسی آردوینو با جاوا اسکریپت همانطور که احتمالا می دانید (یا شنیده اید)، آردوینو یک پلت فرم عالی برای یادگیری و هک است. روی الکترونیکی که در غیر این صورت استفاده از آن برای مبتدیان بسیار دشوار خواهد بود. این یک مقدمه عالی برای برنامه نویسی، الکترونیک و به طور کلی مهندسی است. اما حتی پس از آن، به همان اندازه که آردوینو پیشرفت کرده است…
سرفصلهای مطلب
معرفی
همانطور که احتمالا می دانید (یا شنیده اید)، آردوینو یک پلت فرم عالی برای یادگیری و هک است روی الکترونیکی که در غیر این صورت استفاده از آن برای مبتدیان بسیار دشوار خواهد بود. این یک مقدمه عالی برای برنامه نویسی، الکترونیک و به طور کلی مهندسی است. اما حتی پس از آن، به همان اندازه که آردوینو نسبت به روش سنتی کار با الکترونیک پیشرفت کرده است، نوشتن کدهای C مانند همچنان می تواند کمی دلهره آور باشد. بنابراین اگر بتوانید به جای آن از یک زبان سطح بالاتر مانند جاوا اسکریپت استفاده کنید چه؟
با زبان هایی مانند جاوا اسکریپت، لازم نیست نگران جزئیات سطح پایین چیزهایی مانند اشاره گرها و تخصیص حافظه باشید، که ممکن است برای مبتدیان گیج کننده باشد. در عوض، باید تمرکز کنید روی منطق برنامه و استفاده از صدها هزار کتابخانه منبع باز برای ارائه انواع عملکردها به پروژه خود تنها با چند خط کد.
جانی فایو
را جانی فایو کتابخانه چیزی است که به شما امکان می دهد Arduino (یا Raspberry Pi، BeagleBone، Photon و بسیاری دیگر) را با جاوا اسکریپت کنترل کنید.
حالا مثل خیلی چیزهای خوب، یک شکار کوچک وجود دارد. کد جاوا اسکریپت در واقع مستقیما اجرا نمی شود روی آردوینو، در واقع باید اجرا شود روی آ host کامپیوتر، و دستورالعمل های آن را در زمان اجرا از طریق کابل USB یا پروتکل/رسانه سریال دیگر به دستگاه منتقل کنید. برای برخی از برنامه ها، این یک معامله شکن است زیرا آنها نمی توانند این اتصال فیزیکی را داشته باشند روی پروژه آنها (مانند روی یک پهپاد)، اما برای دیگران ممکن است مشکل بزرگی نباشد. برای مثال، اگر تنها کاری که باید انجام دهید کنترل یک بازوی رباتیک است روی میز شما، جانی فایو ممکن است کاملاً مناسب باشد. پس از همه، تمرکز اصلی آن است روی از این رو رباتیک نام.
این کتابخانه با بهره گیری از امکانات کار می کند پروتکل Firmata، که راهی برای برقراری ارتباط با میکروکنترلرها از طریق نرم افزار است روی آ host کامپیوتر (یا گوشی هوشمند/تبلت و غیره). این بدان معنی است که شما می توانید تمام منطق برنامه را اجرا کنید روی کامپیوتر شما، اما هر زمان که نیاز به انجام هر IO داشته باشید روی دستگاه مانند خواندن پین GPIO، ارسال داده از طریق SPI و غیره، برنامه دسکتاپ از پروتکل Firmata استفاده می کند تا به آردوینو بگوید که IO خاص را انجام دهد.
برای مثال کد زیر فقط LED را چشمک می زند روی پین 13. بنابراین تنها زمانی که با آردوینو ارتباط برقرار می کند زمانی است که می خواهد LED را بچرخاند روی یا خاموش، در غیر این صورت آردوینو فقط در آنجا می نشیند و منتظر دریافت دستورالعمل از طرف می باشد host کامپیوتر.
var five = require('johnny-five');
var board = new five.Board();
board.روی('ready', function() {
var led = new five.Led(13);
led.blink(500);
});
برای اجرای آن، ابتدا باید کد Arduino Firmata را روی برد بارگذاری کنید. این کار را با باز کردن Arduino IDE و سپس کلیک کردن انجام دهید File->Examples->Firmata->StandardFirmata. با این کار کد در پنجره ویرایشگر باز می شود. در نهایت (با فرض اینکه برد شما از طریق USB متصل است)، کلیک کنید بارگذاری.
برای اجرای بخش Johnny-Five کد، به دایرکتوری پروژه بروید، مطمئن شوید که اجرا کرده اید npm install
، و سپس اجرا کنید node index.js
، با فرض نامگذاری فایل index.js
.
نکته خوب در مورد جانی فایو این است که، در مد معمولی Node، تقریباً برای همه چیز یک کتابخانه وجود دارد. نویسنده قبلاً تمام کدهایی را که برای انجام کارهای معمول رباتیک نیاز دارید، مانند موتورهای چرخشی، خواندن ورودیهای حسگر، رابط با دستگاههای ارتباطی و موارد دیگر نوشته است. شما می توانید لیست بزرگی از نمونه های مفید را بیابید اینجا.
مثال: جانی فایو + آردوینو + اخبار هکر
این مثال ترکیب خوبی از برنامه نویسی API سطح بالا دارد، مانند آنچه در یک برنامه Node معمولی مشاهده می کنید، و همچنین مقداری کد Johnny Five برای کمک به رابط با صفحه نمایش LCD. من فکر کردم که به عنوان یک مثال خوب به شما نشان می دهد که چگونه دو پلتفرم بسیار متفاوت می توانند با هم کار کنند.
پروژه ای که من ایجاد کردم 10 لینک برتر را از هکر نیوز بازیابی می کند و آنها را نمایش می دهد روی یک صفحه نمایش LCD که توسط Arduino Uno کنترل می شود.
من با استفاده از request-promise
کتابخانه و اخبار هکر API برای بازیابی عناوین 10 پیوند برتر (یا به قول آنها “داستان”) که به عنوان یک آرایه برگردانده می شود.
var util = require('util');
var Promise = require('bluebird');
var request = require('request-promise');
var topPostsLink = 'https://hacker-news.firebaseio.com/v0/topstories.json';
var storyLinkTemplate = 'https://hacker-news.firebaseio.com/v0/item/%s.json';
var retrieveHnTitles = function() {
return request(topPostsLink).then(function(json) {
var ids = JSON.parse(json);
ids = ids.splice(0, 10);
var storyRequests = ();
ids.forEach(function(id) {
var storyUrl = util.format(storyLinkTemplate, id);
storyRequests.push(request(storyUrl));
});
return Promise.all(storyRequests);
}).then(function(stories) {
stories = stories.map(JSON.parse);
var titles = stories.map(function(story) {
return story.title;
});
return titles;
}).catch(console.error);
};
هنگامی که رویداد برد آماده است، تابع فوق را فراخوانی میکنیم، رشتهای را میسازیم که شامل تمام عناوین HN است که به تازگی دریافت کردهایم و سپس آن را با استفاده از توابع داخلی Johnny-Five LCD به LCD ارسال میکنیم.
board.روی('ready', function() {
var lcd = new five.LCD({
controller: 'PCF8574'
});
retrieveHnTitles().then(function(titles) {
var titlesString = '';
for (var i = 0; i < titles.length; i++) {
var title = titles(i);
var spaces = '';
if (title.length > 32) title = title.substring(0, 29) + '...';
if (title.length < 32) spaces = new Array(32 - title.length + 1).join(' ');
titlesString += title + spaces;
}
lcd.autoscroll().print(titlesString);
});
});
را autoscroll()
تابع در اینجا بسیار راحت است زیرا ما یک رشته طولانی داریم. 10 عنوان داستان برتر باید روی صفحه شما حرکت کنند، تنها با یک داستان روی صفحه نمایش در یک زمان
3 عنوان پیوند برتر HN از 9/19/15.
اگر بخواهم تلاش بیشتری برای پروژه انجام دهم، کاری که ممکن است انجام دهم این است که هر 5 یا 10 دقیقه با استفاده از cron
کتابخانه به این ترتیب شما مجبور نیستید آن را به صورت دستی اجرا کنید (که نوعی هدف را شکست می دهد). یکی دیگر از کارهایی که ممکن است بخواهید انجام دهید این است که تعداد رأیهای مثبت هر پیوند یا شاید تعداد نظرات را نشان دهید. اما در این صورت ممکن است نیاز به یک صفحه نمایش بزرگتر داشته باشید 🙂
عیب یابی
هر زمان که با سخت افزار برنامه نویسی می کنید، کارها همیشه به آرامی یک سرور یا برنامه دسکتاپ سطح بالاتر پیش نمی روند (و حتی پس از آن هم عیب یابی زیادی وجود دارد)، بنابراین فکر کردم کمکی به شما ارائه کنم. به رایج ترین مشکلاتی که مردم با آن روبرو هستند. اگر در اولین اجرای برنامه با خطایی مواجه شدید (نمیتوانید وصل شوید یا زمان اتصال قطع میشود)، یکی از این راهحلها را امتحان کنید.
آیا شما سفت افزار را بارگذاری کردید؟
به همان سادگی که به نظر می رسد، من خودم چندین بار مرتکب این اشتباه شده ام. من سعی می کنم یک برنامه Johnny Five را اجرا کنم، فقط برای اینکه متوجه شوم که متصل نمی شود زیرا فراموش کردم سیستم عامل Firmata را روی آردوینو بارگذاری کنم. هنگام جابجایی بین پروژهها، اغلب با این موضوع مواجه میشوم، و معمولاً وقتی نمیتوانید با دستگاهی وصل شوید، این اولین چیزی است که باید در نظر بگیرید.
آیا سخت افزار شما پشتیبانی می شود؟
اولین باری که سعی کردم از Johnny Five استفاده کنم، از Arduino Duemilanove استفاده می کردم و مدام با خطای “Connection timed out” مواجه می شدم. پس از عیب یابی اولیه، در نهایت لیست سازگاری را بررسی کردم تا ببینم Duemilanove در لیست نیست. فکر می کردم از آنجایی که بسیار شبیه Uno است کار می کند، اما ظاهراً نه.
آیا از ویندوز استفاده می کنید؟
بله ویندوز است با این حال، گاهی اوقات سیستم های ویندوز در کامپایل وابستگی های بومی شکست می خورند. برای رفع این مشکل، سعی کنید Johnny Five را با دستور زیر نصب کنید:
npm install johnny-five --msvs_version=2012
خودتان آن را بسازید
این یک پروژه نسبتاً ارزان برای ساختن خودتان است. در اینجا لیست قطعات هر چیزی که من استفاده کردم است:
- آردوینو اونو
- صفحه نمایش LCD (2×16، I2C)
- سیم دوپونت نر به ماده
- کابل USB Type-A به Type-B
احتمالاً میتوانید بدون خرید سیمهای Dupont از آنجا دور شوید، به شرطی که سیم ساده دیگری در اطرافتان باشد و راهی برای جدا کردن پوشش پلاستیکی داشته باشید. روی هر پایان من فقط اینها را فهرست کردم زیرا راحت تر هستند.
شما همچنین می توانید از یک صفحه نمایش LCD متفاوت استفاده کنید، اما تنها کنترلرهای PCF8574، PCF8574A و JHD1313M1 I2C به موازات به طور رسمی توسط Johnny Five پشتیبانی می شوند. بسته به روی در پیاده سازی I2C، سایر کنترلرها نیز ممکن است کار کنند.
نتیجه
امیدواریم از این مقاله و نمونههایی که نشان دادهام، ایده بهتری در مورد آنچه با استفاده از جانی فایو/جاوا اسکریپت با آردوینو، رزبری پای، بیگلبون و غیره ممکن است، داشته باشید. با کتابخانه هایی مانند Johnny Five و پروتکل Firmata می توانید به راحتی با استفاده از ابزارهای آشنا و نمونه های اولیه حتی سریعتر از قبل غوطه ور شوید.
حتما به جانی فایو بروید مستندات برای یادگیری بیشتر چند آموزش عالی و راهنمای عیب یابی برای زمانی که گیر می کنید وجود دارد.
آیا پروژه یا نمونه ای وجود دارد که بخواهید با جانی فایو ساخته شده باشد؟ در نظرات به ما اطلاع دهید!
(برچسبها برای ترجمه)# روش
منتشر شده در 1403-01-30 01:24:25