[PYTHON] Verbinden Sie Scratch X und Digispark mit der Flasche

bottle_scratchx_min.jpg

Eine kurze Beschreibung des Titels

Dinge die zu tun sind

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. ** ** **

Ablauf des Betriebs

Richten Sie einen lokalen Server unter http: // localhost: 9000 mit + Flasche ein.

Umgebung

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
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", MODE="0664", GROUP="plugdev"

Und neu gestartet.

Webbrowser

ScratchX läuft auf Flash Player, daher sollte jeder Browser funktionieren, auf dem Flash Player ausgeführt wird.

Programm

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));
})({});

Vorgehensweise

Directory
|- arduino/
|- app.py
|- main.js

Schließlich

Referenzseite etc.

Recommended Posts

Verbinden Sie Scratch X und Digispark mit der Flasche
Installieren Sie Python 2.7.9 und Python 3.4.x mit pip.
Ein Memo mit Python2.7 und Python3 in CentOS
Verbinde viel Python oder und und
[Python] Eine schnelle Webanwendung mit Bottle!
Schneiden Sie Bilder aus und verbinden Sie sie mit ImageMagick
Implementieren Sie ein Modell mit Status und Verhalten
Erstellen Sie mit Docker auf RaspberryPi3 eine Python + Flasche + MySQL-Umgebung! [Versuch und Irrtum]
Erstellen einer Python-Umgebung mit virtualenv und direnv
Erstelle mit pygame2 eine neue Benutzeroberfläche!
Erstellen Sie eine virtuelle Umgebung mit pyenv und venv
Starten Sie einen Webserver mit Python und Flask
Kompilieren Sie Rust und führen Sie es mit einem einzigen Befehl aus
Verbinden Sie realsense D435 mit einem PC, auf dem Ubuntu 16.04 installiert ist, und speichern Sie das Tiefenvideo mit Python
Versuchen Sie, eine einfache Website mit Responder und sqlite3 zu erstellen
Anzeigen von Seriennummernspalten und -variablen mit der Flaschenvorlage
Erstellen Sie eine virtuelle Python-Umgebung mit virtualenv und virtualenvwrapper
Erstellen Sie mit Py2app und Tkinter eine native GUI-App
Versuchen Sie, ein einfaches Spiel mit Python 3 und iPhone zu erstellen
Erstellen Sie einen Stapel von Bildern und blasen Sie sie mit ImageDataGenerator auf
Ich habe versucht, LINE BOT mit Python und Heroku zu machen
Erstellen Sie eine virtuelle Python-Umgebung mit virtualenv und virtualenvwrapper
Conv in x-Richtung und Deconv in y-Richtung mit Chainer
Lassen Sie uns eine Mac-App mit Tkinter und py2app erstellen
Erstellen Sie mit PyQt5 und PyQtGraph einen 3D-Modell-Viewer
Sehen Sie sich das Profiling und Dumping mit Dataflow an
Was Sie mit Tensorflow 2.x tun können und was nicht
Stellen Sie Echtzeit-Webanwendungen mit swampdragon x apache bereit
Erstellen Sie mit Winsows 10 eine maschinelle Lernumgebung von Grund auf neu
Vorlage für die Flasche bei der Bereitstellung mit Github und Bitbucket
[Linux] Erstellen Sie ein Selbstzertifikat mit Docker und Apache
Erstellen einer numerischen Berechnungsumgebung mit pyenv und miniconda3
Lern-Roadmap, mit der Sie Services mit Python von Grund auf neu entwickeln und veröffentlichen können