Начните работу с Johnny-Five на Arduino — #arduSerie 21
Вот Джонни… Пять! Перейти к коду: github repo
Это открытый исходный код и очень простой API, напоминающий JQuery, так что вполне вероятно, что он уже покажется вам очень знакомым.
Я не буду вдаваться в подробности, как начать Johnny-Five, так как на официальном сайте это сделать очень просто.
Johnny-Five — это платформа JavaScript Robotics & IoT. Выпущенный Bocoup в 2012 году, Johnny-Five поддерживается сообществом увлеченных разработчиков программного обеспечения и инженеров по оборудованию. Более 75 разработчиков внесли свой вклад в создание надежной, расширяемой и компонуемой экосистемы.
Давайте сразу перейдем к коду (он тоже есть на Github):
Но сначала загрузите Firmata на свой Arduino. Вам понадобится StandardFirmata, которую довольно легко настроить.
Firmata понимает, как связываться с компьютером и обеспечивает двустороннюю последовательную связь с меньшими трудностями.
Вам нужно установить Node.js и получить Johnny-Five lib:
Теперь коды:
//helloBOARD_00.js var five = require("johnny-five"); var myBoard; //myBoard = new five.Board(); myBoard = new five.Board( { port: "COM10" } ); myBoard.on("ready", function() { console.log('Arduino is ready!'); }); //helloLED_00.js var five = require('johnny-five'); five.Board( { port: "COM10" } ).on("ready", function(){ console.log('Board ready'); five.Led(13).strobe(200); }) //helloLED_01.js // JavaScript Document var five = require('johnny-five'), board = new five.Board({ port: "COM10" }), led, toggleState = false; board.on("ready", function(){ console.log('Board ready!!!'); led=new five.Led(13); setInterval(toggleLED,400); function toggleLED(){ toggleState =! toggleState; if (toggleState) led.on(); else led.off(); } }); console.log("\n Waiting for device to connect..."); //helloSERVO_00 var five = require("johnny-five"); var board = new five.Board({ port: "COM3" }); board.on("ready", function() { var servo = new five.Servo(9); // Sweep from 0-180 and repeat. servo.sweep(); }); //helloSERVO_01.js var five = require("johnny-five"); var board = new five.Board({ port: "COM3" }); board.on("ready", function() { var servo_tilt = new five.Servo(10); servo_tilt .sweep({ range: [45, 135] }); // servo_tilt .sweep({ // range: [0, 30], // interval: 100, // }); // servo_tilt .sweep({ // range: [0, 60], // interval: 100, // step: 10 // }); // var servo_pan = new five.Servo(9); // servo_pan.sweep({ // range: [0, 180], // interval: 10000, // }); }); //helloSERVO_02.js var five = require("johnny-five"); var board = new five.Board({ port: "COM3" }); board.on("ready", function() { var servo = new five.Servo({ pin: 9, startAt: 1 }); // Set the horn to 0degrees //servo.to(180); // Angle change takes 1000ms to complete //servo.to(180, 10000); // Angle change takes 10000ms to complete over 100 steps //servo.to(180, 10000, 10); servo.to(180,10000,1000); }); //helloSERVO_03.js var five = require("johnny-five"); var board = new five.Board( { port: "COM3" } ); board.on("ready", function() { var range = [10, 180]; // Servo to control panning var pan = new five.Servo({ pin: 9, range: range, center: true }); // Servo to control tilt var tilt = new five.Servo({ pin: 10, range: range, center: true }); // Joystick to control pan/tilt // Read Analog 0, 1 // Limit events to every 50ms var joystick = new five.Joystick({ pins: ["A0", "A1"], freq: 100 }); joystick.on("change", function() { tilt.to(five.Fn.scale(this.y, -1, 1, 0, 170)); pan.to(five.Fn.scale(this.x, -1, 1, 0, 170)); }); });
Примечание: NodeBots и Johnny-five — очень модные слова в Интернете. Это делает процесс программирования аппаратных схем очень похожим на программирование современной веб-страницы.
Возможность использования возможностей JavaScript (и, соответственно, возможностей Интернета!) позволяет вам мыслить более творчески, особенно если вы пришли из области веб-разработки.
Сейчас я покажу вам, как я научился справляться с Johnny-Five!!!!
Разберем код RGB:
Сторона сервера:
// JavaScript SERVER 1) five.Board().on('ready', func() { ... }); 2) five.Board().on('ready', func() { console.log('Arduino is ready.'); .... }); 3) five.Board().on('ready', func() { console.log('Arduino is ready.'); io.on('connection', func(client) { ... }); }); 4) five.Board().on('ready', func() { console.log('Arduino is ready.'); io.on('connection', func(client) { client.on('join', function(handshake) { }); ... }); }); 5) five.Board().on('ready', func() { console.log('Arduino is ready.'); io.on('connection', func(client) { client.on('join', function(handshake) { }); client.on('action', func(data) { .... }); }); }); 6) five.Board().on('ready', func() { console.log('Arduino is ready.'); io.on('connection', func(client) { client.on('join', function(handshake) { }); client.on('action', func(data) { client.emit('action', data); client.broadcast.emit('action', data); }); }); });
Теперь клиентская сторона:
// JavaScript CLIENT 1) (function() { ... }()); 2) (function() { var socket = io.connect(window.location.hostname + ':' + 3000); var var1 = document.getElementById('var1'); ... ... }()); 3) (function() { var socket = io.connect(window.location.hostname + ':' + 3000); var var1 = document.getElementById('var1'); ... function emitValue(arg, e) { socket.emit('action', { arg: action, value: e.target.value }); } ... }()); 4) (function() { var socket = io.connect(window.location.hostname + ':' + 3000); var var1 = document.getElementById('var1'); ... function emitValue(color, e) { socket.emit('action', { arg: action, value: e.target.value }); } var1.addEventListener('action', emitValue.bind(null, 'var1')); ... ... }()); 5) (function() { var socket = io.connect(window.location.hostname + ':' + 3000); var var1 = document.getElementById('var1'); ... function emitValue(color, e) { socket.emit('action', { arg: action, value: e.target.value }); } var1.addEventListener('action', emitValue.bind(null, 'var1')); ... socket.on('connect', function(data) { socket.emit('join', 'Client is connected!'); }); ... }()); 6) (function() { var socket = io.connect(window.location.hostname + ':' + 3000); var var1 = document.getElementById('var1'); ... function emitValue(color, e) { socket.emit('action', { arg: action, value: e.target.value }); } var1.addEventListener('action', emitValue.bind(null, 'var1')); ... socket.on('connect', function(data) { socket.emit('join', 'Client is connected!'); }); socket.on('var1', function(data) { var var1 = data.var1; document.getElementById(var1).value = data.value; }); }());
Что вы можете с этим сделать:
Эта страница hackster.io посвящена проектам, нацеленным на j5. Посетите и убедитесь в этом сами!!!
Скачать все архивы этого проекта
Джонни-Пять Мантра:
Будьте максимально простыми и очевидными — Рик Уолдрон rwaldron
Ссылки:
javascript-arduino-servo-control-tutorial