PcDuino kiosque Crowdsource (3 / 4 étapes)

Étape 3: L’Interface : apprendre Python

Après avoir terminé la partie matérielle de la build, je suis allé pour s’attaquer à la partie du logiciel. Le GUI pour le kiosque devra se conformer à quelques critères de base :

Facile à naviguer
Capable d’enregistrer un formulaire dans un fichier
Difficile de sortie
Difficile de Hack (forme attaques par Injection, etc.)
Multi-plateforme (donc je peux mettre sur ma machine Windows)

J’avais besoin d’une langue ou un outil qui rendrait ce GUI (relativement) indolore à assembler. Je n’ai pas fait tout non-Arduino programmation depuis... euh... BASIC ? Alors il est grand temps que j’ai appris une nouvelle langue, et je savais exactement celui que j’avais besoin : Python.

Pourquoi Python ? Parce que Python peut faire n’importe quoi. Eh bien, bon, pas autre chose que c’est une très belle langue pour « taper » une application rapide. Il y a également une énorme collection de bibliothèques disponibles pour accrocher toutes sortes de choses de Python. Pour ne pas mentionner que c’est multi-plateforme donc je pouvais faire tout ce qui de la mise au point sur ma machine Windows et charger ce même script sur le pcDuino sans aucun problème.

Parfois, la meilleure façon d’apprendre un nouveau langage de programmation est de simplement sauter dans votre projet avec les deux pieds. Trouver des bibliothèques que vous pensez que vous aurez besoin, ouvrir à tous l’exemple de code et commencer à prendre à part. Si vous lisez un début de script à la fin, à l’aide de Google pour chercher quoi que ce soit que vous ne comprenez pas, vous aurez une bonne compréhension de la syntaxe et les méthodes de la fin. A partir de là, il est tout de même ancienne mouture : écrire, courir, faire erreur, déboguer. Bien que si vous déplacez juste à Python de C c’est plus comme : écrire, exécuter, « vraiment, cela a fonctionné, hein? »

J’ai commencé en saisissant easyGUI, une bibliothèque bien nommée pour Python qui se branche sur TkInter (une liaison python pour le kit d’interface graphique Tk) et le rend super simple afficher et parcourir les formes simples. Vous pouvez faire tout ce que j’ai fait sans easyGUI, mais il ne sera pas aussi facile... GUI... (Où suis-je?)

Il est également très facile de contrôler la pcDuino GPIO depuis Python. Essentiellement, vous ouvrez simplement un fichier et modification d’une valeur, c’est vraiment aussi simple que ça. J’ai copier/coller du code d’un exemple, qui met quelques définitions en haut du script vous permettant d’utiliser le HIGH, LOW, entrée, sortie, etc. sans avoir à mémoriser quelle valeur représente chacun.

Je vais aller de l’avant et afficher mon code ci-dessous en morceaux (pas nécessairement en ordre écrit mais en ordre fonctionnel), puis essayer d’expliquer chaque bit pour le bénéfice de toute personne qui n’est pas familier avec Python. Je dois avertir quiconque est familier que j’ai habituellement code en C pour mon Python n’est pas très... Pythonique ? Cela fonctionne, cependant.

Bon, alors nous devons faire tout d’abord un peu de configuration :

importation easygui comme par exemple
moment de l’importation, os

# correctif rootWindowPosition
eg.rootWindowPosition = « + 180 + 20 »

Bien que ne devrait pas être trop effrayant pour les programmeurs de l’Arduino. Juste importer quelques bibliothèques, la même manière que vous utiliseriez « include ». Je l’ai déjà expliqué la bibliothèque easyGUI, mais la bibliothèque me donne juste la possibilité de mettre des retards dans le code.

Le peu laid il un patch est quelque chose que j’ai volé un morceau de l’exemple de code pour définir la position de la fenêtre de ma GUI. J’ai eu des ennuis avec mon gestionnaire de fenêtres juste il plopping à partout où il le voulait, de savoir si tout était à l’écran ou non. Le # indique le début d’un commentaire en Python, soit dit en passant.

La prochaine chose à faire est de préparer le GPIO !

GPIO_MODE_PATH = os.path.normpath('/sys/devices/virtual/misc/gpio/mode/')
GPIO_PIN_PATH=OS.Path.Normpath('/sys/devices/Virtual/misc/GPIO/pin/')
GPIO_FILENAME = « gpio »

