Ich möchte einführende Programmierung mit Digisparks RGB Shield (nicht LED Shield) durchführen, daher ist dies eine großartige Einführung in die Programmierung von Scratch (ScratchX) bis Digispark Zu bedienen. ** * Wenn Sie es tatsächlich tun, tun Sie es bitte auf eigenes Risiko. ** ** **
Richten Sie einen lokalen Server unter http: // localhost: 9000 mit + Flasche ein.
Digispark
libusb USB-Bibliothek Windows(Win7)
OSX(El Capitan 10.11)
brew install libusb
Linux(Ubuntu14.04)
sudo apt-get install libusb-dev
Python ** * Die Version war "3.5.0" in jeder Umgebung **
easy_install pip
pip install bottle pyusb
Bei benutzerlokalem Python unter Linux wurde beim Zugriff auf USB mit pyusb ein Berechtigungsfehler angezeigt. Dieser Beitrag auf StackOverflow -pyusb-libusb-require-root-sudo-permissions-on-linux) und USB-Geräte - Google Chrome. (Wenn man sich die Chrome-Seite ansieht, scheint es nicht auf Pyusb beschränkt zu sein.)
In meinem Fall erstellen Sie eine Datei mit dem Namen "50" digispark.rules in "/ etc / udev / rules.d /"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", MODE="0664", GROUP="plugdev"
Und neu gestartet.
ScratchX läuft auf Flash Player, daher sollte jeder Browser funktionieren, auf dem Flash Player ausgeführt wird.
app.py
#!python
#-*-coding:utf-8-*-
from __future__ import print_function
from __future__ import unicode_literals
from __future__ import division
# for bottle
from bottle import route, run, template, request, response, static_file
# for scratchx
import usb
import sys
sys.path.append("..")
from arduino.usbdevice import ArduinoUsbDevice
theDevice = None
@route("/")
def top():
return '''
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<a href="http://scratchx.org/?url=http://localhost:9000/main.js">ScratchX</a>
</body>
</html>
'''
@route("/<filepath:path>")
def server_static(filepath):
return static_file(filepath, root="./")
@route("/blink")
def blink():
theDevice = ArduinoUsbDevice(idVendor=0x16c0, idProduct=0x05df)
red = request.query.get('red')
green = request.query.get('green')
blue = request.query.get('blue')
print("red:{}, green:{}, blue:{}".format(red, green, blue))
red = int(mapping(red))
green = int(mapping(green))
blue = int(mapping(blue))
theDevice.write(ord("s"))
theDevice.write(red)
theDevice.write(green)
theDevice.write(blue)
print("mred:{}, mgreen:{}, mblue:{}".format(red, green, blue))
def mapping(arg):
arg = float(arg)
if arg < 0:
return 0
elif arg > 100:
return 255
else:
return arg * 0.01 * 255
if __name__ == '__main__':
run(host="localhost", port=9000, debug=True, reloader=True)
main.js
(function(ext){
var device = null;
ext._deviceConnected = function(dev){
if(device) return;
device = dev;
console.log(device);
device.open();
};
ext._deviceRemoved = function(dev){
if(device != dev) return;
device = null;
};
ext._shutdown = function(){
if(device) device.close();
device = null;
};
ext._getStatus = function(){
if(!device) return {status: 1, msg: 'digiUSB disconnected'};
return {status: 2, msg: 'digiUSB connectd'};
};
ext.blink = function(r, g, b){
$.ajax({
type: "GET",
url: "http://localhost:9000/blink",
dataType: "script",
data: {
red: r,
green: g,
blue: b
}
});
};
var descriptor = {
blocks: [
["", "red: %n, green: %n, blue: %Glänzen mit n", "blink",
"100", "100", "100"]
],
menus: {},
url: 'http://localhost:9000'
};
var hid_info = {type: 'hid', vendor: 0x16c0, product: 0x05df};
console.log(ScratchExtensions.register('DigiUSB', descriptor, ext, hid_info));
})({});
app.py
und main.js
in dasselbe Verzeichnis.app.py
an Digispark zu senden, benötigen Sie außerdem Von Digispark erstellte Bibliothek. .. Geben Sie das "arduino" -Verzeichnis des obigen Links in das Verzeichnis ein, das "app.py" und "main.js" enthält.Directory
|- arduino/
|- app.py
|- main.js
python app.py
http: // localhost: 9000
zu. Es gibt einen Link namens "ScratchX". Wenn Sie also zum Linkziel springen, wird die ScratchX-Seite geöffnet, auf der "main.js" in derselben Hierarchie geladen ist.Wenn Sie sich das ScratchX-Wiki ansehen, sollten Sie in der Lage sein, Daten direkt von Javascript an USB-HID zu senden, aber diesmal hat es nicht funktioniert Es ist eine Kreisverkehrsform geworden wie ... Wenn ich mir den Code auf der obigen Seite anschaue, scheint es, als würde ich diesen Bereich verwenden.
Wenn Sie die Reste in main.js
belassen und das Plug-In Scratch Extensions Browser Plugin einfügen, wird unter ScratchX" Other "angezeigt. Das Signal ist grün statt rot angeschlossen. (Nur unter OSX und Chrome prüfen)
Ich habe diesmal RGB Shield verwendet, aber es scheint derzeit nicht vorrätig zu sein. Daher bestelle ich LED Shiled, das wahrscheinlich dasselbe tun kann. Im Wiki fühlt es sich an wie ein NeoPixel-Klon von Adafruit. (mehrdeutig)
Wie oben erwähnt, läuft ScratchX auf Flash Player. Wenn Sie sich jedoch LLKs Github ansehen, können Sie sehen, dass Scratchs HTML5-Versionsrepository dies auch ist, obwohl es sich um einen Player handelt Daher erwarte ich, dass es in Zukunft vollständig HTML5 sein wird. Ich weiß nicht, ob es geht.
Die Programmierschwelle ist sehr niedrig (technisch und wirtschaftlich). Physisches Rechnen Sie können verschiedene Dinge tun, die falsch sind. Ich möchte, dass Sie über "das Alter der Programmierung weiter senken" sprechen.
app.py
und main.js
hier platziert.Recommended Posts