On Github acacha / javascript-bots
Sergi Tur Badenas / @acacha1 Temes: Black - White (default) - League - Sky - Simple Moon
Arduino és una plataforma open-source per a la electrònica amb un hardware i software fàcil d'utilitzar:
Un microcontrolador és un petit i simple computador.
$ sudo apt-get install gcc-avr avr-libc $ cd && mkdir arduino && cd arduino $ wget https://downloads.arduino.cc/arduino-1.6.6-linux64.tar.xz $ sudo apt-get install xz-utils $ tar xf arduino-1.6.6-linux64.tar.xz $ cd arduino-1.6.6 $ sudo usermod -aG dialout $ ./arduino
// the setup function runs once when you press reset or power the board
void setup() {
	// initialize digital pin 13 as an output.
	pinMode(13, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
	digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
	delay(1000);              // wait for a second
	digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
	delay(1000);              // wait for a second
}
					Hardware Open Source i electrònica fàcil https://www.makeblock.es/
Basada en Arduino Uno. Me orion
vs
Mbot robot educacional!
Mcore és la placa integrada al robot Mbot
Permet connexió USB o per bluetooth o Wifi (mochila wifi) amb mòduls intercanviables
Mòdul per a Scratch. Programació per blocs
No està per Linux però funciona en Wine (tot i que no he aconseguit fer anar ports sèrie). Es pot copiar el codi a Arduino IDE i instal·lar
Requeriments per poder programar la IoT amb Javascript:
Microcontroladors amb firmware de propòsit general (Firmata o similars). Executar Javascript des de fora navegadors: Node.js. També podem utilitzar Node.js des del navegador amb Browserify. Frameworks per facilitar la programació: Jhonny-five, nodebots, Cylon.js ... Connectar host amb microcontrolador via connexió sèrie. La comunicació sèrie pot ser a través d'un tethering, USB, WIFI/Bluetooth...$ cd
$ wget https://nodejs.org/dist/v4.4.4/node-v4.4.4-linux-x64.tar.xz
$ tar xvzf node-v4.4.4-linux-x64.tar.gz
$ editor .bashrc
export PATH=~/node-v4.4.4-linux-x64/bin:${PATH}
$ bash
$ which npm
/home/sergi/node-v4.4.4-linux-x64/bin/npm
$ which node
/home/sergi/node-v4.4.4-linux-x64/bin/node
$ npm -v
2.14.7
$ node -v
v4.4.4
					$ npm install cylon cylon-firmata
var Cylon = require('cylon');
Cylon.robot({
	connections: {
	arduino: { adaptor: 'firmata', port: '/dev/ttyACM0' }
},
devices: {
	led: { driver: 'led', pin: 13 }
},
work: function(my) {
	every((1).second(), my.led.toggle);
}
}).start();
					/dev/ttyS0 -> serial normal /dev/ttyUSB0 -> Serial USB. Bluetooth emparellar amb: $ sudo apt-get install blueman $ blueman-manager /dev/rfcomm0 -> Serial Bluetooth
Firmware multipropòsit que permet executar software al microcontrolador des de fora del microcontrolador. No cal actualitzar/instal·lar firmware al microcontrolador per cada programa que fem.
Protocol utilitzat per accedir a microcontroladors executant codi des d'un ordinador.
El programa JavaScript s'executa al host machine utilitzant Node.js. El programa transmet operacions bàsiques de I/O al microcontrolador utilitzant el protocol Firmata a través d'una connexió sèrie.
Firmata converteix el microcontrolador en un thin client.
El podem instal·lar desde la IDE d'Arduino
Programa per testejar protocol firmata i dispositius amb el firmware Firmata instal·lat. Firmata test
$ wget http://www.pjrc.com/teensy/firmata_test/firmata_test.64bit_2 $ sudo chmod +x firmata_test.64bit_2 $ ./firmata_test.64bit_2
Board preparada! Ara podem utilitzar Javascript per interactuar amb el microcontrolador. De fet podem utilitzar múltiples idiomes de programació com Python, Java, PHP vegeu Firmata client libraries.
JavaScript Robotics i IoT programming framework. Creat per Rick Waldron. Requeriments:
$ npm install johnny-five
Codi a github https://github.com/acacha/javascript-bots: blink_led_j5.js
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
	var led = new five.Led(13);
	led.blink(500);
});
					 Més exemples$ node blink_led_j5.js 1463669542289 Device(s) /dev/ttyUSB1 1463669542296 Connected /dev/ttyUSB1 1463669545805 Repl Initialized