pinMode =]
pinData =]

ÉLEVÉ = « 1 »
FAIBLE = « 0 »
ENTRÉE = « 0 »
SORTIE = « 1 »
INPUT_PU = « 8 »

car moi dans range(0,18) :
pinMode.append (os.path.join (GPIO_MODE_PATH, ' gpio'+str(i)))
pinData.append (os.path.join (GPIO_PIN_PATH, ' gpio'+str(i)))

pour la broche en pinMode :
fichier = open (goupille, « r + ») ## ouvrir le fichier en mode r/w
file.Write(output) ## définir le mode de la broche
file.Close() ## IMPORTANT - doit fermer un fichier pour apporter des modifications !

pour la broche en pinData :
fichier = open (goupille, « r + »)
file.Write(Low)
file.Close()

Tout cela a été également volé à un exemple de script. Il raconte essentiellement Python où les fichiers de broche GPIO contrôle sont conservées sur la pcDuino. Puis il définit les termes comme haut et entrée, et ensuite elle utilise une série de « pour » les boucles pour définir les broches GPIO dans un état connu.

Si vous êtes un programmeur de l’Arduino, alors vous avez sans doute remarqué quelque chose de fou maintenant : il n’existe pas n’importe quel des points-virgules ! Ou accolades ! Si le monde est devenu fou?? Eh bien, oui, mais pas par manque de ponctuation. Python est dicté par la mise en retrait. Les blocs de code sont séparés par le niveau de leur mise en retrait.

Bon, nous sommes tous fait avec le programme d’installation. Nous allons obtenir quelque chose à l’écran :

while(1) :

mainTurk()

def mainTurk() :
x = str (eg.buttonbox ("", titre = « Chocolat Turk", image="screen1.jpg », choix = ["Gimme Candy!", "Pourquoi?"]))

Si x == « Pourquoi? » :
msg = "chocolat Turk est un solutionneur de Mechanical Turk qui récompense les gens avec du chocolat ! \n \n, il a été construit à l’aide de la pcDuino comme une démonstration des capacités de l’appareil. L’interface et le logiciel de contrôle ont été programmés en Python avec l’aide des bibliothèques EasyGUI et PIL. \n \n un tutoriel sur la façon dont ce projet a été achevé seront disponibles sur le site de SparkFun Learn. \n \n MarComm pourquoi ne pas donner un coup de main dans la publicité ? Il y a chocolat dedans pour vous;) \n \n imaginé et réalisé par : Nick P. \n \n "
titre = « Tout chocolat Turk »
choix = ["Return", « Tuer le programme »]
tueur = eg.buttonbox (msg, titre, choix = choix)

Si le tueur == « Tuer le programme » :
sys.Exit()
autre chose :
Pass
autre chose :
chocoturk()

"Whoa, whoa, whoa... quoi?" Je sais, si vous êtes un programmeur de l’Arduino, cela peut ressembler à un désordre dans un premier temps. Pas de soucis, nous allons faire défiler il. Tout d’abord, j’ai commencer while(1) boucle donc le programme kiosque continuera à fonctionner encore et encore. La ligne suivante est un appel à eg.buttonbox (si vous vous souviendrez que nous avons importé easyGUI comme « eg ») qui est une méthode easyGUI qui crée une boîte de dialogue avec des boutons. Il s’agit d’une ligne de code condensé, donc c’est un peu étrange à la recherche, mais une chose qui vous aidera à comprendre ce qui se passe est la suivante: x tiendra la valeur de la touche enfoncée. Si vous vous demandez où x provenait, il n’a pas ! Nous avons fait juste vers le haut ! C’est vrai, en Python, vous n’avez pas à déclarer une variable, vous pouvez juste commencer à l’utiliser et Python se chiffre à ce que vous voulez faire avec elle.

Dans l’ordre, ce qui se passe, c’est que je suis remplissage x avec la version de chaîne de la valeur de l’appel de la fonction « eg.buttonbox ». Que la fonction prend quelques arguments : le titre de la fenêtre, le nom de l’image que je veux afficher et les choix que j’ai envie disponible. Lorsque cette chaîne s’exécute, une fenêtre appelée « Chocolat Turk » apparaît avec une image Récupérée de screen1.jpg et deux boutons marqué « Gimme Candy! » et « Why? ». Après un des boutons est activé, la fonction renvoie ce choix à la str(), qui « stringifies » il et le fourre dans x.

