tessel/t2-cli

serialport issue trying to initiate 2 Tessel 2's - Pre-compiled module is missing: Could not locate the bindings file.

cheezeypotatoes opened this issue · 3 comments

Greetings, thank you in advance for your dedication. This is my first time posting here, bear with me if additional info is needed. Quick backstory. I'm playing around with a Johnny Five Inventors Kit to both learn some coding, and I'm trying to make a diecast drag race system. I have a nice start, it has a "Christmas tree" and 2 controllers, records reaction times, red light fouls, drives servos to open the startgate. times are being sent to a webserver and displaying on a wifi dashboard. I have a webcam attached streaming to the dashboard. Its coming together BUT....I ran out of pins on the Tessel and need a second one for finish line sensors and perhaps some motion detection (not sure how I'm going to detect and snap a photo finish)

Here is what i have been using to initiate a single board and it works well.

const Tessel = require("tessel-io")
const Five = require("johnny-five")
const board = new Five.Board({
io: new Tessel()
})

I plugged in the second board to the first ones USB and adjusted my init as follows: Now I'm getting serialport messages about pre-compiled modules being missing and not locating the bindings file.

const Tessel = require("tessel-io")
const Five = require("johnny-five")
const boards = new Five.Boards(["A","B"])({
io: new Tessel()
})

2nd EDIT: this is the complete output, I realized i left stuff out.

WARN Pre-compiled module is missing: @serialport/bindings@9.2.0.
WARN Please file an issue at https://github.com/tessel/t2-cli/issues/new with this warning.
WARN
WARN This warning might be caused by one of the following:
WARN
WARN 1. A pre-compiled binary has not yet been built for this module.
WARN 2. The binary didn't compile correctly for the platform that you're developing on.
WARN Binaries that are Linux-only or even OpenWRT-specific may cause this issue.
WARN Try to npm install --force the affected module, then rerun your deployment command.
WARN 3. The binary may be platform specific and impossible to compile for OpenWRT.
WARN Pre-compiled module is missing: usb@1.7.1.
WARN Please file an issue at https://github.com/tessel/t2-cli/issues/new with this warning.
WARN
WARN This warning might be caused by one of the following:
WARN
WARN 1. A pre-compiled binary has not yet been built for this module.
WARN 2. The binary didn't compile correctly for the platform that you're developing on.
WARN Binaries that are Linux-only or even OpenWRT-specific may cause this issue.
WARN Try to npm install --force the affected module, then rerun your deployment command.
WARN 3. The binary may be platform specific and impossible to compile for OpenWRT.
ERR! Error: ENOENT: no such file or directory, stat '/home/curt/.tessel/binaries/usb-1.7.1-Release-node-v57-linux-mipsel/Release/usb_bindings.node'
ERR! at Object.statSync (node:fs:1156:3)
ERR! at Object.statSync (/home/curt/.nvm/versions/node/v16.0.0/lib/node_modules/t2-cli/node_modules/graceful-fs/polyfills.js:312:16)
ERR! at Object.copySync (/home/curt/.nvm/versions/node/v16.0.0/lib/node_modules/t2-cli/node_modules/fs-extra/lib/copy-sync/copy-sync.js:31:86)
ERR! at /home/curt/.nvm/versions/node/v16.0.0/lib/node_modules/t2-cli/lib/tessel/deployment/javascript.js:408:16
ERR! at Map.forEach ()
ERR! at /home/curt/.nvm/versions/node/v16.0.0/lib/node_modules/t2-cli/lib/tessel/deployment/javascript.js:381:23
ERR! at new Promise ()
ERR! at Object.exportables.injectBinaryModules (/home/curt/.nvm/versions/node/v16.0.0/lib/node_modules/t2-cli/lib/tessel/deployment/javascript.js:373:10)
ERR! at /home/curt/.nvm/versions/node/v16.0.0/lib/node_modules/t2-cli/lib/tessel/deployment/javascript.js:643:23
ERR! at Project.collect (/home/curt/.nvm/versions/node/v16.0.0/lib/node_modules/t2-cli/node_modules/t2-project/lib/index.js:186:7) {
ERR! errno: -2,
ERR! syscall: 'stat',
ERR! code: 'ENOENT',
ERR! path: '/home/curt/.tessel/binaries/usb-1.7.1-Release-node-v57-linux-mipsel/Release/usb_bindings.node'
ERR! }
WARN Pre-compiled module is missing: node-addon-api@3.0.2.
WARN Please file an issue at https://github.com/tessel/t2-cli/issues/new with this warning.
WARN
WARN This warning might be caused by one of the following:
WARN
WARN 1. A pre-compiled binary has not yet been built for this module.
WARN 2. The binary didn't compile correctly for the platform that you're developing on.
WARN Binaries that are Linux-only or even OpenWRT-specific may cause this issue.
WARN Try to npm install --force the affected module, then rerun your deployment command.
WARN 3. The binary may be platform specific and impossible to compile for OpenWRT.
INFO Writing project to RAM on lobot (1128.96 kB)...
INFO Deployed.
INFO Running twoboards.js...
/tmp/remote-script/node_modules/bindings/bindings.js:135
throw err;
^

Error: Could not locate the bindings file. Tried:
→ /tmp/remote-script/node_modules/serialport/node_modules/@serialport/bindings/build/bindings.node
→ /tmp/remote-script/node_modules/serialport/node_modules/@serialport/bindings/build/Debug/bindings.node
→ /tmp/remote-script/node_modules/serialport/node_modules/@serialport/bindings/build/Release/bindings.node
→ /tmp/remote-script/node_modules/serialport/node_modules/@serialport/bindings/out/Debug/bindings.node
→ /tmp/remote-script/node_modules/serialport/node_modules/@serialport/bindings/Debug/bindings.node
→ /tmp/remote-script/node_modules/serialport/node_modules/@serialport/bindings/out/Release/bindings.node
→ /tmp/remote-script/node_modules/serialport/node_modules/@serialport/bindings/Release/bindings.node
→ /tmp/remote-script/node_modules/serialport/node_modules/@serialport/bindings/build/default/bindings.node
→ /tmp/remote-script/node_modules/serialport/node_modules/@serialport/bindings/compiled/8.11.3/linux/mipsel/bindings.node
→ /tmp/remote-script/node_modules/serialport/node_modules/@serialport/bindings/addon-build/release/install-root/bindings.node
→ /tmp/remote-script/node_modules/serialport/node_modules/@serialport/bindings/addon-build/debug/install-root/bindings.node
→ /tmp/remote-script/node_modules/serialport/node_modules/@serialport/bindings/addon-build/default/install-root/bindings.node
→ /tmp/remote-script/node_modules/serialport/node_modules/@serialport/bindings/lib/binding/node-v57-linux-mipsel/bindings.node
at bindings (/tmp/remote-script/node_modules/bindings/bindings.js:126:9)
at Object. (/tmp/remote-script/node_modules/serialport/node_modules/@serialport/bindings/lib/linux.js:1:119)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Module.require (module.js:596:17)
at require (internal/module.js:11:18)
at Object. (/tmp/remote-script/node_modules/serialport/node_modules/@serialport/bindings/lib/index.js:1:346)

T2 version from both Tessels
INFO Tessel Environment Versions:
INFO t2-cli: 0.1.23
INFO t2-firmware: 0.2.0
INFO Node.js: 8.11.3

I'm running all this from an Ubuntu Ubuntu 20.04.2 LTS. I have seen a few posts on this and it seems those resolutions either did not work or did not apply. I've tried switching my Node around to different version to no avail. Interestingly I wanted to try node v6 due to a post I saw but I cannot even get the T2 cli to work with that version. I just returned back to what i was using (v16.0.0.)

I'm still stumped on this issue but I did find out that could control LED's with the servo module board so that changed the game and can now finish my project with only one board. I'd still like to know why all hell breaks loose when I try to initiate that 2nd board though. But I'm sure npm'ing a bunch of things relating to serialport all willy nilly didnt help. I'll leave this open though feel free to close it and leave a comment for my continuing education =)

