Je veux faire de la programmation d'introduction avec Digispark's RGB Shield (pas LED Shield), c'est donc une excellente introduction à la programmation de Scratch (ScratchX) à Digispark Opérer. ** * Lorsque vous le faites, veuillez le faire à vos propres risques. ** **
Configurez un serveur local sur http: // localhost: 9000 avec + bouteille.
Digispark
libusb Bibliothèque USB Windows(Win7)
libusb-win32
avec zadig. * * Il serait difficile de réécrire le pilote d'un autre périphérique, alors soyez prudent ... *OSX(El Capitan 10.11)
brew install libusb
Linux(Ubuntu14.04)
sudo apt-get install libusb-dev
Python
** * La version était 3.5.0
sous n'importe quel environnement **
easy_install pip
pip install bottle pyusb
Avec Python local utilisateur sur Linux, j'ai eu une erreur d'autorisation lors de l'accès USB en utilisant pyusb, donc This post on StackOverflow -pyusb-libusb-require-root-sudo-permissions-on-linux) et Périphériques USB --Google Chrome. (En regardant la page Chrome, on a l'impression que ce n'est pas limité à pyusb.)
Dans mon cas, créez un fichier appelé 50 ー digispark.rules
dans / etc / udev / rules.d /
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", MODE="0664", GROUP="plugdev"
Et redémarré.
ScratchX fonctionne sur Flash Player, donc tout navigateur exécutant Flash Player devrait fonctionner.
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: %Briller avec 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));
})({});
et
main.js` dans le même répertoire. à Digispark, vous aurez également besoin de [Digispark's Library](https://github.com/digistump/DigisparkExamplePrograms/tree/master/Python/DigiBlink/source). .. Entrez le répertoire ʻarduino
dans le lien ci-dessus dans le répertoire contenant ʻapp.py et
main.js`.Directory
|- arduino/
|- app.py
|- main.js
python app.py
http: // localhost: 9000
avec un navigateur Web. Il y a un lien appelé "ScratchX", donc si vous sautez à la destination du lien, la page ScratchX où main.js
dans la même hiérarchie est chargée s'ouvrira.Si vous regardez ScratchX Wiki, vous devriez pouvoir envoyer des données directement de javascript vers USB-HID, mais cela n'a pas fonctionné, donc cette fois C'est devenu une forme de rond-point comme ... En regardant le code sur la page ci-dessus, j'ai l'impression d'utiliser cette zone.
Si vous laissez les restes de main.js
et insérez le plug-in Scratch Extensions Browser Plugin, vous pouvez voir" Other "sur ScratchX. Le signal est connecté en vert au lieu de rouge non connecté. (Vérifiez uniquement sur OSX et Chrome)
J'ai utilisé RGB Shield cette fois, mais il semble être en rupture de stock maintenant, donc je commande LED Shiled qui peut probablement faire la même chose. En regardant le Wiki, cela ressemble à un clone NeoPixel d'Adafruit. (ambigu)
Comme mentionné ci-dessus, ScratchX fonctionne sur Flash Player. Cependant, si vous regardez github de LLK, vous pouvez voir que bien qu'il s'agisse d'un lecteur, le référentiel de versions HTML5 de Scratch est également Par conséquent, je m'attends à ce qu'il soit entièrement HTML5 à l'avenir. Je ne sais pas si cela peut être fait.
Le seuil de programmation est vraiment bas (techniquement et économiquement). Informatique physique Vous pouvez faire diverses choses qui ne sont pas correctes. Je veux que vous parliez de «réduire encore plus l'âge de la programmation».
et
main.js` sont placés ici.Recommended Posts