johnny-five is very promising

This commit is contained in:
Nomi Nonsense (Nonszy) 2024-03-03 15:22:51 +07:00
parent ca72e479f3
commit 71c4ec5072
20 changed files with 511 additions and 123 deletions

343
package-lock.json generated
View File

@ -13,6 +13,7 @@
"chalk": "^4.1.2", "chalk": "^4.1.2",
"express": "^4.18.3", "express": "^4.18.3",
"firmata": "^2.3.0", "firmata": "^2.3.0",
"johnny-five": "^2.1.0",
"nodemon": "^3.1.0", "nodemon": "^3.1.0",
"serialport": "^12.0.0", "serialport": "^12.0.0",
"socket.io": "^4.7.4" "socket.io": "^4.7.4"
@ -20,6 +21,7 @@
"devDependencies": { "devDependencies": {
"@types/express": "^4.17.21", "@types/express": "^4.17.21",
"@types/firmata": "^0.19.8", "@types/firmata": "^0.19.8",
"@types/johnny-five": "^2.1.9",
"@types/nodemon": "^1.19.6", "@types/nodemon": "^1.19.6",
"@types/socket.io": "^3.0.2", "@types/socket.io": "^3.0.2",
"ts-node": "^10.9.2", "ts-node": "^10.9.2",
@ -424,6 +426,15 @@
"integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==",
"dev": true "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": { "node_modules/@types/mime": {
"version": "1.3.5", "version": "1.3.5",
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
@ -744,6 +755,12 @@
"node": ">=8" "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": { "node_modules/buffer": {
"version": "5.7.1", "version": "5.7.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "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", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" "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": { "node_modules/etag": {
"version": "1.8.1", "version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "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", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" "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": { "node_modules/lru-cache": {
"version": "6.0.0", "version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "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", "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz",
"integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" "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": { "node_modules/napi-build-utils": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
@ -2486,6 +2821,14 @@
"node": ">=6" "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": { "node_modules/to-regex-range": {
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",

View File

@ -15,6 +15,7 @@
"chalk": "^4.1.2", "chalk": "^4.1.2",
"express": "^4.18.3", "express": "^4.18.3",
"firmata": "^2.3.0", "firmata": "^2.3.0",
"johnny-five": "^2.1.0",
"nodemon": "^3.1.0", "nodemon": "^3.1.0",
"serialport": "^12.0.0", "serialport": "^12.0.0",
"socket.io": "^4.7.4" "socket.io": "^4.7.4"
@ -22,6 +23,7 @@
"devDependencies": { "devDependencies": {
"@types/express": "^4.17.21", "@types/express": "^4.17.21",
"@types/firmata": "^0.19.8", "@types/firmata": "^0.19.8",
"@types/johnny-five": "^2.1.9",
"@types/nodemon": "^1.19.6", "@types/nodemon": "^1.19.6",
"@types/socket.io": "^3.0.2", "@types/socket.io": "^3.0.2",
"ts-node": "^10.9.2", "ts-node": "^10.9.2",

View File

@ -1,11 +1,11 @@
export type digitalValue = 'ON' | 'OFF'; export type digitalValue = 'ON' | 'OFF';
export type voltage = 'HIGH' | 'LOW'; export type voltage = 'HIGH' | 'LOW' | 'high' | 'low' | 1 | 0;
export type sPinModes = 'INPUT' | 'OUTPUT' | 'ANALOG' | 'PWM' | 'SERVO' |'SHIFT' |'I2C' |'ONEWIRE' |'STEPPER' |'SERIAL' |'PULLUP' |'IGNORE' |'PING_READ' | 'UNKOWN'; export type sPinModes = 'INPUT' | 'OUTPUT' | 'ANALOG' | 'PWM' | 'SERVO';
export interface ChannelPins { export interface ChannelPins {
pin: number, pin: number,
value: digitalValue value: boolean
} }
export interface ColorChannel { export interface ColorChannel {

View File

@ -1,7 +1,8 @@
import { Request, Response } from "express"; import { Request, Response } from "express";
import { board } from "../setup"; import { board } from "../setup";
import { ChannelPins, digitalValue, voltage } from "."; 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) { export async function readLed (req: Request, res: Response) {
@ -44,12 +45,12 @@ export async function writeLed (req: Request, res: Response) {
switch (act) { switch (act) {
case 'on': case 'on':
state = 'ON'; state = 'ON';
volt = 'HIGH'; volt = 1;
console.log(`${req.hostname} | ${pin} | LED: ${state}`); console.log(`${req.hostname} | ${pin} | LED: ${state}`);
break; break;
case 'off': case 'off':
state = 'OFF'; state = 'OFF';
volt = 'LOW'; volt = 0;
console.log(`${req.hostname} | ${pin} | LED: ${state}`); console.log(`${req.hostname} | ${pin} | LED: ${state}`);
break; break;
default: 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({ res.status(200).json({
status: 200, status: 200,
@ -79,43 +80,51 @@ export async function writeLed (req: Request, res: Response) {
export async function readRgbLed (req: Request, res: Response) { export async function readRgbLed (req: Request, res: Response) {
const r: number = Number.parseInt(req.body.r); 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 b: number = Number.parseInt(req.body.b);
const rgbPins: number[] = Object.values({ r, g, b }); const rgbPins: number[] = Object.values({ r, g, b });
const pinStates: number[] = [];
for (let i = 0; i < rgbPins.length; i++) { for (let i = 0; i < rgbPins.length; i++) {
const pin = rgbPins[i]; const pin = rgbPins[i];
if (Number.isNaN(pin)) { if (Number.isNaN(pin)) {
return res.status(400).json({ return res.status(400).json({
status: 400, status: 400,
message: `Invalid pin ${pin} param, it should be integer` 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({ return res.status(200).json({
status: 200, status: 200,
pin_state: { pin_state: {
[r]: pinStates[0], [r]: led.red.isOn,
[g]: pinStates[1], [g]: led.green.isOn,
[b]: pinStates[2] [b]: led.blue.isOn
} }
}); });
} }
export async function writeRgbLed (req: Request, res: Response) { export async function writeRgbLed (req: Request, res: Response) {
const r: ChannelPins = req.body.r; 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 b: ChannelPins = req.body.b;
const rgbLeds: ChannelPins[] = Object.values({ r, g, b }); const rgbLeds: ChannelPins[] = Object.values({ r, g, b });
try { try {
rgbLeds.forEach((led, i) => { rgbLeds.forEach((led, i) => {
if (Number.isNaN(led.pin)) { if (Number.isNaN(led.pin)) {
@ -124,23 +133,27 @@ export async function writeRgbLed (req: Request, res: Response) {
message: `Invalid pin ${led.pin} param, it should be integer` 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 led = new Led.RGB({
const values: string[] = rgbLeds.map(c => `${c.value}, `); 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({ res.status(200).json({
status: 200, status: 200,

View File

@ -1,6 +1,7 @@
import { Request, Response } from "express"; import { Request, Response } from "express";
import { board, suBoard } from "../setup"; import { board, suBoard } from "../setup";
import { sPinModes } from "."; import { sPinModes } from ".";
import { Pin } from "johnny-five";
export function readPin (req: Request, res: Response) { export function readPin (req: Request, res: Response) {
const pin: number = Number.parseInt(req.params.p); 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.PINS.pwm.push(pin);
suBoard.sort(); suBoard.sort();

View File

@ -32,4 +32,8 @@ app.listen(port, host, () => {
console.log(chalk.green(`Board at port ${comport} Connected!! (^o^)`)); console.log(chalk.green(`Board at port ${comport} Connected!! (^o^)`));
suBoard.connected = true; suBoard.connected = true;
}) })
board.on('exit', () => {
console.log("Bye bye");
})
}); });

View File

@ -1,5 +1,5 @@
import { NextFunction, Request, Response } from "express"; import { NextFunction, Request, Response } from "express";
import { suBoard } from "../setup"; import { board, suBoard } from "../setup";
export function isBoardConnected (req: Request, res: Response, next: NextFunction) { export function isBoardConnected (req: Request, res: Response, next: NextFunction) {
if (suBoard.connected) { if (suBoard.connected) {

View File

@ -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) => { return new Promise((resolve, reject) => {
board.digitalRead(pin, (val) => { board.digitalRead(pin, (val) => {
resolve(val); resolve(val);

View File

@ -1,7 +1,11 @@
import Firmata from 'firmata';
import { SuBoard } from './support'; import { SuBoard } from './support';
import { Board } from 'johnny-five';
export const comport: string = '/dev/ttyUSB1'; export const comport: string = '/dev/ttyUSB0';
export const board: Firmata = new Firmata(comport); export const board: Board = new Board({
port: comport,
repl: false,
debug: false
});
export const suBoard: SuBoard = new SuBoard(); export const suBoard: SuBoard = new SuBoard();

View File

@ -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));
}
})

View File

@ -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
View 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
View 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
View 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");
})

View File

@ -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));
}
})

View File

@ -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));
}
});

View File

@ -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
View 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
View 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;
}
})
});

View File