C贸mo programar un Arduino con JavaScript

    Introducci贸n

    Como probablemente sepa (o haya escuchado), Arduino es una gran plataforma para aprender y piratear la electr贸nica que de otra manera ser铆a muy dif铆cil de usar para un principiante. Es una gran introducci贸n a la programaci贸n, la electr贸nica y la ingenier铆a en general. Pero incluso entonces, a pesar de que Arduino es una mejora con respecto a la forma tradicional de trabajar con la electr贸nica, todav铆a puede ser un poco abrumador escribir el c贸digo tipo C. Entonces, 驴qu茅 pasar铆a si pudiera utilizar un lenguaje de nivel superior como JavaScript en su lugar?

    Con lenguajes como JavaScript, no necesita preocuparse por los detalles de bajo nivel de cosas como punteros y asignaci贸n de memoria, que pueden ser confusos para los principiantes. En cambio, puede concentrarse en la l贸gica de la aplicaci贸n y utilizar los cientos de miles de bibliotecas de c贸digo abierto para brindarle a su proyecto todo tipo de funcionalidad con solo unas pocas l铆neas de c贸digo.

    Johnny cinco

    los Johnny cinco La biblioteca es lo que le permite controlar un Arduino (o Raspberry Pi, Beaglebone, Photon y muchos m谩s) con JavaScript.

    Ahora, como muchas cosas buenas, hay una peque帽a trampa. El c贸digo JavaScript en realidad no se ejecuta directamente en Arduino, en realidad debe ejecutarse en una computadora host y comunicar sus instrucciones en tiempo de ejecuci贸n al dispositivo a trav茅s de un cable USB o alg煤n otro protocolo / medio en serie. Para algunas aplicaciones, esto es un factor decisivo ya que no pueden tener esta atadura f铆sica en su proyecto (como en un dron), pero para otras puede que no sea un gran problema. Por ejemplo, si todo lo que necesita hacer es controlar un brazo rob贸tico en su escritorio, Johnny Five podr铆a ser el ajuste perfecto. Despu茅s de todo, su enfoque principal es la rob贸tica, por lo tanto el nombre.

    La biblioteca funciona aprovechando las Protocolo Firmata, que es una forma de comunicarse con microcontroladores desde el software en una computadora host (o tel茅fono inteligente / tableta, etc.). Esto significa que puede ejecutar toda la l贸gica del programa en su computadora, pero cada vez que necesite hacer cualquier IO en el dispositivo, como leer un pin GPIO, enviar datos a trav茅s de SPI, etc., el programa de escritorio utilizar谩 el protocolo Firmata para indicar el Arduino para realizar el IO espec铆fico.

    El c贸digo a continuaci贸n, por ejemplo, simplemente hace parpadear el LED en el pin 13. Entonces, la 煤nica vez que se comunica con el Arduino es cuando quiere encender o apagar el LED; de lo contrario, el Arduino simplemente se sienta all铆 y espera recibir instrucciones del host. computadora.

    var five = require('johnny-five');
    
    var board = new five.Board();
    
    board.on('ready', function() {
    	var led = new five.Led(13);
    	led.blink(500);
    });
    

    Para ejecutarlo, primero debe cargar el c贸digo Arduino Firmata en la placa. Haga esto abriendo el IDE de Arduino y luego haciendo clic en Archivo-> Ejemplos-> Firmata-> StandardFirmata. Esto abrir谩 el c贸digo en la ventana del editor. Finalmente (asumiendo que su placa est谩 conectada a trav茅s de USB), haga clic en Subir.

    Para ejecutar la parte Johnny-Five del c贸digo, navegue hasta el directorio del proyecto, aseg煤rese de haber ejecutado npm instally luego ejecutar node index.js, asumiendo que el archivo se llama index.js.

    Lo bueno de Johnny Five es que, al estilo t铆pico de Node, hay una biblioteca para casi todo. El autor ya ha escrito todo el c贸digo que necesita para realizar tareas t铆picas de rob贸tica, como girar motores, leer entradas de sensores, interactuar con dispositivos de comunicaci贸n y m谩s. Puede encontrar una gran lista de ejemplos 煤tiles aqu铆.

    Ejemplo: Johnny Five + Arduino + Hacker News

    Este ejemplo tiene una buena combinaci贸n de programaci贸n API de alto nivel, como ver铆a en una aplicaci贸n Node t铆pica, as铆 como tambi茅n un c贸digo Johnny Five para ayudar a la interfaz con una pantalla LCD. Pens茅 que servir铆a como un buen ejemplo para mostrarte c贸mo dos plataformas muy diferentes pueden trabajar juntas.

    El proyecto que cre茅 recupera los 10 enlaces principales de Hacker News y los muestra en una pantalla LCD controlada por un Arduino Uno.

    Empec茅 usando el request-promise biblioteca y Hacker News ‘ API para recuperar los t铆tulos de los 10 enlaces principales (o ‘historias’ como los llaman), que se devuelven como una matriz.

    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);
    };
    

    Cuando se activa el evento de la placa ‘listo’, llamamos a la funci贸n anterior, construimos una cadena que contiene todos los t铆tulos de HN que acabamos de recibir y luego la enviamos a la pantalla LCD utilizando las funciones incorporadas de la pantalla LCD Johnny-Five.

    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);
    	});
    });
    

    los autoscroll() La funci贸n es muy conveniente aqu铆 ya que tenemos una cadena tan larga. Los 10 t铆tulos de historias principales deben desplazarse por la pantalla, con solo una historia en la pantalla a la vez.

     

    Los 3 principales t铆tulos de enlaces de HN del 19/9/15.

    Si tuviera que esforzarme m谩s en el proyecto, lo siguiente que podr铆a hacer es programar esto para que se ejecute cada 5 o 10 minutos usando el cron biblioteca. De esa manera, no tiene que ejecutarlo manualmente (lo que frustra el prop贸sito). Otra cosa que podr铆a querer hacer es mostrar la cantidad de votos a favor que tiene cada enlace, o tal vez la cantidad de comentarios. Pero entonces es posible que deba obtener una pantalla m谩s grande 馃檪

    Soluci贸n de problemas

    Cada vez que programa con hardware, las cosas no siempre van tan bien como con un servidor de nivel superior o una aplicaci贸n de escritorio (e incluso entonces hay una gran cantidad de soluci贸n de problemas), por lo que pens茅 que ser铆a 煤til brindar ayuda. a los problemas m谩s comunes que enfrentan las personas. Si recibe un error cuando ejecuta el programa por primera vez (no se puede conectar o se agota el tiempo de espera de la conexi贸n), pruebe una de estas soluciones.

    驴Carg贸 el firmware?

    Tan simple como suena, he cometido este error varias veces. Intentar铆a ejecutar una aplicaci贸n Johnny Five, solo para darme cuenta de que no se conecta porque olvid茅 cargar el firmware Firmata en el Arduino. Cuando cambio entre proyectos a menudo, me encuentro con esto mucho, y generalmente es lo primero que se debe considerar cuando no se puede conectar con un dispositivo.

    驴Su hardware es compatible?

    La primera vez que intent茅 usar Johnny Five estaba usando un Arduino Duemilanove y segu铆a recibiendo un error de “Tiempo de conexi贸n agotado”. Despu茅s de solucionar algunos problemas b谩sicos, finalmente verifiqu茅 la lista de compatibilidad para ver que Duemilanove no estaba en la lista. Pens茅 que, dado que es tan similar al Uno, funcionar铆a, pero aparentemente no.

    驴Est谩s usando Windows?

    S铆, Windows es compatible, sin embargo, a veces los sistemas Windows no compilan las dependencias nativas. Para solucionar esto, intente instalar Johnny Five con el siguiente comando:

    npm install johnny-five --msvs_version=2012
    

    Constr煤yalo usted mismo

    Este es un proyecto bastante barato de construir usted mismo. Aqu铆 est谩 la lista de piezas de todo lo que us茅:

    • Arduino Uno
    • Pantalla LCD (2×16, I2C)
    • Cables Dupont macho a hembra
    • Cable USB tipo A a tipo B

    Probablemente pueda salirse con la suya sin comprar los cables Dupont siempre que tenga alg煤n otro cable simple alrededor y una forma de pelar la carcasa de pl谩stico en cada extremo. Acabo de enumerarlos porque son m谩s convenientes.

    Tambi茅n puede usar una pantalla LCD diferente, pero solo los controladores PCF8574, PCF8574A y JHD1313M1 I2C a paralelo son oficialmente compatibles con Johnny Five. Dependiendo de la implementaci贸n de I2C, tambi茅n pueden funcionar otros controladores.

    Conclusi贸n

    Con suerte, a partir de este art铆culo y los ejemplos que he mostrado, tienes una mejor idea de lo que es posible usar Johnny Five / JavaScript con Arduino, Raspberry Pi, Beaglebone, etc. Claro, C / C ++ puede dominar el campo de la electr贸nica embebida, pero con bibliotecas como Johnny Five y el protocolo Firmata, puede sumergirse f谩cilmente en el uso de herramientas familiares y prototipos incluso m谩s r谩pido que antes.

    Aseg煤rate de dirigirte a Johnny Five documentaci贸n aprender m谩s. Hay algunos excelentes tutoriales y gu铆as de soluci贸n de problemas para cuando se quede atascado.

    驴Hay alg煤n proyecto o ejemplo que le gustar铆a que se hiciera con Johnny Five? 隆H谩znoslo saber en los comentarios!

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *