Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

new io.Gpio(this.addr) fails - again, but I found out something interesting #24

Closed
Injac opened this issue Jan 12, 2015 · 26 comments
Closed

Comments

@Injac
Copy link

Injac commented Jan 12, 2015

Hi,

I have to say that I am starter with Edison and Galileo.But here is what I have done:

  • Compiled MRAA on my Edison
  • Built node.js (latest release) on my Edision
  • Installed johnny-five, galileo-io and the alias package edision-io

Every single sample I tried using edision-io, the johnny5 samples did throw the following error:

/root/node/node_modules/galileo-io/lib/mraa.js:66
    state.io = new io.Gpio(this.addr);
               ^
Error: Illegal arguments for construction of _exports_Gpio
    at new Pin (/root/node/node_modules/galileo-io/lib/mraa.js:66:16)
    at Galileo.<anonymous> (/root/node/node_modules/galileo-io/lib/galileo.js:172:16)
    at Array.map (native)
    at new Galileo (/root/node/node_modules/galileo-io/lib/galileo.js:168:24)
    at new Board (/root/node/node_modules/johnny-five/lib/board.js:295:17)
    at Object.<anonymous> (/root/node/test3.js:4:9)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)

But, if I use the MRAA sample here:

https://github.com/intel-iot-devkit/mraa/blob/master/examples/javascript/Blink-IO.js

It works. And I have no idea why.

Really hope this helps to nail down the issue.

@rwaldron
Copy link
Owner

Compiled MRAA on my Edison

This shouldn't be necessary, Galileo-IO will install the latest version when you do npm install galileo-io

Built node.js (latest release) on my Edision

Version?

Installed johnny-five, galileo-io and the alias package edision-io

Only the first is necessary, as Johnny-Five will install the appropriate platform dependency for you.


  1. Run this and tell me what the result is: node -e 'console.log(require("mraa").getVersion());'
  2. Run:
echo "src mraa-upm http://iotdk.intel.com/repos/1.1/intelgalactic" > /etc/opkg/mraa-upm.conf;
opkg update;
opkg install libmraa0;

Are you on the arduino expansion board or the mini board?

@Injac
Copy link
Author

Injac commented Jan 12, 2015

Here is the output:

v0.5.4-66-g62c3264

I have done that already. Added the intergalactic a few times. Could not make it work. And I have read all of your suggestions, also on other threads, forums and sites. Where I found that, even the MRAA site suggest this. But it does not work (at least not for me).

Tried the Yocto image (latest from Intel) and the Debian image (Ubilinux) . All with the same result. Even baked my own Yocto. Did not help either.

Maybe something is wrong with the Edision. But why is the MRAA sample working then?

@rwaldron
Copy link
Owner

Can you paste your own program code? I am going to try to reproduce

@Injac
Copy link
Author

Injac commented Jan 12, 2015

Sure. Here is the code I tested:

File 1:

var five = require("johnny-five");
var Edison = require("edison-io");
var board = new five.Board({
  io: new Edison()
});

board.on("ready", function() {
  var led = new five.Led(13);
  led.blink();
});

File 2:

// Use require("galileo-io") when running from an npm installation
var Galileo = require("galileo-io");
var board = new Galileo();

board.on("ready", function() {
  console.log("READY");
  var byte = 0;

  setInterval(function() {
    board.digitalWrite(13, (byte ^= 1));
  }, 500);
});

File 3:

var five = require('johnny-five'),
    board;

board = new five.Board();

board.on('ready',function(){

  var led = new five.Led(13);
  led.blink(500);
});

This one works:

var m = require('mraa'); //require mraa
console.log('MRAA Version: ' + m.getVersion()); //write the mraa version to the console

var myLed = new m.Gpio(13); //LED hooked up to digital pin 13 (or built in pin on Galileo Gen1 & Gen2)
myLed.dir(m.DIR_OUT); //set the gpio direction to output
var ledState = true; //Boolean to hold the state of Led

