"Warum?", "Was für ein Unsinn?", "Perversion!", "Fu-Fu-Fu" - dies sind einige der vielen Aussagen, die wir gehört haben, als wir das Iskra JS- Board auf dem Espruino- Kern veröffentlicht haben .Warum
Als der richtige Elektronikingenieur hört, dass am Arduino etwas getan wurde, steigt seine Körpertemperatur um etwa ein halbes Grad: „Sie haben einen geeigneten Mikrocontroller genommen und statt figak figak und Register alle Säfte herausgepresst, alles vulgarisiert ... es gibt keine Worte, eins Hass. "Aber Sie können noch weiter gehen. Nehmen Sie den Cortex M4-Mikrocontroller, der zehnmal so umfangreich ist wie der auf demselben Arduino Uno, schieben Sie den JavaScript-Interpreter hinein und führen Sie die JavaScript-Projekte aus!Ich denke, dass in diesem Moment diejenigen, die nicht bereit sind für einen solchen Missbrauch heiliger Mikrokreise, bereits geplatzt sind. Ich werde für den Rest weitermachen.Im Elektronik-Hobby für die meisten Projekte reicht der Arduino Uno für die Augen. Und es spielt keine Rolle, ob es mit der Standardfrequenz von 16 MHz oder 4 MHz arbeitet: Es spielt keine Rolle, ob sich die Bettbeleuchtung einschaltet oder die Pumpe in der Hütte in 1 ms oder 10 ms.Was zählt ist, dass C ++ komplex und aus Holz ist. Ja, es ist nah an Eisen, aber deshalb erfordert es ein tiefes Verständnis dieser Eisen- und Informatik. Fügen Sie dazu die Syntax mit einer Reihe von Nuancen hinzu, die die Summe der Fehler der 30-jährigen Entwicklung der Sprache darstellt. Dann berauben wir das, was sich als adäquate Arrays, Strings, Wörterbücher und noch besser herausstellte - im Allgemeinen berauben wir das dynamische Gedächtnis. Hier haben wir endlich den Arduino.Wenn ich mir Fragen in unserem Forum ansehe, sehe ich, dass die Leute Zeit damit verbringen, mit der Sprache zu ficken, und nicht mit der Essenz ihrer Projekte. Warum also nicht die Kluft zwischen Eisen und Menschen verringern? Eisen ist billig und entwickelt sich ständig weiter, die Zeit der Menschen ist teuer und kommt nicht von irgendwoher.Ich habe viele Jahre lang einen ähnlichen Prozess beobachtet, als ich in der Spieleentwicklung gearbeitet habe. Im Jahr 2003 war es unmöglich sich vorzustellen, dass das Spiel auf etwas anderem als C / C ++ geschrieben werden kann. Dann erschien das eingebaute Skript der Maschine in den Motoren. Und dann wurde die Schaffung eines vollwertigen Produkts ohne eine einzige Zeile in C möglich. Nur Java, C #, Ruby, Python, JavaScript. Dies ist logisch, da das Eisen anfing, „langsame Sprachen“ zu ziehen, und aufgrund der zeitweise schnelleren Entwicklung und der verfügbaren Programmierer wurde es möglich, mehr Ressourcen für die Interessantheit des Spiels und nicht für das Auffinden von Speicherlecks aufzuwenden.Wie die Programmierung von JavaScript-Mikrocontrollern aussieht
Programmierung ist wie ... JavaScript. Zur Entwicklung für Browser oder Node.js. Hier ist ein Beispiel:
var sim = require('@amperka/Sim900r').connect();
sim.powerOn();
sim.on('sms', function(sms) {
var rgb = sms.text.split(' ');
var r = +rgb[0];
var g = +rgb[1];
var b = +rgb[2];
if (isNaN(r + g + b)) return;
fadeTo(r, g, b);
});
SPI2.setup({baud:3200000, mosi:B15});
var LED_COUNT = 150;
var colors = new Uint8ClampedArray(LED_COUNT * 3);
function fadeTo(r, g, b) {
var n = 0;
var ivalID = setInterval(function() {
colors[n*3 + 0] = b;
colors[n*3 + 1] = r;
colors[n*3 + 2] = g;
SPI2.send4bit(colors, 0b0001, 0b0011);
if (n++ >= LED_COUNT) {
clearInterval(ivalID);
}
}, 50);
}
Dieses Programm empfängt SMS'ki und ändert je nach Text bei laufendem Licht die Farbe des angeschlossenen RGB-Bandes. Wir haben ein solches Projekt für unseren Neujahrsbaum gemacht, aber auf dem klassischen Arduino. Der Code war viermal mehr.Espruino Kernel
Der Computer verfügt also über V8- und SpiderMonkey-Engines für JavaScript. Und Mikrocontroller haben eine Espruino-Engine.Grob gesagt handelt es sich bei der Espruino-Engine um eine Firmware (Skizze, Skizze) für Mikrocontroller, die wiederum JavaScript-Code ausführen kann, den Sie über eine serielle Verbindung, beispielsweise über USB, auf die Karte übertragen.Espruino ist ein Open Source-Projekt, das von Gordon Williams gesponsert wird. Die Person, die den größten Teil des gesamten Ökosystems im Alleingang implementiert und erfolgreich mit ihr auf KickStarter gegangen ist.Dieses Ökosystem besteht aus mehreren Hauptteilen:- Espruino Web IDE - eine Programmierumgebung;
- Espruino Firmware - JavaScript-Maschine, die auf einem Mikrocontroller läuft;
- Eisen - die Bretter selbst, die mit Espruino kompatibel sind;
- Standardbibliothek und externe Bibliotheken;
- Dokumentation
Das Wichtigste zuerst.Programmierumgebung
Das Schreiben von JavaScript-Code, das Herunterladen auf die Karte und das Überwachen der Ausgabe erfolgt in der Espruino Web IDE. Diese Anwendung ist für Google Chrome, wird also mit einem Klick erstellt und funktioniert unter allen Desktop-Betriebssystemen.Für den Benutzer ersetzt diese Umgebung die Arduino IDE.Entsprechend der Funktionalität der Espruino-IDE ist es natürlich viel einfacher als die vollwertige Eclipse oder Visual Studio, aber es ist weiter fortgeschritten als die Arduino-IDE.Wenn Sie sich auf einen Blick im Umgebungsfenster umschauen, sehen Sie den Code-Editor (rechts), das Konsolenfenster (links) und die Schaltfläche zum Herunterladen des Codes auf die Karte.Die Konsole ähnelt einem seriellen Monitor in der Arduino IDE, zeigt sie jedoch nicht nur an, sondern akzeptiert sie auch: Sie können eine Funktion direkt aufrufen, ohne ein neues Programm zurückzusetzen und zu laden, den Wert der Variablen anzeigen, den Zyklus unterbrechen usw.Nachdem Sie enger gearbeitet haben, werden Sie auf einen Debugger (ja, schrittweise Ausführung, Haltepunkte), Editor-Hinweise, blinkende Fehler im laufenden Betrieb und andere nette Tricks stoßen.Darüber hinaus können Sie direkt von der IDE aus die Version der Espruino-Firmware selbst auf den neuesten Stand bringen. Die Umgebung selbst lädt die neueste verfügbare Version herunter und lädt sie über USB hoch.Firmware
Das Herzstück des Systems ist die Firmware, die sich auf dem Mikrocontroller dreht. Es ist in reinem C geschrieben, wird einmal an eine separate Stelle im Flash-Speicher des Mikrocontrollers geladen und verpflichtet sich, Benutzer-JS-Code auszuführen, der über eine serielle Verbindung kommt oder sich im Benutzerbereich des Flash-Speichers befindet.Wenn wir das Layout des Flash-Speichers für Iskra JS schematisch darstellen, erhalten wir das folgende Bild:
Bootloader
Zuerst kommt der Bootloader, der niemals (bedingt) aktualisiert wird. Dies ist ein kleines Programm, bei dessen Ausführung die Lebensdauer des Mikrocontrollers absolut immer nach dem Einschalten oder Zurücksetzen beginnt.Der Bootloader macht eine ziemlich einfache Sache:- Wenn die BTN1-Benutzertaste nicht gedrückt wird, überträgt sie sofort die Kontrolle an den Interpreter.
- Wenn die Taste beim Start gedrückt wurde, wird eine Schleife ausgeführt und es wird entweder gewartet, bis die Taste erneut gedrückt wird, um zum Interpreter zurückzukehren, oder es wird gewartet, bis die neue Version des Interpreters über USB heruntergeladen wurde. In diesem Fall überschreibt der Bootloader den Flash-Speicherbereich mit der Espruino-Firmware, und wir erhalten die neueste Version des Interpreters auf der Karte.
Dolmetscher
Dem Lader folgt also ein Dolmetscher, der die Hauptarbeit erledigt.Beim Start wird überprüft, ob das magische Byte im Flash-Speicher des Benutzers gespeichert ist. Wenn dies der Fall ist, wird die Ausführung akzeptiert.Wenn kein Code vorhanden ist oder wenn wir den Bootloader manuell mit BTN1 beendet haben, wird für das Meeting nichts ausgeführt. Wir bereiten lediglich einen JS-Computer für die Arbeit vor.Freier Speicher
Nach dem Interpreter befindet sich ein zeichnbarer Speicherbereich, in dem Sie Ihre Daten nichtflüchtig speichern können. Dies ist eine Art Ersatz für das EEPROM von Arduino, jedoch mit seinen eigenen Besonderheiten sowie zehn- bis hundertmal mehr.Benutzerdefinierter Code
Hier wird das vom Interpreter ausgeführte JS-Programm gespeichert. Das Programm ist so wie es ist im Klartext, in einem Brikett.Damit viele verbundene Bibliotheken mit ihren Abhängigkeiten und Ihrem eigenen Programm zu einem gegossenen und minimierten Brikett werden, wird es beim Laden der IDE überwacht.Vielmehr wird die gesamte Arbeit nicht von der IDE erledigt, sondern von ihrer GUI-unabhängigen Komponente von EspruinoTools, die über eine Befehlszeilenschnittstelle und einen Einstiegspunkt zur Verwendung als Node.js-Modul verfügt. Wenn Sie möchten, können Sie daher Vim, Atom, Eclipse oder was auch immer für Sie am bequemsten zu entwickeln ist verwenden.Anstelle des Codes kann anstelle eines Textbriketts eine gespeicherte binäre RAM-Besetzung vorhanden sein, die den Status des Interpreters zum Zeitpunkt des Speicherns vollständig widerspiegelt. Dies sind jedoch bereits technische Details, die keinen schnellen Überblick bieten.Bibliotheken
Bibliotheken können in drei Typen unterteilt werden: Standard, integriert und extern.Standardbibliothek
Die Standardbibliothek besteht aus Funktionen und Objekten, die verwendet werden können. Darunter befinden sich sowohl die vertrauten als auch die in der Standardsprache "Date", "JSON", "Math", "Object", "setInterval", "setTimeout" und anderen - anderen - sowie Espruino-spezifischen Funktionen für die Arbeit mit Pins und Schnittstellen durch Erinnerung.Unter den Funktionen finden Sie "pinMode", "digitalRead", "digitalWrite", "analogRead", "analogWrite", die dem Arduino vertraut sind, und "setWatch" zum Beobachten von Eingangsstiften, "digitalPulse" zur genauen Erzeugung einer Folge von digitalen Impulsen und viele weitere verschiedene Dinge, um mit Peripheriegeräten zu arbeiten.Übrigens, trotz der Tatsache, dass es auf der Plattform eine PinMode-Funktion gibt, funktioniert diese standardmäßig von selbst hinter den Kulissen, sodass Sie sich in den meisten Szenarien nicht daran erinnern können (der letzte Elektronikingenieur platzte zu diesem Zeitpunkt laut).Was Sie in der Standardbibliothek nicht finden, ist "Verzögerung". Mama Mia, wie dankbar bin ich dafür! Es reicht aus, das Denken ein wenig neu zu ordnen und es wird klar, dass alles durch "setInterval", "setTimeout" ohne "Verzögerung" gelöst wird.Zum Dank erhalten Sie eine asynchrone Ausführung: Sie können zwanzig LEDs unabhängig voneinander mit jeweils einer eigenen Frequenz blinken lassen. Und Sie erhalten Energieeffizienz: "Verzögerung" verbrennt die Prozessorzeit, und ohne "Verzögerung" kann der Prozessor ruhig schlafen, während nichts zu tun ist. In Espruino schläft der Prozessor ein, obwohl keine Arbeit vorhanden ist, und verbraucht Dutzende Male weniger Strom.Eingebaute Bibliotheken
Integrierte Bibliotheken sind in dem Sinne derselbe Teil der Standardbibliothek, dass sie fest in die Espruino-Firmware codiert sind. Für den Zugriff auf ihre Funktionen müssen sie jedoch mithilfe der für JavaScript-Programmierer bekannten Funktion "require" syntaktisch verbunden werden.Unter solchen Bibliotheken finden Sie beispielsweise "fs" für die Arbeit mit Dateisystemen von SD-Karten, "http" zum Erstellen einer Webschnittstelle für Ihr Gerät, "Waveform" zum Aufzeichnen / Abspielen von Audiosignalen und andere.Die Standardbibliotheken und die integrierten Bibliotheken sind in reinem C implementiert, und der Benutzer erhält nur eine JavaScript-Oberfläche in Form einer Reihe von Objekten, Funktionen und Modulen. Auf diese Weise können Sie maximale Effizienz bei der Implementierung komplexer Algorithmen erzielen und gleichzeitig die Möglichkeit lassen, über Code auf hoher Ebene darauf zuzugreifen.Sie selbst können etwas in C implementieren, das JavaScript "Nein, danke" sagt, und nur ein paar Schwänze herausbringen, die zum Ausführen benötigt werden.Externe Bibliotheken
Externe Bibliotheken prägen den Wohlstand des Ökosystems. Sie sind in JavaScript von Espruino-Autoren geschrieben, wir schreiben, Espruino-Benutzer schreiben.Sie können auf einer lokalen Festplatte gespeichert werden, in der Sandbox des aktuellen Projekts, im Internet-Repository, auf GitHub und auf NPM.Bibliotheken werden traditionell mit "require" verbunden.Wenn in der Umgebung "erforderlich" angezeigt wird, werden sie rekursiv von einer Remote-Quelle heruntergeladen und beim Laden einer Skizze an den Anfang Ihres Programms eingefügt. Somit wird für den Mikrocontroller ein integrales Brikett mit dem Code gebildet, über den ich oben gesprochen habe.Dieser Ansatz bedeutet auch, dass der Benutzer im Gegensatz zu Arduino nicht über die Tatsache stolpern muss, dass die Bibliothek gefunden, heruntergeladen und dort abgelegt werden muss, wo sie beginnen muss. Es reicht aus, nur die Skizze, die Sie mögen, von irgendwoher zu zuschlagen, und die Umgebung selbst wird sich mit den Bibliotheksabhängigkeiten befassen.Eisen
So kommen wir zu der greifbarsten Komponente des Espruino-Ökosystems. Dies sind die Karten, auf denen die Espruino-Firmware ausgeführt werden kann.Dazu gehören das ursprüngliche Espruino Board , Espruino Pico , sowie Iskra JS, das von Amperka veröffentlicht wurde . Alles ist bereits werkseitig auf den aufgeführten Platinen installiert, sie sind sofort einsatzbereit.Sie können das Tamburin mehrmals treffen und den Espruino-Kern auf den STM32 Discovery, Nucleo und plötzlich auf den ESP8266 setzen.Die Dokumentation
Es gibt nichts Traurigeres als etwas sehr Cooles und Mächtiges, aber ohne Dokumentation.Espruino hat eine ziemlich gute Dokumentation. Unter www.espruino.com/Reference finden Sie viele Referenz- und Schulungsartikel.Wir wollen mehr und besser machen. Aus diesem Grund haben wir einen separaten Abschnitt erstellt: js.amperka.ru , Video-Tutorials aufnehmen. Die Arbeiten sind im Gange, aber es wurde bereits viel abgedeckt.Und traditionell für diejenigen, die Box-Lösungen lieben, haben wir eine Reihe von " Iodo " erstellt. Es enthält Iskra JS, Module und ein Farbbuch.Hier ist eine Petersilie. Das einzige Rätsel ist, ob mindestens ein korrekter Elektronikingenieur diese Zeile lesen kann.