La prochaine étape est de tester x. Si x est égal à « Pourquoi? » (En d’autres termes, si vous appuyez sur le bouton « Why? ») puis j’ai pop un écran expliquant le projet. Juste pour vous donner un exemple élargi, j’ai oublié d’écrire tout cela sur une seule ligne. Vous pouvez voir que j’ai réellement farci chaque variable avant l’appel à eg.buttonbox. J’ai appelé la variable de retour « killer » parce que c’est le seul endroit dans le programme pour le tuer. En cliquant sur le « x » sur la fenêtre ne sera pas même le faire, parce que je n’écrivais pas quoi que ce soit pour gérer cela. Il s’agit d’une bonne chose, je ne voulais pas les personnes sortant de l’interface graphique de mon kiosque.

Les instructions else gérer par la suite tout ce qui se passe que si vous appuyez sur « Gimme Candy! » qui est, bien sûr, il plonge dans la fonction suivante, qui ressemble à ceci :

def chocoturk() :
msg = "choisir un produit que vous vous sentez assez familier avec: »
titre = « Choisir une carte »
choix = [« pcDuino », « IOIO-OTG », « SparkFun inventeurs Kit pour Arduino avec détail Case », « Makey Makey – Standard Kit », « LilyPad Arduino Simple planche », « Raspberry Pi – modèle B », « 9 degrés de liberté - rasoir IMU », « RedBoard – programmer avec Arduino », « XBee Explorer USB », « EasyDriver Stepper Motor Driver »]
choic = eg.choicebox (msg, titre, choix)

Si choic == None :
retour