periodicActivity(); //call the periodicActivity function

function periodicActivity()
{
  myLed.write(ledState?1:0); //if ledState is true then write a '1' (high) otherwise write a '0' (low)
  ledState = !ledState; //invert the ledState
  setTimeout(periodicActivity,1000); //call the indicated function after 1 second (1000 milliseconds)
}

Hope this helps.

@rwaldron
Copy link
Owner

I just ran all three Johnny-Five/Galileo-IO/Edison-IO examples with no issues (all of them make 13 blink); also ran the mraa-only example to confirm.

  • Edison connected to Arduino breakout shield
  • edison-io@0.6.4
  • galileo-io@0.6.4
  • johnny-five@0.8.37
  • mraa@0.5.4-71-g17ee0c9

What version of Galileo-IO and Johnny-Five do you have installed?

@Injac
Copy link
Author

Injac commented Jan 12, 2015

Here are my versions:

  • galileo-io@0.6.4
  • edison-io@0.6.4
  • johnny-five@0.8.37

But no mraa installed. npm list does not show it. Here is my outpu (sorry about that long thing here)t:

├── edison-io@0.6.4
├─┬ galileo-io@0.6.4
│ ├── es6-promise@2.0.1
│ ├── es6-shim@0.22.2
│ ├── graceful-fs@2.0.3
│ └─┬ remapped@0.2.1
│ ├── getobject@0.1.0
│ └── traverse@0.6.6
└─┬ johnny-five@0.8.37
├─┬ array-includes@1.0.4
│ ├─┬ define-properties@1.0.1
│ │ ├── foreach@2.0.5
│ │ └── object-keys@1.0.3
│ └── es-abstract@1.0.0
├── color-convert@0.5.2
├── colors@1.0.3
├── descriptor@0.1.0
├── ease-component@1.0.0
├── es6-shim@0.22.2
├─┬ firmata@0.4.0
│ ├── browser-serialport@1.0.6
│ └── object-assign@1.0.0
├── lodash@2.4.1
├── nanotimer@0.3.1
├─┬ serialport@1.4.10
│ ├── async@0.9.0
│ ├── bindings@1.2.1
│ ├── nan@1.3.0
│ ├─┬ node-pre-gyp@0.5.19
│ │ ├─┬ mkdirp@0.5.0
│ │ │ └── minimist@0.0.8
│ │ ├─┬ nopt@2.2.1
│ │ │ └── abbrev@1.0.5
│ │ ├─┬ npmlog@0.0.6
│ │ │ └── ansi@0.2.1
│ │ ├─┬ rc@0.4.0
│ │ │ ├── deep-extend@0.2.10
│ │ │ ├── ini@1.1.0
│ │ │ ├── minimist@0.0.10
│ │ │ └── strip-json-comments@0.1.3
│ │ ├─┬ request@2.36.0
│ │ │ ├── aws-sign2@0.5.0
│ │ │ ├── forever-agent@0.5.2
│ │ │ ├─┬ form-data@0.1.2
│ │ │ │ ├── async@0.2.10
│ │ │ │ └─┬ combined-stream@0.0.4
│ │ │ │ └── delayed-stream@0.0.5
│ │ │ ├─┬ hawk@1.0.0
│ │ │ │ ├── boom@0.4.2
│ │ │ │ ├── cryptiles@0.2.2
│ │ │ │ ├── hoek@0.9.1
│ │ │ │ └── sntp@0.2.4
│ │ │ ├─┬ http-signature@0.10.0
│ │ │ │ ├── asn1@0.1.11
│ │ │ │ ├── assert-plus@0.1.2
│ │ │ │ └── ctype@0.5.2
│ │ │ ├── json-stringify-safe@5.0.0
│ │ │ ├── mime@1.2.11
│ │ │ ├── node-uuid@1.4.1
│ │ │ ├── oauth-sign@0.3.0
│ │ │ ├── qs@0.6.6
│ │ │ ├─┬ tough-cookie@0.12.1
│ │ │ │ └── punycode@1.2.4
│ │ │ └── tunnel-agent@0.4.0
│ │ ├── rimraf@2.2.8
│ │ ├── semver@2.3.0
│ │ ├─┬ tar@0.1.19
│ │ │ ├── block-stream@0.0.7
│ │ │ ├─┬ fstream@0.1.25
│ │ │ │ ├── graceful-fs@2.0.3
│ │ │ │ └── mkdirp@0.3.5
│ │ │ └── inherits@2.0.1
│ │ └─┬ tar-pack@2.0.0
│ │ ├── debug@0.7.4
│ │ ├─┬ fstream@0.1.25
│ │ │ ├── graceful-fs@2.0.3
│ │ │ ├── inherits@2.0.1
│ │ │ └── mkdirp@0.3.5
│ │ ├─┬ fstream-ignore@0.0.7
│ │ │ ├── inherits@2.0.1
│ │ │ └─┬ minimatch@0.2.14
│ │ │ ├── lru-cache@2.5.0
│ │ │ └── sigmund@1.0.0
│ │ ├── graceful-fs@1.2.3
│ │ ├── once@1.1.1
│ │ ├─┬ readable-stream@1.0.27-1
│ │ │ ├── core-util-is@1.0.1
│ │ │ ├── inherits@2.0.1
│ │ │ ├── isarray@0.0.1
│ │ │ └── string_decoder@0.10.25-1
│ │ └── uid-number@0.0.3
│ ├─┬ optimist@0.6.1
│ │ ├── minimist@0.0.10
│ │ └── wordwrap@0.0.2
│ └── sf@0.1.7
└── temporal@0.4.0

