working servo and photoresistor with websocket
This commit is contained in:
parent
f897b3bf50
commit
80bedd3cb3
@ -8,6 +8,7 @@
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"start": "nodemon",
|
||||
"ports": "ts-node src/ports/print.ts",
|
||||
"test-blink": "nodemon test/blink.js"
|
||||
},
|
||||
"dependencies": {
|
||||
|
@ -3,10 +3,9 @@ import { Piezo } from "johnny-five";
|
||||
import { Pitch } from "../melodies";
|
||||
|
||||
export function piezoTone (req: Request, res: Response): Response {
|
||||
const pin: number = Number.parseInt(req.params.p);
|
||||
const note: string = req.params.n;
|
||||
const { pin, note }: { pin: number, note: string } = req.body;
|
||||
|
||||
const piezo = new Piezo(pin);
|
||||
const piezo: Piezo = new Piezo(pin);
|
||||
|
||||
piezo.play({
|
||||
song: note.toUpperCase(),
|
||||
@ -21,13 +20,7 @@ export function piezoTone (req: Request, res: Response): Response {
|
||||
}
|
||||
|
||||
export function piezoNoTone (req: Request, res: Response): Response {
|
||||
const pin: number = Number.parseInt(req.params.p);
|
||||
if (Number.isNaN(pin)) {
|
||||
return res.status(400).json({
|
||||
status: 400,
|
||||
message: 'Invalid pin param, it should be integer'
|
||||
});
|
||||
}
|
||||
const { pin }: { pin: number } = req.body;
|
||||
|
||||
new Piezo(pin).noTone();
|
||||
|
||||
@ -41,18 +34,17 @@ interface MusicSheet {
|
||||
}
|
||||
|
||||
export function piezoPlayNotes (req: Request, res: Response): Response {
|
||||
const pin: number = Number.parseInt(req.params.p);
|
||||
const { pin }: { pin: number } = req.body;
|
||||
const { notes, beats, tempo }: MusicSheet = req.body;
|
||||
|
||||
if (Number.isNaN(pin)) {
|
||||
return res.status(400).json({
|
||||
status: 400,
|
||||
message: 'Invalid pin param, it should be integer'
|
||||
});
|
||||
}
|
||||
|
||||
const piezo: Piezo = new Piezo(pin);
|
||||
const song: [frequency: string, duration: number][] = notes.map((note): [frequency: string, duration: number] => { return [note, beats]});
|
||||
const song: [frequency: string, duration: number][] = notes
|
||||
.map((note, i): [frequency: string, duration: number] => {
|
||||
const beat = notes[i+1] && notes[i+1].trim() == "-" ? beats*2 : beats;
|
||||
return [note, beat]
|
||||
})
|
||||
.filter((note) => note[0].trim() != "-");
|
||||
|
||||
const notesS: string = notes.join(", ");
|
||||
|
||||
piezo.play({ song, tempo });
|
||||
|
@ -4,7 +4,7 @@ import { sPinModes } from ".";
|
||||
import { Pin } from "johnny-five";
|
||||
|
||||
export function readPin (req: Request, res: Response) {
|
||||
const pin: number = Number.parseInt(req.params.p);
|
||||
const pin: string = req.params.p;
|
||||
|
||||
const { mode } = board.pins[pin];
|
||||
|
||||
@ -18,7 +18,7 @@ export function readPin (req: Request, res: Response) {
|
||||
}
|
||||
|
||||
export function setPin (req: Request, res: Response) {
|
||||
const pin: number = Number.parseInt(req.params.p);
|
||||
const pin: string = req.params.p;
|
||||
const mode: sPinModes | string = req.params.m.toUpperCase();
|
||||
|
||||
board.pinMode(pin, Pin[mode]);
|
||||
|
@ -4,14 +4,18 @@ import { board } from "../setup";
|
||||
export default (socket: Socket) => {
|
||||
console.log(`${socket.id} | ${socket.client.request.headers.host} | Joined`);
|
||||
|
||||
socket.on("control-servo", (pin: number, angle: number) => {
|
||||
socket.on("control-servo", (p: string, ang: string) => {
|
||||
const pin = Number.parseInt(p);
|
||||
const angle = Number.parseInt(ang);
|
||||
|
||||
board.servoWrite(pin, angle);
|
||||
console.log();
|
||||
console.log(socket.id, pin, angle);
|
||||
})
|
||||
|
||||
socket.on("read-photoresistor", (pin: string) => {
|
||||
board.analogRead(pin, (value) => {
|
||||
socket.emit("read-photoresistor", value);
|
||||
console.log(socket.id, "A"+pin, value);
|
||||
});
|
||||
})
|
||||
}
|
@ -13,7 +13,11 @@ import socketHandler from './handlers/socketHandler';
|
||||
|
||||
const app = express();
|
||||
const server = http.createServer(app);
|
||||
const io = new Server(server); // I have no experience at WebSocket, so.. forgive me :)
|
||||
const io = new Server(server, {
|
||||
cors: {
|
||||
origin: "*"
|
||||
}
|
||||
}); // I have no experience at WebSocket, so.. forgive me :)
|
||||
|
||||
const host = 'localhost';
|
||||
const port = 3000;
|
||||
@ -27,7 +31,7 @@ app.use('/', view);
|
||||
app.use('/api-arduino', isBoardConnected, api);
|
||||
|
||||
console.log("\nRunning Server...");
|
||||
app.listen(port, host, () => {
|
||||
server.listen(port, () => {
|
||||
console.log(`Server is connected and running in ${host} at port ${port} 🗣️🗣️🗣️`);
|
||||
console.log(`* Press ${chalk.bold(chalk.yellow("CTRL+C"))} to exit`);
|
||||
console.log(`* URL: ${chalk.bold(`http://${host}:${port}/\n`)}`);
|
||||
|
8
src/ports/print.ts
Normal file
8
src/ports/print.ts
Normal file
@ -0,0 +1,8 @@
|
||||
import { ReadPorts } from "./read";
|
||||
|
||||
ReadPorts().then((ports) => {
|
||||
console.log(`${ports.length} Ports available`);
|
||||
ports.forEach((port, i) => {
|
||||
console.log((i+1) + ", " + port);
|
||||
})
|
||||
})
|
@ -12,8 +12,8 @@ router.get('/hello', (req, res: Response): Response<string> => {
|
||||
return res.status(200).send("Hello");
|
||||
})
|
||||
|
||||
router.get('/pin/:p', isPinNumeric, readPin);
|
||||
router.patch('/pin/:p/:m', isPinNumeric, setPin);
|
||||
router.get('/pin/:p', readPin);
|
||||
router.patch('/pin/:p/:m', setPin);
|
||||
|
||||
router.get('/led/:p', isPinNumeric, readLed);
|
||||
router.patch('/led/:p/:a', isPinNumeric, writeLed);
|
||||
@ -21,8 +21,8 @@ router.patch('/led/:p/:a', isPinNumeric, writeLed);
|
||||
router.get('/rgb-led', readRgbLed);
|
||||
router.patch('/rgb-led/', writeRgbLed);
|
||||
|
||||
router.patch('/piezo/:p/:n', isPinNumeric, piezoTone);
|
||||
router.patch('/piezo/stop/:p/', isPinNumeric, piezoNoTone);
|
||||
router.patch('/piezo/music/:p', isPinNumeric, piezoPlayNotes);
|
||||
router.patch('/piezo/', piezoTone);
|
||||
router.patch('/piezo/stop/', piezoNoTone);
|
||||
router.patch('/piezo/music/', piezoPlayNotes);
|
||||
|
||||
export default router;
|
15
test/serial/photoresistor.ts
Normal file
15
test/serial/photoresistor.ts
Normal file
@ -0,0 +1,15 @@
|
||||
import { Board, Pin } from "johnny-five";
|
||||
|
||||
const board: Board = new Board({
|
||||
port: '/dev/ttyUSB0',
|
||||
debug: false,
|
||||
repl: false
|
||||
});
|
||||
|
||||
board.on("ready", async () => {
|
||||
board.pinMode(14, Pin.INPUT);
|
||||
|
||||
board.analogRead(0, (val) => {
|
||||
console.log(val);
|
||||
})
|
||||
});
|
19
test/serial/servo.ts
Normal file
19
test/serial/servo.ts
Normal file
@ -0,0 +1,19 @@
|
||||
import { Board, Pin, PinMode } from "johnny-five";
|
||||
|
||||
const board: Board = new Board({
|
||||
port: '/dev/ttyUSB0',
|
||||
debug: false,
|
||||
repl: false
|
||||
});
|
||||
|
||||
board.on("ready", async () => {
|
||||
board.pinMode(9, Pin.SERVO);
|
||||
board.servoWrite(9, 0);
|
||||
|
||||
while (true) {
|
||||
board.servoWrite(9, 180);
|
||||
await new Promise(resolve => setTimeout(resolve, 1000));
|
||||
board.servoWrite(9, 0);
|
||||
await new Promise(resolve => setTimeout(resolve, 1000));
|
||||
}
|
||||
});
|
19
test/websocket/common.ts
Normal file
19
test/websocket/common.ts
Normal file
@ -0,0 +1,19 @@
|
||||
import http from 'node:http';
|
||||
import express from 'express';
|
||||
import { Server } from "socket.io";
|
||||
|
||||
const app = express();
|
||||
const server = http.createServer(app);
|
||||
const io = new Server(server);
|
||||
|
||||
io.on("connection", (socket) => {
|
||||
console.log("Connected");
|
||||
|
||||
socket.on("message", (message) => {
|
||||
console.log(message);
|
||||
})
|
||||
})
|
||||
|
||||
server.listen(3001, "localhost", () => {
|
||||
console.log("Common server is running");
|
||||
})
|
Loading…
x
Reference in New Issue
Block a user