johnny-five is very promising

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

View File

@@ -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 {

View File

@@ -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,43 +80,51 @@ 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 });
try {
rgbLeds.forEach((led, i) => {
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`
});
}
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,

View File

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

View File

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

View File

@@ -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) {

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

View File

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