Do I need to install the mraa package separately?

@rexstjohn
Copy link

I am getting the same problem with the LED refusing to blink. Tried the opkg update of mraa as well (version v0.5.4-100-g6c73a8a):

ERROR:     state.io = new io.Gpio(this.addr);                                                                                                                                     
    ERROR:            ^                                                                                                                                                           
ERROR: Error: Illegal arguments for construction of _exports_Gpio                                                                                                                 
    at new Pin (/node_app_slot/node_modules/edison-io/node_modules/galileo-io/lib/mraa.js:66:16)                                                                                  
    at Galileo.<anonymous> (/node_app_slot/node_modules/edison-io/node_modules/galileo-io/lib/galileo.js:172:16)                                                                  
    at Array.map (native)                                                                                                                                                         
    at new Galileo (/node_app_slot/node_modules/edison-io/node_modules/galileo-io/lib/galileo.js:168:24)                                                                          
    at Object.<anonymous> (/node_app_slot/main.js:4:7)                                                                                                                            
    at Module._compile (module.js:456:26)                                                                                                                                         
    at Object.Module._extensions..js (module.js:474:10)                                                                                                                           
    at Module.load (module.js:356:32)                                                                                                                                             
    at Function.Module._load (module.js:312:12)                                                                                                                                   
    at Function.Module.runMain (module.js:497:10) 

Using:

var five = require("johnny-five");
var Edison = require("edison-io");
var board = new five.Board({
  io: new Edison()
});

board.on("ready", function() {
  var led = new five.Led(13);
  led.blink();
});

Package file I tried to use last:

{
  "name": "Johnny-Five",
  "description": "",
  "version": "0.0.0",
  "main": "main.js",
  "engines": {
    "node": ">=0.10.0"
  },
  "dependencies": {
      "johnny-five":"0.8.37",
      "edison-io":"0.6.4"
  }
}

@rwaldron
Copy link
Owner

I will take a look first thing in the morning. Is this on an Edison or Galileo Gen 2?

@rwaldron
Copy link
Owner

What happens when you run this without explicitly including the IO Plugin:

var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  var led = new five.Led(13);
  led.blink();
});

@rwaldron
Copy link
Owner

