[PYTHON] Connectez Scratch X et Digispark avec bouteille

bottle_scratchx_min.jpg

Une brève description du titre

Choses à faire

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

Flux de fonctionnement

Configurez un serveur local sur http: // localhost: 9000 avec + bouteille.

environnement

Digispark

libusb Bibliothèque USB Windows(Win7)

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

Et redémarré.

Navigateur Web

ScratchX fonctionne sur Flash Player, donc tout navigateur exécutant Flash Player devrait fonctionner.

programme

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

Procédure d'opération

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

finalement

Page de référence etc.

Recommended Posts

Connectez Scratch X et Digispark avec bouteille
Installez Python 2.7.9 et Python 3.4.x avec pip.
Un mémo contenant Python2.7 et Python3 dans CentOS
Connectez beaucoup de Python ou et et
[Python] Une application web rapide avec Bottle!
Découpez et connectez des images avec ImageMagick
Implémenter un modèle avec état et comportement
Construisez un environnement Python + bouteille + MySQL avec Docker sur RaspberryPi3! [Essai et erreur]
Construire un environnement python avec virtualenv et direnv
Créez une interface utilisateur de jeu à partir de zéro avec pygame2!
Créez un environnement virtuel avec pyenv et venv
Lancer un serveur Web avec Python et Flask
Compilez et exécutez Rust avec une seule commande
Connectez realsense D435 à un PC sur lequel Ubuntu 16.04 est installé et enregistrez la vidéo de profondeur avec python
Essayez de créer un site Web simple avec responder et sqlite3
Afficher les colonnes et les variables du numéro de série avec le modèle de bouteille
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
Créez une application graphique native avec Py2app et Tkinter
Essayez de créer un jeu simple avec Python 3 et iPhone
Créez un lot d'images et gonflez avec ImageDataGenerator
J'ai essayé de faire LINE BOT avec Python et Heroku
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
Conv en direction x et déconv en direction y avec chainer
Créons une application Mac avec Tkinter et py2app
Créer une visionneuse de modèle 3D avec PyQt5 et PyQtGraph
Jetez un œil au profilage et au vidage avec Dataflow
Ce que vous pouvez et ne pouvez pas faire avec Tensorflow 2.x
Déployez des applications Web en temps réel avec Swampdragon x Apache
Créez un environnement d'apprentissage automatique à partir de zéro avec Winsows 10
Modèle pour Bottle lors du déploiement avec Github et Bitbucket
[Linux] Créez un auto-certificat avec Docker et apache
Construire un environnement de calcul numérique avec pyenv et miniconda3
Feuille de route d'apprentissage qui vous permet de développer et de publier des services à partir de zéro avec Python