========== Espruino ========== -------------------------------- Javascript su microcontrollore -------------------------------- Chi sono -------- Elena “of Valhalla” Grandi * Nella comunità del Software Libero dal ~2000 * Debian Contributor * Usa arduino dal ~2010 * Appassionata di Hardware Libero Gruppo Linux Como ----------------- .. image:: img/logo.pdf :align: center http://www.gl-como.it Incontri aperti al pubblico in Como tutti i giovedì sera Cos'è Espruino -------------- * Famiglia di schede a microcontrollore * Interprete javascript per microcontrollori * IDE integrata nel browser * Comunità: http://forum.espruino.com/ * Open Hardware e Free Software Free Software ------------- .. image:: img/floss.pdf :align: center Open Hardware ------------- .. image:: img/oshw-logo-400-px.png :align: center Famiglia di schede: espruino ed espruino pico --------------------------------------------- .. image:: img/all2.jpg :align: center http://www.espruino.com/press/ Famiglia di schede: puck.js --------------------------- .. image:: img/parts_side.jpg :align: center http://www.espruino.com/press/ Interprete javascript --------------------- * ~ 95% compatibile con javascript “normale” * su schede a partire da 128kB Flash 8kB RAM * microcontrollori 32 bit: - ARM Cortex-M3 - ARM Cortex-M4 - ESP8266 Su altre schede --------------- .. image:: img/other_boards.png :align: center Rispetto ad Arduino? -------------------- * Consumi minimi (di default) * Esplorazione interattiva * Facilità di scrittura di task paralleli * Linguaggio versatile Applicazione per Chrom(e|ium) ----------------------------- http://www.espruino.com/Web+IDE https://chrome.google.com/webstore/detail/espruino-web-ide/bleoifhkdalbjfbobjackfdifdneehpo IDE --- .. image:: img/web_ide.png :align: center Uso interattivo --------------- .. image:: img/interactive_led.png :align: center IDE a blocchi ------------- .. image:: img/blink_block.png :align: center Blink, seconda versione ----------------------- .. image:: img/blink_text.png :align: center ------ .. code:: javascript var on = false; setInterval(function() { on = !on; LED1.write(on); }, 500); Bottoni ------- .. image:: img/button.png :align: center ------ .. code:: javascript var on = false; var change = function() { on = !on; LED1.write(on); }; setWatch(change, BTN1, {repeat:true, edge:"rising"}); DHT22 ----- .. image:: img/dht22.png :align: center ------ .. code:: javascript var dht = require("DHT22").connect(C11); dht.read(function (data) { console.log( "Temp is " + data.temp.toString() + " and RH is " + data.rh.toString()); }); OLED ---- .. image:: img/display.png :align: center ------ .. code:: javascript function start() { g.drawString("Hello World!",2,2); g.flip(); } I2C1.setup({scl:B6,sda:B7}); var g = require("SH1106").connect(I2C1, start); Saving and loading ------------------ .. image:: img/display_interrupt.png :align: center ------ .. code:: javascript function draw_screen(data) { console.log("Drawing the screen with data"); console.log(data); g.drawString("Espruino demo", 2, 2); if (data) { g.drawString("Temp: "+data.temp.toString(),2,10); g.drawString(" RH: "+data.rh.toString(),2,18); } g.flip(); } ------ .. code:: javascript function start() { dht = require("DHT22").connect(C11); I2C1.setup({scl:B6,sda:B7}); g = require("SH1106").connect(I2C1, draw_screen); } E.on('init', start); start(); Reading with a button --------------------- .. image:: img/temp_with_button.png :align: center ------ .. code:: javascript setWatch(function(e) { dht.read(draw_screen); }, BTN, { repeat: true, edge: 'rising' }); Lowering contrast ----------------- .. image:: img/contast_with_button.png :align: center ------ .. code:: javascript setWatch(function(e) { g.setContrast(255); dht.read(draw_screen); setTimeout(function () { g.setContrast(1); }, 4000); }, BTN, { repeat: true, edge: 'rising' }); Setting the date ---------------- .. image:: img/set_date.png :align: center Logging data ------------ .. image:: img/logging_data.png :align: center ------ .. code:: javascript function start() { [...] fs = require("fs"); } setInterval(function() { dht.read(function(data) { entry = "- {time: " + Date.now() + ", temp: " + data.temp.toString() + ", rh: " + data.rh.toString(); console.log("saving: " + entry); fs.appendFileSync("temp_rh.yaml", entry); }); }, 60000); Per proseguire -------------- .. image:: img/tutorials_page.png :align: center Ulteriore documentazione ------------------------ * http://www.espruino.com/Reference * http://www.espruino.com/Modules * Queste slide: http://git.trueelena.org/cgit.cgi/docs/presentazione_espruino/ Domande? -------- Ci trovate allo stand del Gruppo Linux Como nel padiglione C .. image:: img/800px-Drinking_Cat.jpg :align: center https://commons.wikimedia.org/wiki/File:Drinking_Cat.jpg