dtex commented

I kept quiet on this because I don't really know the answer and can only speculate. The T2 is locked into an older version of node but it looks like this is trying to install the latest version of serialport which almost certainly doesn't work on that older version (hence no precompiled binaries). You might try using older version of Serialport (which may require an older version of Johnny-Five and/or firmata.js).

That said, it's kinda weird that you'd use one T2 to control another, and I'm not sure that could ever work. T2's don't have a fimata-like client the listens to a host for instructions. Everything runs onboard using tessel-io. I do know you can control an Arduino or something similar from a T2, but even that I've not seen it done in practice.

I'm glad you discovered the servo module because that is a far more practical solution.

By the way, your project sounds super cool. When you get it running but sure to tweet about it and tag @nodebots. We'd love to see it in action.

Hey no worries thanks for the reply. The biggest thing you answered for me I think is, can I even plug in 2 boards like that. So I was just being a rookie on that. What do you do though when you do need more pins for stuff? I know you can initiate 2 boards from the examples on the J5 API site. There is a Boards constructor (did I term that right BTW?) example so it is possible for 2 boards to run 1 program correct? If they are both just usb tethered or wifi connected, which one does your program go to when you T2 run or push? I'm so confused thinking about it right now but luckily I dont really need the answer now but would still like to know. Eventually I will want to expand on this and will want to be a able to use a second board.

I'm not on Twitter or FB but I'll look for nodebots on IG

But yeah I made progress now. I added a timer and IR finish line beam for one of the lanes and it worked! =)

Thanks again.