Автор оригинала: Scott Robinson.
Вступление
Как вы, наверное, знаете (или услышали), Arduino – отличная платформа для изучения и взлома на электронику, которая в противном случае была бы очень трудно использовать для новичка. Это отличное введение в программирование, электронику и инженеров в целом. Но даже тогда, так как большая часть улучшения, поскольку Arduino является традиционным способом работы с электроникой, он все еще может быть немного пугающим написанием C-подобного кода. Так что, если вы можете использовать язык более высокого уровня, например, JavaScript?
С языками, как JavaScript, вам не нужно беспокоиться о низкоуровневых деталях вещей, таких как указатели и распределение памяти, которые могут быть запутаны для начинающих. Вместо этого вы можете сосредоточиться на логике приложения и использовать сотни тысяч библиотек открытых источников, чтобы дать вашему проекту всевозможные функциональные возможности только с несколькими строками кода.
Джонни Пять
Джонни пять Библиотека – это то, что позволяет вам контролировать Arduino (или Raspberry Pi, Beaglebone, Photon и многое другое) с JavaScript.
Теперь, как много хороших вещей, есть маленький улов. Код JavaScript на самом деле не работает непосредственно на Arduino, он на самом деле должен работать на хост-компьютере и подключить его инструкции во время выполнения на устройстве через USB-кабель или какой-то другой последовательный протокол/среда. Для некоторых приложений это выключатель сделки, поскольку они не могут иметь этот физический привязку на их проекте (например, на беспилоте), но для других это может быть не имеет большого значения. Например, если все, что вам нужно сделать, это управлять роботизированной рукой на вашем столе, Johnny Five может быть просто идеально подходит. В конце концов, это основное внимание уделяется робототеке, следовательно, Имя Отказ
Библиотека работает, используя преимущества Протокол фирмы , который является способом общения с микроконтроллерами из программного обеспечения на хост-компьютере (или смартфоне/планшете и т. Д.). Это означает, что вы можете запустить все логику программы на своем компьютере, но в любое время вам нужно сделать любой IO на устройстве, как прочитать PIN-код GPIO, отправлять данные через SPI и т. Д., Программа настольных компьютеров будет использовать протокол Freshata Arduino для выполнения конкретного IO.
Например, код ниже, например, просто мигает светодиод на PIN 13. Итак, единственный раз, когда он общается с Arduino, является когда он хочет включить или выключить светодиод, в противном случае Arduino просто сидит и ждет, чтобы получить инструкции от хоста компьютер.
var five = require('johnny-five'); var board = new five.Board(); board.on('ready', function() { var led = new five.Led(13); led.blink(500); });
Чтобы запустить его, вы должны сначала загрузить код Arduino Freshata на доску. Сделайте это, открывая arduino IDE, а затем нажав Файл-> Примеры-> Фирмы-> StandardFirmata Отказ Это откроет код в окне редактора. Наконец (при условии, что ваша доска подключена через USB), нажмите Загрузить Отказ
Чтобы запустить доклад Johnny-Five из кода, перейдите к каталогу проекта, убедитесь, что вы запускаете NPM установить
, а потом беги Узел index.js
При условии, что файл называется index.js
Отказ
Приятная вещь о Джонни пятый в том, что в типичном узле мода есть библиотека для всего. Они уже написали весь код, который вам нужно делать типичные задачи робототехники, таких как поворотные двигатели, датчики чтения входных данных, интерфейс с устройствами связи и многое другое. Вы можете найти огромный список полезных примеров здесь Отказ
Пример: Johnny Five + Arduino + Hacker News
В этом примере есть приятное сочетание программирования API высокого уровня, как вы увидите в типичном приложении узла, а также для некоторых Johnny Five Code, чтобы помочь интерфейсу с ЖК-экраном. Я думал, что это будет служить хорошим примером, чтобы показать вам, как две очень разные платформы могут работать вместе.
Проект, который я создал, извлекает 10 лучших ссылок от Hacker News и отображает их на ЖК-экране, управляемом Arduino Uno.
Я начал с помощью Запрос-обещание
Библиотека и хакерские новости ‘ 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, которую мы только что получили, а затем отправьте его на ЖК-дисплей, используя встроенные функции ЖК-дисплея Джонни.
board.on('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
библиотека. Таким образом, вам не нужно бегать вручную (каким образом поражает цель). Другое, что вы, возможно, захотите сделать, это показать количество UPVOTES, которые имеет каждую ссылку, или, возможно, количество комментариев. Но тогда вам может потребоваться увеличить экран:)
Поиск проблемы
Всякий раз, когда вы программируете с аппаратным обеспечением, все не всегда идут плавно, поскольку они делают с сервером более высокого уровня или настолько на рабочем столе (и даже то, что есть много устранения неисправностей), поэтому я подумал, что это будет полезно предоставить некоторую помощь к наиболее распространенным проблемам людей лицом. Если вы получаете ошибку при первом запуске программы (не можете подключиться или время ожидания подключения), затем попробуйте одно из этих решений.
Вы загрузили прошивку?
Так же просто, как это звучит, я сделал эту ошибку несколько раз сам. Я бы попытался запустить приложение Johnny Five, просто чтобы понять, что он не будет подключаться, потому что я забыл загрузить прошивку фирмы на Arduino. При частоте переключения между проектами я бегу к этому много, и обычно это первое, что следует учитывать, когда вы не можете подключиться с устройством.
Ваше оборудование поддерживается?
Первый раз, когда я когда-либо пытался использовать Johnny Five I, я использовал Arduino Duemilanove, и я продолжал получать ошибку «Connection Out Out». После некоторого основного устранения неполадок я наконец проверил список совместимости, чтобы увидеть, что Duemilanove не был перечислен. Я думал, так как это так похоже на, что он будет работать, но видимо не.
Вы используете Windows?
Да, окна это Поддерживается, однако, иногда системы Windows не смогут скомпилировать собственные зависимости. Чтобы исправить это, попробуйте установить Johnny Five со следующей командой:
npm install johnny-five --msvs_version=2012
Построить это сами
Это довольно дешевый проект, чтобы построить себя. Вот список запчастей все, что я использовал:
- Arduino uno.
- ЖК-экран (2×16, I2C)
- Провода-дюпон-дюпон
- USB Type-A to Type-b Кабель
Возможно, вы можете уйти, не покупая провода DuPont до тех пор, пока у вас есть другой простой проход, сидящий вокруг, и способ прокрутить пластиковую корпус на каждом конце. Я только что перечислил это, так как они удобнее.
Вы также можете использовать другой ЖК-экран, но только PCF8574, PCF8574A и JHD1313M1 I2C-параллельные контроллеры официально поддерживаются Johnny Five. В зависимости от реализации I2C и другие контроллеры могут работать также.
Заключение
Надеюсь, из этой статьи и примеры, которые я показал, что у вас есть лучшая идея относительно того, что возможно, используя Johnny Five/JavaScript с Arduino, Raspberry Pi, Beaglebone и т. Д. Конечно, C/C ++ может доминировать в поле встроенной электроники, но С библиотеками, такими как Джонни Пять и протокол Firtata, вы можете легко погрузиться в использовании знакомых инструментов и прототипов даже быстрее, чем раньше.
Обязательно отправляйтесь в Джонни пять Документация Узнать больше. Есть несколько отличных учебных пособий и устранения неисправностей, когда вы застреваете.
Есть ли проекты или примеры, которые вы хотели бы видеть с Джонни Пять? Дайте нам знать об этом в комментариях!