image = « % s.jpg » % choic
MSG = « voulez-vous écrire une annonce pour le %s »? % choic
choix = [« Let's Do it! », "attendez, revenir en arrière!"]
réponse = eg.buttonbox(msg,image=image,choices=choices)

Si réponse == "attendre, revenir en arrière!" :
retour
autre chose :
val=["","","",""]
compositeur (choic, val)

retour

La première chose que j’ai besoin de l’utilisateur de faire est d’en choisir un de nos produits les plus vendus, donc j’ai qu’elles soient alignées tout dans ce qu’easyGUI appelle une choicebox. J’ai la chance d’être un peu intelligent, après que l’utilisateur sélectionne un produit. J’ai sauvé une photo de chaque produit en utilisant le nom du produit sous le nom de fichier. Donc quand je suis allé pour récupérer l’image pour la fenêtre suivante, j’ai juste sauté « .jpg » sur la fin de la réponse de choicebox dans l’argument d’image pour buttonbox.

J’ai aussi donné à l’utilisateur une chance de changer d’avis s’ils voulaient en retournant sur la fonction. Si elles confirment qu’ils veulent continuer alors je laisse tomber dans la fonction suivante, la fonction de compositeur.

compositeur de DEF (produit, retainVal) :
msg = "écrire la copie AdWords pour la \n \n %s mise en forme : \n \n-Headline \n limitée à 25 caractères. Liens vers la page du produit. \n \n-description \n vous obtenez 2 lignes de 35 caractères chacune pour décrire un produit SparkFun à un client ciblé à l’aide de Google recherche \n \n-Mots-clés : \n ce que 5 mots ou phrases lorsque le texte tapé dans Google, doit retourner votre annonce ? (Comma-Separated) \n \n « % produit
titre = « Compositeur de AdWords »
fieldNames = ["Headline", « Description Line 1 », « Description Line 2 », « Mots clés »]
fieldValues peuvent uniquement être = [retainVal [1], retainVal [2], retainVal [0], retainVal [3]]
fieldValues peuvent uniquement être = à eg.multenterbox (msg, titre, noms des champs, fieldValues peuvent uniquement être)

Si fieldValues peuvent uniquement être == None :
retour

si len(fieldValues[0]) > 25 :
EG.MsgBox ("vous avez trop de caractères dans votre titre. Pare il vers le bas.")
compositeur (produit, fieldValues peuvent uniquement être)
si len(fieldValues[1]) > 35 :
EG.MsgBox ("vous avez trop de caractères dans votre Description (ligne 1). Pare il vers le bas.")
compositeur (produit, fieldValues peuvent uniquement être)
si len(fieldValues[2]) > 35 :
EG.MsgBox ("vous avez trop de caractères dans votre Description (ligne 2). Pare il vers le bas.")
compositeur (produit, fieldValues peuvent uniquement être)

composereview (fieldValues peuvent uniquement être, produit)

retour

La fonction de compositeur est assez simple. J’ai juste besoin de l’utilisateur d’entrer du texte, c’est la tâche à laquelle ils sont récompensés pour. Si vous n’aviez pas pensé à elle dehors maintenant, elle est précisée dans l’argument de msg: nous avons essayé d’obtenir des personnes extérieures à notre département marketing à écrire un texte d’annonce. Étant donné que ceux-ci allaient théoriquement apparaissent sous forme d’annonces AdWords, ils avaient besoin pour se conformer à un certain format. J’ai ajouté quelques cas énoncés qui vérifient la longueur de caractère de chaque champ avant de récompenser l’utilisateur. S’il y avait trop de caractères dans un champ, je laisserais l’utilisateur sais pas lequel et retourner à la forme. Enfin, si ils ont réussi à remplir le formulaire je leur ai donné une chance d’examiner ce qu’ils avaient écrit à côté d’une photo du produit :

def composereview(adcopy, prod) :
image = « % s.jpg » % prod
msg = "Voici ce que vous avez écrit sur le \n \n % s: \n \n %s \n %s \n %s avec les mots clés : \n \n %s" % (prod, adcopy [0], adcopy [1], adcopy [2], adcopy[3])
choix = ["Gimme chocolat NAO!", "laissez-moi essayer à nouveau..."]
réponse = eg.buttonbox(msg,image=image,choices=choices)

Si réponse == « Laissez-moi essayer à nouveau... » :
compositeur (prod, adcopy)
autre chose :
f = open ('AdWordsDump.txt', 'a')
f.Write(Prod)
f.Write('\n')
f.Write(adcopy[0])
f.Write('\n')
f.Write(adcopy[1])
f.Write('\n')
f.Write(adcopy[2])
f.Write('\n')
f.Write(adcopy[3])
f.Write('\n')
f.Write('\n')
f.Close()
givethemthechocolate()

La « revue de composer » est une forme simple qui je peuplent les réponses transmises du compositeur et une photo du produit en utilisant la même astuce nom qu’à la fenêtre de sélection de produit. Si l’utilisateur décide qu’ils aiment ce qu’ils ont écrit, je l’enregistrer dans un fichier .txt gros où je stocke toutes les informations collectées depuis le kiosque. Oh oui, et les décharger dans la fonction définitive :

def givethemthechocolate() :

fichier = open (pinData [6], « r + »)
file.Write(High)
Time.Sleep(1)
fichier = open (pinData [6], « r + »)
file.Write(Low)
file.Close()
image = « thanks.jpg »
msg = ""
choix = ["Finish"]
EG.buttonbox(MSG,image=image,Choices=Choices)

mainTurk()

Dans cette fonction, j’ai simplement envoyer le distributeur de bonbons un pouls élevé, remettre cette sucrerie doux, doux. J’ai aussi montrer à l’utilisateur une image Merci et revenir à l’écran d’accueil.

Articles Liés

Utiliser le bouclier GPRS/GSM SIM900 sur pcDuino

Utiliser le bouclier GPRS/GSM SIM900 sur pcDuino

SIM900 GSM/GPRS bouclier ajoute la capacité GPRS/GSM au pcDuino. Il utilise commandes AT pour communiquer avec pcDuino via le port UART de demande. Avec l'aide du bouclier SIM900 GPRS/GSM, il peut atteindre quelques fonctions de base d'un téléphone m
Programmer le capteur Hall Linker sur pcDuino avec Python

Programmer le capteur Hall Linker sur pcDuino avec Python

Capteur Hall Linker Le module est un capteur Hall.Un capteur à effet Hall est un transducteur qui varie sa tension de sortie en réponse à un champ magnétique. Capteurs à effet Hall sont utilisés pour la commutation de proximité, positionnement, détec
Sup ! Communauté conte expérience kiosque IoT

Sup ! Communauté conte expérience kiosque IoT

Il s'agit d'un bref tutoriel sur comment nous avons créé "Sup ! Conte de la communauté l'expérience"pour le Concours des jeunes Maker en mettant l'accent sur le développement communautaire et de la conservation de l'énergie.Cette expérience incl
Nouilles : un crowdsourced robot

Nouilles : un crowdsourced robot

Noodle est un petit appareil avec les entrées/sorties d'une machine, mais les pensées et les sentiments d'un être humain. Vous pouvez programmer pour surveiller votre espace physique et réagir aux changements dans l'environnement avec des mots, des i
Utilisation 8 x 8 x 8 RGB LED Cube sur pcDuino

Utilisation 8 x 8 x 8 RGB LED Cube sur pcDuino

8 x 8 x 8 cube LED RGB est l'un des superbes RGB LED Cube conçu par LinkSprite. Il a l'interface compatible Arduino et utilise l'interface SPI pour communiquer avec Arduino/pcDuino.Étape 1: Schéma de câblage 8 x 8 x 8 LED Cube peut être installé dire
SDR sur pcDuino

SDR sur pcDuino

Software-defined radio (SDR) est un système de communication radio lorsque les composants qui ont été généralement implémentées dans le matériel (p. ex., mélangeurs, filtres, amplificateurs, modulateurs/démodulateurs, détecteurs, etc.) sont plutôt ré
Configuration de contrôleur Z-Wave sur pcDuino

Configuration de contrôleur Z-Wave sur pcDuino

Z-Wave est un protocole de communication sans fil conçu pour la domotique, spécifiquement pour les applications de contrôle à distance dans des environnements commerciaux résidentiels et légers. La technologie utilise une radio de faible puissance RF
Flat Pack kiosque de la ferme

Flat Pack kiosque de la ferme

Ce projet pour un kiosque de la ferme en Californie du sud est une charette une semaine qui nous a permis de commencer à expérimenter les possibilités de la tôle dans le domaine architectural. Notre projet vise à créer une bâtiment fonctionnel la pea
Utilisez picoBoard pour Scratch sur pcDuino

Utilisez picoBoard pour Scratch sur pcDuino

le PicoBoard permet de créer des interactions avec les différents capteurs. En utilisant le langage de programmation Scratch, vous pouvez facilement créer des programmes interactifs simples basés sur les opinions des capteurs. Le PicoBoard intègre un
Comment faire pour démarrer à distance pcDuino partir d’un serveur NFS

Comment faire pour démarrer à distance pcDuino partir d’un serveur NFS

Dans les cas, nous tenons pcDuino de démarrer à partir d'un fichier de réseau hébergésystème. Dans ce tutoriel, nous allons expliquer comment faire pour que cela se produise.Étape 1: Serveur NFSNous allons tout d'abord configurer un serveur NFS. La c
Bureau enregistrement de température ambiante avec pcDuino et Yeelink serveur

Bureau enregistrement de température ambiante avec pcDuino et Yeelink serveur

pcDuino peut se connecter à Internet par Ethernet, WiFi, GPRS et 3G. Dans ce projet, nous voir un capteur de température TMP36 pour détecter la température de bureau et pousser vers le serveur yeelink et vérifiez la température à tout moment n'import
Permet à un kiosque bricolage

Permet à un kiosque bricolage

Un guide rapide sur les achats et l'assemblage kiosque de Enable.Étape 1: Étape 1: Shop pour le matérielObtenir le formulaire de fournitures nécessaires de votre fournisseur de matériel local.Étape 2: Étape 2: couper les tuyaux Réduire de moitié tous
Portable Mini kiosque Vocal

Portable Mini kiosque Vocal

dans ce tutoriel, nous allons faire un bricolage kiosque vocal mini portable qui peut être utilisé pour enregistrer votre voix sur la route (sur un enregistreur de disque flash). Mais il n'y a plus que l'on puisse faire avec ce facile de faire le pro
Utilisez pcDuino comme Photo Booth manette

Utilisez pcDuino comme Photo Booth manette

pcDuino peut contrôler de différents appareils photo reflex tels que Nikon D40 via une connexion USB à l'aide d'un utilitaire appelé Gphoto2.Étape 1: Installation du logicielLe guide d'installation de logiciel est copié à partirNous installons dans l