johnny-five is very promising
This commit is contained in:
parent
ca72e479f3
commit
71c4ec5072
343
package-lock.json
generated
343
package-lock.json
generated
@ -13,6 +13,7 @@
|
||||
"chalk": "^4.1.2",
|
||||
"express": "^4.18.3",
|
||||
"firmata": "^2.3.0",
|
||||
"johnny-five": "^2.1.0",
|
||||
"nodemon": "^3.1.0",
|
||||
"serialport": "^12.0.0",
|
||||
"socket.io": "^4.7.4"
|
||||
@ -20,6 +21,7 @@
|
||||
"devDependencies": {
|
||||
"@types/express": "^4.17.21",
|
||||
"@types/firmata": "^0.19.8",
|
||||
"@types/johnny-five": "^2.1.9",
|
||||
"@types/nodemon": "^1.19.6",
|
||||
"@types/socket.io": "^3.0.2",
|
||||
"ts-node": "^10.9.2",
|
||||
@ -424,6 +426,15 @@
|
||||
"integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/johnny-five": {
|
||||
"version": "2.1.9",
|
||||
"resolved": "https://registry.npmjs.org/@types/johnny-five/-/johnny-five-2.1.9.tgz",
|
||||
"integrity": "sha512-pBRdHrz+c5CMIlavQoh0TtPRbEr69euIxXH4hWAQaAXRcxKf3ZbGmX97L0P7Pv45eyLynDDN/TgZcCgh7oWtWg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/mime": {
|
||||
"version": "1.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
|
||||
@ -744,6 +755,12 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/browser-serialport": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/browser-serialport/-/browser-serialport-2.1.0.tgz",
|
||||
"integrity": "sha512-nig20bRxZYaYWvIpg0W4YfsV8WIdNlWoKipDfa+BJZir0fgod2T7z1AuzJhhktddMuhqYE7D6DnDveVPsHRumw==",
|
||||
"optional": true
|
||||
},
|
||||
"node_modules/buffer": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
|
||||
@ -1117,6 +1134,14 @@
|
||||
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
||||
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
|
||||
},
|
||||
"node_modules/escape-string-regexp": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
|
||||
"integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
|
||||
"engines": {
|
||||
"node": ">=0.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/etag": {
|
||||
"version": "1.8.1",
|
||||
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
|
||||
@ -1726,6 +1751,311 @@
|
||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
||||
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
|
||||
},
|
||||
"node_modules/johnny-five": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/johnny-five/-/johnny-five-2.1.0.tgz",
|
||||
"integrity": "sha512-0Z6qa9Tlt7vUShW8gzewXTJgckhMfbaM7ZhbApOhkAW0PrLIOQms/DjOptE/oitE70tD3O8YJ7OlNSMe+en2DQ==",
|
||||
"dependencies": {
|
||||
"chalk": "2.1.0",
|
||||
"color-convert": "~1.2.2",
|
||||
"lodash.clonedeep": "^4.3.0",
|
||||
"lodash.debounce": "^4.0.3",
|
||||
"nanotimer": "0.3.10",
|
||||
"temporal": "latest"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"browser-serialport": "latest",
|
||||
"firmata": "^2.2.0",
|
||||
"serialport": "^8.0.5"
|
||||
}
|
||||
},
|
||||
"node_modules/johnny-five/node_modules/@serialport/binding-mock": {
|
||||
"version": "8.0.6",
|
||||
"resolved": "https://registry.npmjs.org/@serialport/binding-mock/-/binding-mock-8.0.6.tgz",
|
||||
"integrity": "sha512-BIbY5/PsDDo0QWDNCCxDgpowAdks+aZR8BOsEtK2GoASTTcJCy1fBwPIfH870o7rnbH901wY3C+yuTfdOvSO9A==",
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"@serialport/binding-abstract": "^8.0.6",
|
||||
"debug": "^4.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/johnny-five/node_modules/@serialport/bindings": {
|
||||
"version": "8.0.8",
|
||||
"resolved": "https://registry.npmjs.org/@serialport/bindings/-/bindings-8.0.8.tgz",
|
||||
"integrity": "sha512-xMJHr7CyOPq+wwC/S2RNI+tY+WZW4gXY3tE8QUOIRp0K7lSyLYOzKdyGUtk2uI0ohDMV3OcB+TEhhffT2S2DHQ==",
|
||||
"hasInstallScript": true,
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"@serialport/binding-abstract": "^8.0.6",
|
||||
"@serialport/parser-readline": "^8.0.6",
|
||||
"bindings": "^1.5.0",
|
||||
"debug": "^4.1.1",
|
||||
"nan": "^2.14.0",
|
||||
"prebuild-install": "^5.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/johnny-five/node_modules/@serialport/parser-byte-length": {
|
||||
"version": "8.0.6",
|
||||
"resolved": "https://registry.npmjs.org/@serialport/parser-byte-length/-/parser-byte-length-8.0.6.tgz",
|
||||
"integrity": "sha512-92mrFxFEvq3gRvSM7ANK/jfbmHslz91a5oYJy/nbSn4H/MCRXjxR2YOkQgVXuN+zLt+iyDoW3pcOP4Sc1nWdqQ==",
|
||||
"optional": true,
|
||||
"engines": {
|
||||
"node": ">=8.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/johnny-five/node_modules/@serialport/parser-cctalk": {
|
||||
"version": "8.0.6",
|
||||
"resolved": "https://registry.npmjs.org/@serialport/parser-cctalk/-/parser-cctalk-8.0.6.tgz",
|
||||
"integrity": "sha512-pqtCYQPgxnxHygiXUPCfgX7sEx+fdR/ObjpscidynEULUq2fFrC5kBkrxRbTfHRtTaU2ii9DyjFq0JVRCbhI0Q==",
|
||||
"optional": true,
|
||||
"engines": {
|
||||
"node": ">=8.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/johnny-five/node_modules/@serialport/parser-delimiter": {
|
||||
"version": "8.0.6",
|
||||
"resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-8.0.6.tgz",
|
||||
"integrity": "sha512-ogKOcPisPMlVtirkuDu3SFTF0+xT0ijxoH7XjpZiYL41EVi367MwuCnEmXG+dEKKnF0j9EPqOyD2LGSJxaFmhQ==",
|
||||
"optional": true,
|
||||
"engines": {
|
||||
"node": ">=8.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/johnny-five/node_modules/@serialport/parser-readline": {
|
||||
"version": "8.0.6",
|
||||
"resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-8.0.6.tgz",
|
||||
"integrity": "sha512-OYBT2mpczh9QUI3MTw8j0A0tIlPVjpVipvuVnjRkYwxrxPeq04RaLFhaDpuRzua5rTKMt89c1y3btYeoDXMjAA==",
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"@serialport/parser-delimiter": "^8.0.6"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/johnny-five/node_modules/@serialport/parser-ready": {
|
||||
"version": "8.0.6",
|
||||
"resolved": "https://registry.npmjs.org/@serialport/parser-ready/-/parser-ready-8.0.6.tgz",
|
||||
"integrity": "sha512-xcEqv4rc119WR5JzAuu8UeJOlAwET2PTdNb6aIrrLlmTxhvuBbuRFcsnF3BpH9jUL30Kh7a6QiNXIwVG+WR/1Q==",
|
||||
"optional": true,
|
||||
"engines": {
|
||||
"node": ">=8.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/johnny-five/node_modules/@serialport/parser-regex": {
|
||||
"version": "8.0.6",
|
||||
"resolved": "https://registry.npmjs.org/@serialport/parser-regex/-/parser-regex-8.0.6.tgz",
|
||||
"integrity": "sha512-J8KY75Azz5ZyExmyM5YfUxbXOWBkZCytKgCCmZ966ttwZS0bUZOuoCaZj2Zp4VILJAiLuxHoqc0foi67Fri5+g==",
|
||||
"optional": true,
|
||||
"engines": {
|
||||
"node": ">=8.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/johnny-five/node_modules/@serialport/stream": {
|
||||
"version": "8.0.6",
|
||||
"resolved": "https://registry.npmjs.org/@serialport/stream/-/stream-8.0.6.tgz",
|
||||
"integrity": "sha512-ym1PwM0rwLrj90vRBB66I1hwMXbuMw9wGTxqns75U3N/tuNFOH85mxXaYVF2TpI66aM849NoI1jMm50fl9equg==",
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"debug": "^4.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/johnny-five/node_modules/ansi-styles": {
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
|
||||
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
|
||||
"dependencies": {
|
||||
"color-convert": "^1.9.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/johnny-five/node_modules/ansi-styles/node_modules/color-convert": {
|
||||
"version": "1.9.3",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
|
||||
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
|
||||
"dependencies": {
|
||||
"color-name": "1.1.3"
|
||||
}
|
||||
},
|
||||
"node_modules/johnny-five/node_modules/chalk": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz",
|
||||
"integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==",
|
||||
"dependencies": {
|
||||
"ansi-styles": "^3.1.0",
|
||||
"escape-string-regexp": "^1.0.5",
|
||||
"supports-color": "^4.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/johnny-five/node_modules/color-convert": {
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.2.2.tgz",
|
||||
"integrity": "sha512-yXAhpn5+dVTIW1ADPkmcFu3W2c9yZJnmRsbA8tExvSL9NcBI/mEVGECZHVbRln+1K7BL031a4VzkMe9+b9R+Qw=="
|
||||
},
|
||||
"node_modules/johnny-five/node_modules/color-name": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
|
||||
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
|
||||
},
|
||||
"node_modules/johnny-five/node_modules/decompress-response": {
|
||||
"version": "4.2.1",
|
||||
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz",
|
||||
"integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==",
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"mimic-response": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/johnny-five/node_modules/detect-libc": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
|
||||
"integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
|
||||
"optional": true,
|
||||
"bin": {
|
||||
"detect-libc": "bin/detect-libc.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10"
|
||||
}
|
||||
},
|
||||
"node_modules/johnny-five/node_modules/has-flag": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
|
||||
"integrity": "sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/johnny-five/node_modules/mimic-response": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz",
|
||||
"integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==",
|
||||
"optional": true,
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/johnny-five/node_modules/node-abi": {
|
||||
"version": "2.30.1",
|
||||
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz",
|
||||
"integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==",
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"semver": "^5.4.1"
|
||||
}
|
||||
},
|
||||
"node_modules/johnny-five/node_modules/prebuild-install": {
|
||||
"version": "5.3.6",
|
||||
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz",
|
||||
"integrity": "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==",
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"detect-libc": "^1.0.3",
|
||||
"expand-template": "^2.0.3",
|
||||
"github-from-package": "0.0.0",
|
||||
"minimist": "^1.2.3",
|
||||
"mkdirp-classic": "^0.5.3",
|
||||
"napi-build-utils": "^1.0.1",
|
||||
"node-abi": "^2.7.0",
|
||||
"noop-logger": "^0.1.1",
|
||||
"npmlog": "^4.0.1",
|
||||
"pump": "^3.0.0",
|
||||
"rc": "^1.2.7",
|
||||
"simple-get": "^3.0.3",
|
||||
"tar-fs": "^2.0.0",
|
||||
"tunnel-agent": "^0.6.0",
|
||||
"which-pm-runs": "^1.0.0"
|
||||
},
|
||||
"bin": {
|
||||
"prebuild-install": "bin.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/johnny-five/node_modules/semver": {
|
||||
"version": "5.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
|
||||
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
|
||||
"optional": true,
|
||||
"bin": {
|
||||
"semver": "bin/semver"
|
||||
}
|
||||
},
|
||||
"node_modules/johnny-five/node_modules/serialport": {
|
||||
"version": "8.0.8",
|
||||
"resolved": "https://registry.npmjs.org/serialport/-/serialport-8.0.8.tgz",
|
||||
"integrity": "sha512-GEaMYbAk9chfGyxoVC27PHnKMUMOQOCAg+9umOhAgk88vH0H6DbQ9/Tj3lRwoj7lE+TLra75P/0l1RXMfX4yQg==",
|
||||
"hasInstallScript": true,
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"@serialport/binding-mock": "^8.0.6",
|
||||
"@serialport/bindings": "^8.0.8",
|
||||
"@serialport/parser-byte-length": "^8.0.6",
|
||||
"@serialport/parser-cctalk": "^8.0.6",
|
||||
"@serialport/parser-delimiter": "^8.0.6",
|
||||
"@serialport/parser-readline": "^8.0.6",
|
||||
"@serialport/parser-ready": "^8.0.6",
|
||||
"@serialport/parser-regex": "^8.0.6",
|
||||
"@serialport/stream": "^8.0.6",
|
||||
"debug": "^4.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/johnny-five/node_modules/simple-get": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz",
|
||||
"integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==",
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"decompress-response": "^4.2.0",
|
||||
"once": "^1.3.1",
|
||||
"simple-concat": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/johnny-five/node_modules/supports-color": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
|
||||
"integrity": "sha512-ycQR/UbvI9xIlEdQT1TQqwoXtEldExbCEAJgRo5YXlmSKjv6ThHnP9/vwGa1gr19Gfw+LkFd7KqYMhzrRC5JYw==",
|
||||
"dependencies": {
|
||||
"has-flag": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/lodash.clonedeep": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
|
||||
"integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ=="
|
||||
},
|
||||
"node_modules/lodash.debounce": {
|
||||
"version": "4.0.8",
|
||||
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
|
||||
"integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="
|
||||
},
|
||||
"node_modules/lru-cache": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
|
||||
@ -1840,6 +2170,11 @@
|
||||
"resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz",
|
||||
"integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w=="
|
||||
},
|
||||
"node_modules/nanotimer": {
|
||||
"version": "0.3.10",
|
||||
"resolved": "https://registry.npmjs.org/nanotimer/-/nanotimer-0.3.10.tgz",
|
||||
"integrity": "sha512-6rStzhDIdmUcv3Dcs75YHfFr/RTBs42VWLobMXmgixBKoIFbpZuB9bp90FjZnwdidN4gsGY5rjHkBEato7vyAQ=="
|
||||
},
|
||||
"node_modules/napi-build-utils": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
|
||||
@ -2486,6 +2821,14 @@
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/temporal": {
|
||||
"version": "0.7.1",
|
||||
"resolved": "https://registry.npmjs.org/temporal/-/temporal-0.7.1.tgz",
|
||||
"integrity": "sha512-6Xd3c2llgkjGP7kn2LXuiHZ8/cRiIX5EsPcvn8slkAcayWEzf7xuXxd7BcgUm2djmI1DPFUSMFeFwQcLVMLsOw==",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/to-regex-range": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
|
||||
|
@ -15,6 +15,7 @@
|
||||
"chalk": "^4.1.2",
|
||||
"express": "^4.18.3",
|
||||
"firmata": "^2.3.0",
|
||||
"johnny-five": "^2.1.0",
|
||||
"nodemon": "^3.1.0",
|
||||
"serialport": "^12.0.0",
|
||||
"socket.io": "^4.7.4"
|
||||
@ -22,6 +23,7 @@
|
||||
"devDependencies": {
|
||||
"@types/express": "^4.17.21",
|
||||
"@types/firmata": "^0.19.8",
|
||||
"@types/johnny-five": "^2.1.9",
|
||||
"@types/nodemon": "^1.19.6",
|
||||
"@types/socket.io": "^3.0.2",
|
||||
"ts-node": "^10.9.2",
|
||||
|
6
src/controller/index.d.ts
vendored
6
src/controller/index.d.ts
vendored
@ -1,11 +1,11 @@
|
||||
|
||||
export type digitalValue = 'ON' | 'OFF';
|
||||
export type voltage = 'HIGH' | 'LOW';
|
||||
export type sPinModes = 'INPUT' | 'OUTPUT' | 'ANALOG' | 'PWM' | 'SERVO' |'SHIFT' |'I2C' |'ONEWIRE' |'STEPPER' |'SERIAL' |'PULLUP' |'IGNORE' |'PING_READ' | 'UNKOWN';
|
||||
export type voltage = 'HIGH' | 'LOW' | 'high' | 'low' | 1 | 0;
|
||||
export type sPinModes = 'INPUT' | 'OUTPUT' | 'ANALOG' | 'PWM' | 'SERVO';
|
||||
|
||||
export interface ChannelPins {
|
||||
pin: number,
|
||||
value: digitalValue
|
||||
value: boolean
|
||||
}
|
||||
|
||||
export interface ColorChannel {
|
||||
|
@ -1,7 +1,8 @@
|
||||
import { Request, Response } from "express";
|
||||
import { board } from "../setup";
|
||||
import { ChannelPins, digitalValue, voltage } from ".";
|
||||
import { digitalRead } from "../promises";
|
||||
import { analogRead, digitalRead } from "../promises";
|
||||
import { Led } from "johnny-five";
|
||||
|
||||
|
||||
export async function readLed (req: Request, res: Response) {
|
||||
@ -44,12 +45,12 @@ export async function writeLed (req: Request, res: Response) {
|
||||
switch (act) {
|
||||
case 'on':
|
||||
state = 'ON';
|
||||
volt = 'HIGH';
|
||||
volt = 1;
|
||||
console.log(`${req.hostname} | ${pin} | LED: ${state}`);
|
||||
break;
|
||||
case 'off':
|
||||
state = 'OFF';
|
||||
volt = 'LOW';
|
||||
volt = 0;
|
||||
console.log(`${req.hostname} | ${pin} | LED: ${state}`);
|
||||
break;
|
||||
default:
|
||||
@ -60,7 +61,7 @@ export async function writeLed (req: Request, res: Response) {
|
||||
});
|
||||
}
|
||||
|
||||
board.digitalWrite(pin, board[volt]);
|
||||
board.digitalWrite(pin, volt);
|
||||
|
||||
res.status(200).json({
|
||||
status: 200,
|
||||
@ -79,39 +80,47 @@ export async function writeLed (req: Request, res: Response) {
|
||||
|
||||
export async function readRgbLed (req: Request, res: Response) {
|
||||
const r: number = Number.parseInt(req.body.r);
|
||||
const g: number = Number.parseInt(req.body.b);
|
||||
const g: number = Number.parseInt(req.body.g);
|
||||
const b: number = Number.parseInt(req.body.b);
|
||||
|
||||
const rgbPins: number[] = Object.values({ r, g, b });
|
||||
const pinStates: number[] = [];
|
||||
|
||||
for (let i = 0; i < rgbPins.length; i++) {
|
||||
const pin = rgbPins[i];
|
||||
|
||||
if (Number.isNaN(pin)) {
|
||||
return res.status(400).json({
|
||||
status: 400,
|
||||
message: `Invalid pin ${pin} param, it should be integer`
|
||||
});
|
||||
}
|
||||
|
||||
const state: number = await digitalRead(board, pin);
|
||||
pinStates.push(state);
|
||||
}
|
||||
|
||||
const led = new Led.RGB({
|
||||
pins: {
|
||||
red: r,
|
||||
green: g,
|
||||
blue: b
|
||||
},
|
||||
isAnode: true
|
||||
})
|
||||
|
||||
led.red = new Led(r);
|
||||
led.green = new Led(g);
|
||||
led.blue = new Led(b);
|
||||
|
||||
return res.status(200).json({
|
||||
status: 200,
|
||||
pin_state: {
|
||||
[r]: pinStates[0],
|
||||
[g]: pinStates[1],
|
||||
[b]: pinStates[2]
|
||||
[r]: led.red.isOn,
|
||||
[g]: led.green.isOn,
|
||||
[b]: led.blue.isOn
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export async function writeRgbLed (req: Request, res: Response) {
|
||||
const r: ChannelPins = req.body.r;
|
||||
const g: ChannelPins = req.body.b;
|
||||
const g: ChannelPins = req.body.g;
|
||||
const b: ChannelPins = req.body.b;
|
||||
|
||||
const rgbLeds: ChannelPins[] = Object.values({ r, g, b });
|
||||
@ -124,23 +133,27 @@ export async function writeRgbLed (req: Request, res: Response) {
|
||||
message: `Invalid pin ${led.pin} param, it should be integer`
|
||||
});
|
||||
}
|
||||
|
||||
switch (led.value) {
|
||||
case 'ON':
|
||||
board.analogWrite(led.pin, board.HIGH);
|
||||
console.log(`${req.hostname} | ${led.pin} | LED: ${led.value}`);
|
||||
break;
|
||||
case 'OFF':
|
||||
board.analogWrite(led.pin, board.LOW);
|
||||
console.log(`${req.hostname} | ${led.pin} | LED: ${led.value}`);
|
||||
break;
|
||||
default:
|
||||
console.log(`${req.hostname} | ${led.pin} | LED: INVALID VALUE`);
|
||||
}
|
||||
})
|
||||
|
||||
const pins: string[] = rgbLeds.map(c => `${c.pin}, `);
|
||||
const values: string[] = rgbLeds.map(c => `${c.value}, `);
|
||||
const led = new Led.RGB({
|
||||
pins: {
|
||||
red: r.pin,
|
||||
green: g.pin,
|
||||
blue: b.pin
|
||||
},
|
||||
isAnode: true
|
||||
})
|
||||
|
||||
led.red = new Led(r.pin);
|
||||
led.green = new Led(g.pin);
|
||||
led.blue = new Led(b.pin);
|
||||
|
||||
if (r.value == true) led.red.on(); else led.red.off();
|
||||
if (g.value == true) led.green.on(); else led.green.off();
|
||||
if (b.value == true) led.blue.on(); else led.blue.off();
|
||||
|
||||
const pins: string = rgbLeds.map(c => c.pin.toString()).join(", ");
|
||||
const values: string = rgbLeds.map(c => `${c.value}`).join(", ");
|
||||
|
||||
res.status(200).json({
|
||||
status: 200,
|
||||
|
@ -1,6 +1,7 @@
|
||||
import { Request, Response } from "express";
|
||||
import { board, suBoard } from "../setup";
|
||||
import { sPinModes } from ".";
|
||||
import { Pin } from "johnny-five";
|
||||
|
||||
export function readPin (req: Request, res: Response) {
|
||||
const pin: number = Number.parseInt(req.params.p);
|
||||
@ -34,7 +35,7 @@ export function setPin (req: Request, res: Response) {
|
||||
});
|
||||
}
|
||||
|
||||
board.pinMode(pin, board.MODES[mode]);
|
||||
board.pinMode(pin, Pin[mode]);
|
||||
|
||||
suBoard.PINS.pwm.push(pin);
|
||||
suBoard.sort();
|
||||
|
@ -32,4 +32,8 @@ app.listen(port, host, () => {
|
||||
console.log(chalk.green(`Board at port ${comport} Connected!! \(^o^)/`));
|
||||
suBoard.connected = true;
|
||||
})
|
||||
|
||||
board.on('exit', () => {
|
||||
console.log("Bye bye");
|
||||
})
|
||||
});
|
@ -1,5 +1,5 @@
|
||||
import { NextFunction, Request, Response } from "express";
|
||||
import { suBoard } from "../setup";
|
||||
import { board, suBoard } from "../setup";
|
||||
|
||||
export function isBoardConnected (req: Request, res: Response, next: NextFunction) {
|
||||
if (suBoard.connected) {
|
||||
|
@ -1,6 +1,6 @@
|
||||
import Board, { PIN_MODE } from "firmata";
|
||||
import { Board } from "johnny-five";
|
||||
|
||||
export function digitalRead (board: Board, pin: number): Promise<PIN_MODE | number> {
|
||||
export function digitalRead (board: Board, pin: number): Promise<number> {
|
||||
return new Promise((resolve, reject) => {
|
||||
board.digitalRead(pin, (val) => {
|
||||
resolve(val);
|
||||
|
@ -1,7 +1,11 @@
|
||||
import Firmata from 'firmata';
|
||||
import { SuBoard } from './support';
|
||||
import { Board } from 'johnny-five';
|
||||
|
||||
export const comport: string = '/dev/ttyUSB1';
|
||||
export const board: Firmata = new Firmata(comport);
|
||||
export const comport: string = '/dev/ttyUSB0';
|
||||
export const board: Board = new Board({
|
||||
port: comport,
|
||||
repl: false,
|
||||
debug: false
|
||||
});
|
||||
|
||||
export const suBoard: SuBoard = new SuBoard();
|
@ -1,17 +0,0 @@
|
||||
import Firmata, { PIN_MODE, PIN_STATE } from 'firmata';
|
||||
|
||||
const board = new Firmata('/dev/ttyUSB2');
|
||||
|
||||
board.on('ready', async () => {
|
||||
// board.analogWrite(0, 255);
|
||||
// board.analogWrite(1, 255);
|
||||
// board.analogWrite(2, 255);
|
||||
|
||||
board.analogRead(0, (val) => {
|
||||
console.log(val);
|
||||
})
|
||||
|
||||
while (true) {
|
||||
await new Promise (resolve => setTimeout(resolve, 90));
|
||||
}
|
||||
})
|
@ -1,17 +0,0 @@
|
||||
const Firmata = require('firmata');
|
||||
const board = new Firmata('/dev/ttyUSB0');
|
||||
|
||||
board.on('ready', async () => {
|
||||
const led = 12;
|
||||
|
||||
board.pinMode(led, board.MODES.OUTPUT);
|
||||
|
||||
while (true) {
|
||||
board.digitalWrite(led, board.HIGH);
|
||||
console.log("ON");
|
||||
await new Promise(resolve => setTimeout(resolve, 300));
|
||||
board.digitalWrite(led, board.LOW);
|
||||
console.log("OFF");
|
||||
await new Promise(resolve => setTimeout(resolve, 300));
|
||||
}
|
||||
});
|
13
test/serial/blink.ts
Normal file
13
test/serial/blink.ts
Normal file
@ -0,0 +1,13 @@
|
||||
import Firmata from 'firmata';
|
||||
import { Board, Pin, PinMode } from "johnny-five";
|
||||
|
||||
const board = new Board({
|
||||
port: '/dev/ttyUSB0',
|
||||
repl: false
|
||||
});
|
||||
|
||||
board.on('ready', () => {
|
||||
board.pinMode(13, Pin.OUTPUT);
|
||||
|
||||
board.digitalWrite(13, 1);
|
||||
})
|
11
test/serial/checkBoard.ts
Normal file
11
test/serial/checkBoard.ts
Normal file
@ -0,0 +1,11 @@
|
||||
import { Board } from "johnny-five";
|
||||
|
||||
const board: Board = new Board({
|
||||
port: '/dev/ttyUSB0',
|
||||
debug: false,
|
||||
repl: false
|
||||
});
|
||||
|
||||
setInterval(() => {
|
||||
console.log(board.isReady);
|
||||
}, 400);
|
27
test/serial/events.ts
Normal file
27
test/serial/events.ts
Normal file
@ -0,0 +1,27 @@
|
||||
import { Board } from "johnny-five";
|
||||
|
||||
const board: Board = new Board({
|
||||
port: '/dev/ttyUSB1',
|
||||
debug: false,
|
||||
repl: false
|
||||
});
|
||||
|
||||
board.on('ready', () => {
|
||||
console.log("Board is ready");
|
||||
})
|
||||
|
||||
board.on('close', () => {
|
||||
console.log("Board is close");
|
||||
})
|
||||
|
||||
board.on('connect', () => {
|
||||
console.log("Board is connect");
|
||||
})
|
||||
|
||||
board.on('exit', () => {
|
||||
console.log("Board is exit");
|
||||
})
|
||||
|
||||
board.on('fail', () => {
|
||||
console.log("Board is fail");
|
||||
})
|
@ -1,18 +0,0 @@
|
||||
import Firmata from 'firmata';
|
||||
|
||||
const board = new Firmata('/dev/ttyUSB2');
|
||||
|
||||
board.on('ready', async () => {
|
||||
board.analogRead(2, (val) => {
|
||||
console.log(board.analogPins[2]);
|
||||
const output = board.pins.map((p, i) => {
|
||||
return `Pin ${i}: ${p.value}`
|
||||
}).join(", ");
|
||||
|
||||
console.log(output);
|
||||
})
|
||||
|
||||
while (true) {
|
||||
await new Promise(resolve => setTimeout(resolve, 200));
|
||||
}
|
||||
})
|
@ -1,20 +0,0 @@
|
||||
const Firmata = require('firmata');
|
||||
const board = new Firmata('/dev/ttyUSB0');
|
||||
|
||||
board.on('ready', async () => {
|
||||
const led = 12;
|
||||
|
||||
board.pinMode(led, board.MODES.OUTPUT);
|
||||
|
||||
let state = board.LOW;
|
||||
|
||||
board.digitalWrite(led, board.HIGH);
|
||||
|
||||
state = board.pins[led].value;
|
||||
|
||||
while (true) {
|
||||
console.log(state);
|
||||
|
||||
await new Promise(resolve => setTimeout(resolve, 1000));
|
||||
}
|
||||
});
|
@ -1,11 +0,0 @@
|
||||
import Firmata from 'firmata';
|
||||
|
||||
const board = new Firmata('/dev/ttyUSB1');
|
||||
|
||||
board.on('ready', () => {
|
||||
board.pinMode(0, Firmata.PIN_MODE.INPUT);
|
||||
|
||||
board.analogRead(0, (val) => {
|
||||
console.log(val);
|
||||
})
|
||||
})
|
25
test/serial/rgbLed.js
Normal file
25
test/serial/rgbLed.js
Normal file
@ -0,0 +1,25 @@
|
||||
const { Board, Led } = require("johnny-five");
|
||||
|
||||
const board = new Board({
|
||||
port: '/dev/ttyUSB0',
|
||||
repl: false,
|
||||
debug: false
|
||||
})
|
||||
|
||||
board.on('ready', () => {
|
||||
const led = new Led.RGB([7, 6, 5]);
|
||||
|
||||
let ins = 252;
|
||||
board.loop(10, () => {
|
||||
led.color("#0000FF");
|
||||
led.intensity(ins);
|
||||
ins--;
|
||||
if (ins < 1) {
|
||||
ins = 255;
|
||||
}
|
||||
})
|
||||
|
||||
board.analogRead(0, (val) => {
|
||||
console.log(val);
|
||||
})
|
||||
});
|
28
test/serial/rgbLed.ts
Normal file
28
test/serial/rgbLed.ts
Normal file
@ -0,0 +1,28 @@
|
||||
import { Board, Led } from "johnny-five";
|
||||
|
||||
const board = new Board({
|
||||
port: '/dev/ttyUSB0',
|
||||
repl: false,
|
||||
debug: false
|
||||
})
|
||||
|
||||
board.on('ready', () => {
|
||||
const led = new Led.RGB({
|
||||
pins: {
|
||||
red: 7,
|
||||
green: 6,
|
||||
blue: 5,
|
||||
},
|
||||
isAnode: true
|
||||
})
|
||||
|
||||
let ins = 100;
|
||||
|
||||
board.loop(10, () => {
|
||||
led.intensity(ins);
|
||||
ins--;
|
||||
if (ins < 1) {
|
||||
ins = 100;
|
||||
}
|
||||
})
|
||||
});
|
Loading…
x
Reference in New Issue
Block a user