I need more info:

  • Galileo Gen 1 or Gen 2?
  • Edison Arduino Board or Edison Mini Board?

@rexstjohn
Copy link

@rwaldron Its an Edison Arduino board. I suspect it is MRAA-related and not johnny-five related. I will try this out in a bit.

@Injac
Copy link
Author

Injac commented Jan 23, 2015

@rwaldron I have the Edison with the Mini Board.

@Injac
Copy link
Author

Injac commented Jan 24, 2015

@rexstjohn Could you solve the problem? And how would one check on that? Specifically debug the node.js bindings to MRAA? How do you do that?

@rwaldron
Copy link
Owner

@Injac I just updated to the latest version of mraa bindings and everything works correctly. Looking at the version you showed above, you've been using an out of date release: "v0.5.4-66-g62c3264". In my one of my earlier responses, I said I was using "0.5.4-71-g17ee0c9", which was already ahead of yours; now I'm on "v0.5.4-100-g6c73a8a".

Please run the following:

echo "src mraa-upm http://iotdk.intel.com/repos/1.1/intelgalactic" > /etc/opkg/mraa-upm.conf;
opkg update;
opkg install libmraa0;
node -e 'console.log(require("mraa").getVersion());'

This should end with "v0.5.4-100-g6c73a8a" (or newer)

Edit

@rexstjohn can you go to this line: /node_app_slot/node_modules/edison-io/node_modules/galileo-io/lib/mraa.js:66:16 and change this: state.io = new io.Gpio(this.addr); to:

console.log(this.addr);
state.io = new io.Gpio(this.addr);

Let me know what it logs—thanks.

@rwaldron
Copy link
Owner

@Injac sorry, I missed where you said you were using the mini board. Testing that now.

update

(I'll post updates as i go)

  • Looks like it fails when it tries to pre-init pin 1
  • The following example fails the same way as the Johnny-Five code:
var m = require("mraa");
console.log("MRAA Version: " + m.getVersion());
var led = new m.Gpio(1);
root@eddie:~# node 5.js
MRAA Version: v0.5.4-100-g6c73a8a

/home/root/5.js:3
var led = new m.Gpio(1);
          ^
Error: Illegal arguments for construction of _exports_Gpio
    at Object.<anonymous> (/home/root/5.js:3:11)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:906:3

@rwaldron
Copy link
Owner

I've pinged the maintainers of mraa and will keep working once I hear from them.

@Injac
Copy link
Author

Injac commented Jan 25, 2015

@rwaldron Thank you :)

@rwaldron
Copy link
Owner

I'm about to spend some time working on this, will keep you posted
On Sat, Jan 24, 2015 at 11:51 PM Ilija Injac notifications@github.com
wrote:

@rwaldron https://github.com/rwaldron Thank you :)


Reply to this email directly or view it on GitHub
#24 (comment).

@rwaldron
Copy link
Owner

@Injac can you try version 0.7.0

@Injac
Copy link
Author

Injac commented Jan 26, 2015

@rwaldron I will try tonight and let you know about the result.

@rwaldron
Copy link
Owner

Thank you!

@Injac
Copy link
Author

Injac commented Jan 26, 2015

@rwaldron Works :D All three samples I posted. What was the issue?

@rwaldron
Copy link
Owner

@Injac thanks for confirming :)

The issue was caused by the Edison Mini Board having a completely different set of pins from the Galileo (1, 2) and Edison Arduino Board. This table: https://github.com/intel-iot-devkit/mraa/blob/master/docs/edison.md#intelr-breakout-board shows which pins aren't actually connected (anything that says "nothing from mraa") which was causing the pre initialization to fail when it attempted to init pin 1

@Injac
Copy link
Author

Injac commented Jan 26, 2015

I see. Thanks for the feedback and for fixing this issue so fast :) Made my day!

@rwaldron
Copy link
Owner

My pleasure and thank you for your patience :)

@Injac
Copy link
Author

Injac commented Jan 26, 2015

You are very welcome :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants