first commit
This commit is contained in:
commit
a5a0434432
1126 changed files with 439481 additions and 0 deletions
170
Software/Scratch/s2pifiles/piGrovePiExtension.js
Executable file
170
Software/Scratch/s2pifiles/piGrovePiExtension.js
Executable file
|
|
@ -0,0 +1,170 @@
|
|||
// Modified piGPIOExtension.js for GrovePi
|
||||
// Ver 2.25Feb18
|
||||
new (function() {
|
||||
var ext = this;
|
||||
var fs = require('fs');
|
||||
var websocket;
|
||||
var sensorSplit;
|
||||
var sensorDict = {};
|
||||
var variableDict = {};
|
||||
|
||||
|
||||
function doConnect()
|
||||
{
|
||||
websocket = new WebSocket('ws://localhost:8000/')
|
||||
websocket.onopen = function(evt) { onOpen(evt) }
|
||||
websocket.onclose = function(evt) { onClose(evt) }
|
||||
websocket.onmessage = function(evt) { onMessage(evt) }
|
||||
websocket.onerror = function(evt) { onError(evt) }
|
||||
console.log('websocket connected from piGrovePiExtension')
|
||||
}
|
||||
|
||||
function onOpen(evt) {
|
||||
console.log('websocket opened')
|
||||
}
|
||||
|
||||
function onClose(evt) {
|
||||
console.log('websocket closed')
|
||||
}
|
||||
|
||||
function onMessage(evt) {
|
||||
var data = evt.data
|
||||
console.log('msg from sgh:' + data)
|
||||
sensorSplit = data.split(":");
|
||||
sensorDict[sensorSplit[0]] = sensorSplit[1];
|
||||
// console.log('sensorDict=' + JSON.stringify(sensorDict))
|
||||
}
|
||||
|
||||
function onError(evt) {
|
||||
var error = evt.data
|
||||
console.log('websocket error', error);
|
||||
|
||||
websocket.close();
|
||||
}
|
||||
|
||||
function sendMessage(message) {
|
||||
websocket.send(message);
|
||||
console.log('msg to sgh:' + message)
|
||||
}
|
||||
|
||||
function doDisconnect() {
|
||||
websocket.close();
|
||||
}
|
||||
|
||||
|
||||
|
||||
doConnect();
|
||||
|
||||
// Cleanup function when the extension is unloaded
|
||||
ext._shutdown = function ()
|
||||
{
|
||||
for (pin = 2; pin < 28; pin++)
|
||||
{
|
||||
if (fs.existsSync("/sys/class/gpio/gpio" + pin))
|
||||
fs.writeFileSync("/sys/class/gpio/unexport", pin, "utf8");
|
||||
}
|
||||
};
|
||||
|
||||
// Status reporting code
|
||||
// Use this to report missing hardware, plugin or unsupported browser
|
||||
ext._getStatus = function ()
|
||||
{
|
||||
return {status: 2, msg: 'Ready'};
|
||||
};
|
||||
|
||||
ext.set_gpio = function (pin, val)
|
||||
{
|
||||
if (pin === '' || pin < 0 || pin > 27) return;
|
||||
|
||||
var dir = 0, lev;
|
||||
if (val == 'output high') lev = 1;
|
||||
else if (val == 'output low') lev = 0;
|
||||
else dir = 1;
|
||||
|
||||
// check the pin is exported
|
||||
if (!fs.existsSync("/sys/class/gpio/gpio" + pin))
|
||||
|
||||
fs.writeFileSync("/sys/class/gpio/export", pin, "utf8");
|
||||
|
||||
// the ownership of direction takes time to establish, so try this until it succeeds
|
||||
while (true)
|
||||
{
|
||||
try {
|
||||
fs.writeFileSync("/sys/class/gpio/gpio" + pin + "/direction", dir == 0 ? "out" : "in", "utf8");
|
||||
break;
|
||||
}
|
||||
catch (error) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// set the output value
|
||||
if (dir == 0)
|
||||
sendMessage('pin ' + pin + ' = ' + (lev == 1 ? "1" : "0"));
|
||||
fs.writeFileSync("/sys/class/gpio/gpio" + pin + "/value", lev == 1 ? "1" : "0", "utf8");
|
||||
};
|
||||
|
||||
ext.get_gpio = function (pin)
|
||||
{
|
||||
if (pin === '' || pin < 0 || pin > 27) return;
|
||||
|
||||
// check the pin is exported
|
||||
if (!fs.existsSync("/sys/class/gpio/gpio" + pin))
|
||||
fs.writeFileSync("/sys/class/gpio/export", pin);
|
||||
|
||||
// read the pin value
|
||||
var data = fs.readFileSync ("/sys/class/gpio/gpio" + pin + "/value", 'utf8');
|
||||
|
||||
if (data.slice(0,1) == "1") return true;
|
||||
else return false;
|
||||
};
|
||||
|
||||
//my code
|
||||
|
||||
ext.send_broadcast1 = function (bmsg1 ,bmsg2)
|
||||
{
|
||||
sendMessage('broadcast "' + bmsg1 + bmsg2 + '"');
|
||||
};
|
||||
|
||||
ext.send_broadcast2 = function (bmsg1 ,bmsg2,bmsg3)
|
||||
{
|
||||
sendMessage('broadcast "' + bmsg1 + bmsg2 + bmsg3 + '"');
|
||||
};
|
||||
|
||||
ext.send_broadcast0 = function (bmsg1)
|
||||
{
|
||||
sendMessage('broadcast "' + bmsg1 + '"');
|
||||
};
|
||||
|
||||
ext.get_sensorMsgs = function (sensorName)
|
||||
{
|
||||
console.log(sensorName.toLowerCase() + ':' + sensorDict[sensorName.toLowerCase()])
|
||||
//fs.writeFileSync("/home/pi/GrovePiSensors.json", JSON.stringify(sensorDict), "utf8");
|
||||
return sensorDict[sensorName.toLowerCase()];
|
||||
};
|
||||
|
||||
|
||||
// Block and block menu descriptions
|
||||
var descriptor = {
|
||||
blocks: [
|
||||
|
||||
[' ', 'broadcast %m.broadcastType %s', 'send_broadcast1', 'digitalRead','0'],
|
||||
[' ', 'broadcast %m.broadcastType2 %m.ports %s', 'send_broadcast2', 'analogWrite','0','0'],
|
||||
[' ', 'broadcast %m.broadcastType0', 'send_broadcast0', 'take_picture'],
|
||||
['r', '%m.sensorvals value', 'get_sensorMsgs', 'digitalread'],
|
||||
|
||||
|
||||
],
|
||||
menus: {
|
||||
sensorvals: ['digitalread','analogread','moisture','light','sound','rotary','distance','temp','humidty','folder','camera'],
|
||||
broadcastType: ['digitalRead','analogRead','digitalWriteHigh','moisture','light','sound','rotary','distance','button','relay','temp','humidty','folder','take_picture','speak','lcdcol','lcdtxt'],
|
||||
broadcastType2: ['analogWrite','buzzer','led'],
|
||||
broadcastType0: ['take_picture'],
|
||||
ports: ['0','1','2','3','4','5','6','7']
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
// Register the extension
|
||||
ScratchExtensions.register('GrovePi', descriptor, ext);
|
||||
})();
|
||||
Loading…
Add table
Add a link
Reference in a new issue