Начните работу с 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

Руководство Arduino Experimentr для NodeJS

Рик Уолдрон Github REPO