new five.Board({ port: "/dev/rfcomm0" });
$sudo node blink_led_j5_bt.js
1463669857246 Connected /dev/rfcomm0
				var five = require("johnny-five");
var max_speed_l = 255;
var max_speed_r = 255;
// set up the input
var stdin = process.openStdin();
require('tty').setRawMode(true);
var board = new five.Board({port: process.argv[2]});
var l_motor = r_motor = null;
board.on("ready", function(err) {
	if (err){
		console.log(err);
	return;
}
l_motor = new five.Motor({pins: {pwm: 6, dir: 7}});
r_motor = new five.Motor({pins: {pwm: 5, dir: 4}});
console.info("Board connected. Robot set up. LRUD to control");
});
stdin.on('keypress', function(chunk, key) {
	// process the keypresses
  if (key) {
    switch (key.name) {
      case "up":
        l_motor.reverse(max_speed_l);
        r_motor.forward(max_speed_r);
        break;
      case "down":
        r_motor.reverse(max_speed_r);
        l_motor.forward(max_speed_l);
        break;
      case "left":
        l_motor.forward(max_speed_l);
        r_motor.forward(max_speed_r);
        break;
      case "right":
        r_motor.reverse(max_speed_r);
        l_motor.reverse(max_speed_l);
      break;
      case "space":
        l_motor.stop();
        r_motor.stop();
        break;
}}});
				$ sudo su cd /home/sergi/Code/Mbot/mbot_nodebots/examples nvm install v0.12.7 nvm list v0.12.7 nvm use v0.12.7 node -v v0.12.7 rfcomm connect 0 // Només si encara no teniu connectat el dispositiu per bluetooth. Potser ja l'heu connectat utilitzant les eines de Gnome per bluetooth o Blueman manager node motors.js /dev/rfcomm0
https://github.com/rwaldron/johnny-five/blob/master/docs/repl.md
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
	console.log("Ready event. Repl instance auto-initialized!");
	var led = new five.Led(13);
	led.on();
	this.repl.inject({
		// Allow limited on/off control access to the
		// Led instance from the REPL.
		on: function() {
		  led.on();
		},
		off: function() {
		  led.off();
		}
	});
});
>> on() // will turn on the LED // or >> off() // will turn off the LED
$ npm install socket.io express --save URL: http://localhost:3000
// server.js
var express = require('express');
var app = express();
var httpServer = require("http").createServer(app);
var five = require("johnny-five");
var io=require('socket.io')(httpServer);
var port = 3000;
app.use(express.static(__dirname + '/public'));
app.get('/', function(req, res) {
	res.sendFile(__dirname + '/public/index.html');
});
httpServer.listen(port);
console.log('Server available at http://localhost:' + port);
var led;
//Arduino board connection
var board = new five.Board();
	board.on("ready", function() {
	console.log('Arduino connected');
	led = new five.Led(13);
});
//Socket connection handler
io.on('connection', function (socket) {
	console.log(socket.id);
	socket.on('led:on', function (data) {
		led.on();
		console.log('LED ON RECEIVED');
	});
	socket.on('led:off', function (data) {
		led.off();
		console.log('LED OFF RECEIVED');
	});
});
console.log('Waiting for connection');
				Al client (navegador/pàgina web o app standalone node.js) només cal executar:
<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
var socket = io('http://localhost:3000');
socket.emit('led:on');
socket.emit('led:off');
				Permeten treballar de forma asíncrona
/**
  * Go Forward
  */
var go = function(dir,time) {
	return new Promise( function resolve) {
	 //go code here
	});
	this.repl.inject({
	 go: go
	});
};