- Notifications
You must be signed in to change notification settings - Fork3
JavaScript scripting engine Arduino IDE Library for ESP8266
License
NotificationsYou must be signed in to change notification settings
sfranzyshen/ESP8266-Arduino-JavaScript
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
JavaScript scripting engine Arduino IDE Library for ESP8266
ESP8266-Arduino-JavaScript is a Arduino IDE Library to implement a JavaScript engine for ESP8266 microcontroller.
- Download the latest github release zip fileESP8266-Arduino-JavaScript-0.0.12
- In the Arduino IDE, navigate to Sketch > Include Library > Add .ZIP Library. At the top of the drop down list, select the option to "Add .ZIP Library''.
- You will be prompted to select the library you would like to add. Navigate to the .zip file's location and open it.
- Load the demo sketch using the Arduino IDE menu (File->Examples->ESP8266-Arduino-JavaScript->blink)
- Build and Upload.
- Clean ISO C, ISO C++. Builds on old (VC98) and modern compilers, from 8-bit (e.g. Arduino mini) to 64-bit systems
- No dependencies
- Implements a restricted subset of ES6 with limitations
- Preallocates all necessary memory and never calls
malloc
,realloc
at run time. Upon OOM, the VM is halted - Object pool, property pool, and string pool sizes are defined at compile time
- The minimal configuration takes only a few hundred bytes of RAM
- RAM usage: an object takes 6 bytes, each property: 16 bytes,a string: length + 6 bytes, any other type: 4 bytes
- Strings are byte strings, not Unicode.For example,
'ы'.length === 2
,'ы'[0] === '\xd1'
,'ы'[1] === '\x8b'
- Limitations: max string length is 256 bytes, numbers hold32-bit float value, no standard JS library
- mJS VM executes JS source directly, no AST/bytecode is generated
- Simple FFI API to inject existing C functions into JS
#include<mjs3.h>externvoidmyDelay(int x) {delay(x);}externvoidmyDigitalWrite(int x,int y) {digitalWrite(x, y);}voidsetup() {pinMode(16, OUTPUT);// Initialize the LED_BUILTIN pin as an outputstructmjs *vm =mjs_create();// Create JS instancemjs_ffi(vm,"delay", (cfn_t) myDelay,"vi");// Import delay()mjs_ffi(vm,"write", (cfn_t) myDigitalWrite,"vii");// Import write()mjs_eval(vm,"while (1) { write(16, 0); delay(500); write(16, 1); delay(500); }", -1);}voidloop() {//delay(1000);}
Sketch uses 271568 bytes (26%) of program storage space. Maximum is 1044464 bytes.Global variables use 27828 bytes (33%) of dynamic memory, leaving 54092 bytes for local variables. Maximum is 81920 bytes.
Name | Operation |
---|---|
Operations | All but!= ,== . Use!== ,=== instead |
typeof | typeof(...) |
delete | delete obj.k |
while | while (...) {...} |
Declarations | let a, b, c = 12.3, d = 'a'; |
Simple types | let a = null, b = undefined, c = false, d = true; |
Functions | let f = function(x, y) { return x + y; }; |
Objects | let obj = {a: 1, f: function(x) { return x * 2}}; obj.f(); |
Arrays | let arr = [1, 2, 'hi there'] |
Name | Operation |
---|---|
Loops/switch | for (...) { ... } ,for (let k in obj) { ... } ,do { ... } while (...) ,switch (...) {...} |
Equality | == ,!= (note: use strict equality=== ,!== ) |
var | var ... (note: uselet ... ) |
Closures | let f = function() { let x = 1; return function() { return x; } }; |
Const, etc | const ... ,await ... ,void ... ,new ... ,instanceof ... |
Standard types | NoDate ,ReGexp ,Function ,String ,Number |
Prototypes | No prototype based inheritance |
Function | Description |
---|---|
s[offset] | Return byte value atoffset .s is either a string, or a number. A number is interprepted asuint8_t * pointer. Example:'abc'[0] returns 0x61. To read a byte at address0x100 , use0x100[0]; . |
Dual license: GPLv2 or commercial. For commerciallicensing, please contactsupport@mongoose-os.com
About
JavaScript scripting engine Arduino IDE Library for ESP8266
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
No packages published
Uh oh!
There was an error while loading.Please reload this page.