Noël guirlande 2.0 Raspberry Pi / Arduino "Selfie / Photobooth » (3 / 6 étapes)

Étape 3: Écrire les programmes Python

J’ai commencé la programmation en mettant l’accent sur l’obtention d’un système d’écran tactile interactif simple utilisant Tkinter pour la plupart des objets pour créer un python GUI. Tout le code est inclus d’avoir un kiosque style photobooth. Le code est inclus dans un fichier zip dans ce instructable. Après avoir exécuté ce pendant plusieurs jours, j’ai eu quelques petits changements que j’ai rectifié dans le fichier zip de téléchargement et dans ces exemples.

Le projet se compose de trois grands programmes :

  • christmas_motion.py - c’est ce que je démarre au démarrage de la PI, il surveille le détecteur de mouvement et quand le mouvement est détecté il vérifie si un fichier existant n’est que là lors de l’exécution du programme principal « christmas_wreath_2.0.py ». Si le fichier est là il ne fait rien, si ce n’est pas alors le programme du mouvement débute le programme principal « christmas_wreath_2.0.py »

    • Actions principales :

      • Moniteur Motion
      • Le coup d’envoi christmas_wreath_2.0.py
      • Fermez l’écran de veille « feh »
  • christmas_wreath_2.0.py - c’est le programme principal, il fait quatre choses :
    • Demander au visiteur de votre porte, s’ils veulent prendre une photo « Elfie »
    • Prendre / reprendre des photos
    • Imprimer
    • Cesser de fumer
  • christmas_nowprinting.py - ceci est utilisé pour afficher une image GIF animée d’une imprimante. Étant donné que l’imprimante est bluetooth le travail d’impression prend environ deux minutes pour terminer. Après cela, le fichier empêchant le programme du mouvement depuis le coup d’envoi d’un nouveau programme « Take Elfie » (christmas_wreat_2.0.py"est supprimé et notre traitement se poursuit.

Code:

christmas_motion.py

christmas_wreath_2.0.py

#! / usr/bin/env pythonimport osfrom temps importation sommeil import tkFont de Tkinter import * importation Tkinter comme tk de ImageWin importation Dib, HWND d’importation PIL PIL Image importer ImageTk d’importation sous-processus Popen import shutil import os.pathimport temps #from SimpleCV import Imageimport picameraclass App: def __init__ (self, maître): self.counter = 0 im = Image.open("/home/pi/Pictures/christmasbg1.jpg") redimensionné = im.resize ((340, 240) Image.ANTIALIAS) tkimage = ImageTk.PhotoImage(resized) myvar = Label (cadre, image = tkimage, bg = "black", texte = "", composé = tk. BAS, font = btnFont, fg = "blanc") myvar.image = tkimage myvar.grid(row=1,column=0,sticky=N+S+E+W) ## remarquez, n’utilisez pas button.pack ni button.grid interchangeable - grille forces boutons dans les emplacements de ligne/colonne, vous spécifiez ## pack permet au système de tkinter déterminer ce qui devrait fonctionner mieux self.button1 = bouton (frame, secours = FLAT, bg = "red", activebackground = "blanc", au premier plan = "silver", texte = "Non merci, \n Merry Christmas" police = btnFont, command=self.quit_pressed) self.button1.grid(row=1,column=1,sticky=N+S+E+W) #self.button1.pack(fill=BOTH,expand=1) self.button2 = bouton (frame, secours = FLAT, bg = "vert", activebackground = "red", au premier plan = "silver", texte = "Take 'Elfie'?", polices = btnFont, command=self.pi_picture) self.button2.grid(row=0,column=0,sticky=N+S+E+W) #self.button2.pack(fill=BOTH,expand=1) #SHOW ELFIE BUTTON - vierge jusqu'à ce qu’ELFIE TAKEN self.button4 = bouton (cadre secours = FLAT, bg = "vert", activebackground = "red", au premier plan = "silver", police = btnFont, état = DISABLED, command=self.show_elfie) self.button4.grid(row=0,column=1,sticky=N+S+E+W) #self.button4.pack(fill=BOTH,expand=1) def show_elfie(self) : im = Image.open("/home/pi/Documents/pythonprograms/imagetest2.jpg") redimensionné = im.resize ((340, 240),Image.ANTIALIAS) tkimage = ImageTk.PhotoImage(resized) myvar = Label (cadre, image = tkimage, bg = "red", texte = "Your Elfie Preview", composé = tk. En bas, de la police = btnFont, fg = "blanc") myvar.image = tkimage self.button4["text"] = "imprimer Elfie? \nClick 'Take Elfie' de re-prendre" myvar.grid(row=1,column=0,sticky=N+S+E+W) def create_window(self) : self.counter += 1 t = Toplevel() center(t) t.title ("image ici") msg = Message (t, texte = "Mettre une photo ici") msg.pack() t.wm_title ("fenêtre #%s" % self.counter) im = Image.open("/home/pi/Pictures/christmasbg1.jpg") #tkroot = Tk() tkimage = ImageTk.PhotoImage(im) frame = Frame(relief=FLAT bg = "vert") frame.pack_propagate(0) frame.pack (remplissage = BOTH, développez = 1) frame.rowconfigure((0,1),weight=1) frame.columnconfigure((0,1),weight=1) Label(frame,image=tkimage).pack() bouton = bouton (image, texte = "Rejeter", command=t.destroy) button.pack() def quit_pressed(self) : proc = Popen (["feh -Y - x - q -D 5 -B noir -F -Z - z - r /home/pi/Pictures"], shell = True, stdin = None, stdout = None, stderr = None, close_fds = True) sleep(2) os.remove("christmas_wreath_placeholder.txt") #os.system ("feh -Y - x - q -D 5 -B noir -F -Z - quit() z - r /home/aaron/Pictures ») #This va tuer l’application elle-même, pas l’image de soi. def pi_picture(self) : avec picamera. PiCamera() comme caméra : camera.resolution=(1920,1080) #camera.exposure_mode="backlight" #camera.awb_mode="shade" camera.start_preview() sleep(4) global filepath filepath = "/ home/pi/Documents/pythonprograms/wreathpics /" filenamestring global filenamestring=time.strftime("%Y%m%d-%H%M%S") global lime lime = ".jpg" global filefullname filefullname = filepath + filenamestring + lime camera.capture(filefullname) camera.stop_preview() #sleep(2) im = Image.open(filefullname) redimensionné = im.resize ((340, 240),Image.ANTIALIAS) tkimage = ImageTk.PhotoImage(resized) myvar = Label (cadre , image = tkimage, bg = « red », texte = « Elfie Preview », composé = tk. BAS, font = btnFont, fg = "blanc") myvar.image = tkimage self.button2["text"] = "Re-prendre Elfie?" self.button4["text"] = "imprimer Elfie
? "self.button4["state"]= self.button4["command "normal" "] = self.print_elfie myvar.grid(row=1,column=0,sticky=N+S+E+W) def print_elfie(self) : #setup imprimer trucs destdir =" / home/pi/Documents/pythonprograms/wreathpics/prints / "destpath = destdir + filenamestring + lime shutil.copy2(filefullname,destpath) obexftpstr =" sudo obexftp -b 00:04:48:10:0B:21--canal 1 -p "obexftpfull = obexftpstr + filefullname imprimer obexftpfull proc = Popen ([obexftpfull], shell = True, stdin = None, stdout = None stderr = None, close_fds = True) proc = Popen ([« python christmas_nowprinting.py »], shell = True, stdin = None, stdout = None, stderr = None, close_fds = True) sleep(1) #os.system ("feh -Y - x - q -D 5 -B noir -F -Z - z - r /home/aaron/Pictures ») quit() #This va tuer l’application elle-même, pas le frame.class libre ImageView(Frame) : def __init__(self,master,**options) : Frame.__init__ (self, maître ** options) self.dib = None self.bind("",self._expose) def setimage(self,image) : self.config(bg="") self.dib = Dib(image) self.event_generate("") def _expose(self,event) : si self.dib : self.dib.expose(HWDN(self.winfo_id())) def center(win): "" "centre une fenêtre tkinter : param victoire : la racine ou le Toplevel fenêtre vers le Centre" "" win.update_idletasks() largeur = win.winfo_width() frm_width = win.winfo_rootx() - win.winfo_x() win_width = largeur + 2 * hauteur frm_width = win.winfo_height() titlebar_height = win.winfo_rooty() - win.winfo_y() win_height = hauteur + titlebar_height + frm_width x = win.winfo_screenwidth() / / 2 - win_width / / 2 y = win.winfo_screenheight() / / 2 - win_height / / 2 win.geometry ('{} x {} + {} + {}'.format (largeur, hauteur, x, y)) win.deiconify () def close_after() : proc = Popen (["feh -Y - x - q -D 5 -B noir -F -Z - z - r /home/pi/Pictures »], shell = True, stdin = None, stdout = None, stderr = None, close_fds = True) sleep(2) os.remove("christmas_wreath_placeholder.txt") #os.system (" feh -Y - x - q -D 5 -B noir -F -Z - z - r /home/aaron/Pictures ») quit() #This va tuer l’application proprement dite , pas l’image de soi. #this est la racine principale du programme = () Tk w, h = root.winfo_screenwidth(), root.winfo_screenheight() # utilisez la ligne suivante si vous voulez également vous débarrasser de la barre de titre d’exécuter un plein écran app root.overrideredirect (1) root.geometry("%dx%d+0+0" % (w, h)) root.config(bg="black",padx=10,pady=10) #root.rowconfigure((0,1),weight=1) #root.columnconfigure ((0,1), poids = 1) #put le cadre ici pour le rendre disponible à l’échelle mondiale à l’armature de routines sub = Frame(relief=FLAT bg = "vert foncé", bd = "0") frame.rowconfigure((0,1),weight=1) frame.columnconfigure((0,1),weight=1) frame.pack_propagate(0) frame.pack (remplissage = BOTH, développez = 1) btnFont = tkFont.Font (famille = 'Times', taille = 32, poids = 'bold') si pas os.path.exists("christmas_wreath_placeholder.txt") : ouvrir ("christmas_wreath_placeholder.txt","w") root.after (300000, close_after) #call quitter après 5 minutes, quel que soit le whatapp = App(root) root.mainloop () #os.system ("pkill - x feh")#exit()

christmas_nowprinting.py

Obtenir la PI à l’AutoStart le Tkinter basé application Python avec la Session utilisateur

C’est une bouchée, mais fondamentalement, vous ne pouvez exécuter juste ce tkinter app python dépendant de la ligne de commande dans un environnement unique de la console, vous devez être dans un x-windows ou LXDE session, aka, un bureau Linux normal - pas de telnet ou SSH, puisqu’il s’agit d’une application GUI. Pour ce faire sur une facture pro forma framboise il y a un fichier de démarrage automatique spécifique que vous éditer qui exécute les applications non-GUI GUI ou après le bureau est chargé. Le mieux à que je peux comparer cela est le dossier « démarrage » de windows.

Modifiez le fichier suivant :

Vous pouvez le faire via une session de ligne de commande en tapant :

Puis ajoutez votre script pour lancer votre programme au bas du fichier, j’ai utilisé un script SH au coup d’envoi de mon dossier de christmas_motion.py. Voici à quoi ressemble le fichier de démarrage automatique :

Notez les derniers points de la ligne à mon dossier Launcher (christmas_launcher.sh) -mon fichier ressemble à ceci :

Ce fichier s’assure que je lance le christmas_motion.py à l’aide de SUDO / privilèges root pour que le GPIO prie dans le code python ont un niveau d’autorisations pour accéder les broches GPIO correct, sinon l’utilisateur standard de « PI » n’a pas les autorisations adéquates pour accéder les broches de capteur de mouvement.

J’ai essayé de lancer le christmas_motion.py directement dans le fichier de démarrage automatique, mais il en est résulté dans une boucle infinie bizarre du coup d’envoi de la même application maintes et maintes fois donc j’ai eu recours à mon script SH standard qui a travaillé à chaque fois.

Articles Liés

Le Raspberry Pi-Arduino-SignalR Home Automation moyeu

Le Raspberry Pi-Arduino-SignalR Home Automation moyeu

Suite à un couple de mon prélude IBLEs publié ici et ici, ce projet prend la première étape vers la création d'une version de base d'un Home Automation Hub fonctionnelle.J'ai utilisé différentes technologies dans le but de comprendre comment je peux
Raspberry Pi - Arduino Serial Communication

Raspberry Pi - Arduino Serial Communication

Dans ce projet, nous allons faire une communication entre Arduino et Raspberry Pi qui transfèrent des informations vitales en envoyant des données un bit à la fois.Communication série est essentielles pour chaque Micro-controleurs communiquer entre d
Le Raspberry Pi - Arduino connexion

Le Raspberry Pi - Arduino connexion

la Pi est une carte d'ordinateur peu fine, mais pas presque aussi bon quel'Arduino lorsqu'il s'agit de capacités I/O. L'ingénierie magnifiquementGertboard est un plug-in qui surmonte parfaitement cette lacuneen donnant la Pi l'accès à un ATMega328, m
Raspberry pi & Arduino IOT Automation

Raspberry pi & Arduino IOT Automation

i, m revient avec un projet plus de l'ITO. Cette fois avec arduino et respberry pi 2 B +.comme nous le savons Rpi ont de grande puissance, la connectivité et les option d'affichage en comparaison avec arduino mais arduino ont grand d'e/s de contrôles
Interactive Rack de tissu (à l’aide de la Raspberry Pi, Arduino Pro Mini et Bluetooth HC-05)

Interactive Rack de tissu (à l’aide de la Raspberry Pi, Arduino Pro Mini et Bluetooth HC-05)

Il s'agit de mon premier Instructable ! Alors si j'ai commis une quelconque erreur, s'il vous plaît pardonnez-moi:)Le but est de donner aux clients une toute nouvelle expérience lors de vos achats.Chaque vibration que clients font en choisissant les
Domotique à l’aide de Raspberry Pi, Arduino, Domoticz, MySensors.

Domotique à l’aide de Raspberry Pi, Arduino, Domoticz, MySensors.

Salut à thé Fellow,Il s'agit de mon premier Instructable sur domotique. L'idée est de construire un contrôleur et les nœuds sans fil pour contrôler et surveiller.Après beaucoup de succès et le procès avec plusieurs contrôleurs différents comme OpenHa
À l’intérieur d’entraînement moteur pas à pas avec Raspberry Pi & Arduino Iot

À l’intérieur d’entraînement moteur pas à pas avec Raspberry Pi & Arduino Iot

Bonjour tout le monde.Le but de ce projet consiste à utiliser une à l'intérieur d'entraînement moteur pas à pas avec le Raspbery Pi et Arduino. Ce genre de moteur pas à pas ont généralement petit écran et vous devez regarder vers le bas au cours de v
Poisson Feeder Arduino Raspberry Pi lien

Poisson Feeder Arduino Raspberry Pi lien

« Quel une ennuyeuse boîte noire »Oui, c'est, mais :– Il nourrit de mon poisson quand je ne suis pas là.– Il se nourrit en un temps prédéfini.– Il détecte la nourriture donnée aux poissons– Vous pouvez vous connecter à distance dans le pi framboise p
Raspberry Pi Robot contrôlé via Bluetooth

Raspberry Pi Robot contrôlé via Bluetooth

ce tutoriel est basé sur un précédent Instructable -Robots de bâtiment avec Raspberry Pi et PythonLe but est de présenter un exemple de comment mettre en place une connexion série Bluetooth avec Arduino pour contrôler un robot Raspberry Pi. Mais perm
Arduino auto équilibrage Robot

Arduino auto équilibrage Robot

Dans ce projet, je vais décrire la construction de robots debout en équilibre avec le Arduino.We expliqué dans notre version précédente du projet android contrôlé. Dans ce projet, nous allons passer à notre contrôle. Let ' s go Let's get à notre proj
Comment faire une plateforme Mobile Robot faible coût

Comment faire une plateforme Mobile Robot faible coût

Ce Instructable agit ici de développer une base robotique pour prendre en charge vos expériences.Ce Instructable s'adresse à toute mise en route sur une plate-forme mobile de basse tension. Autres lecteurs pourraient trouver quelque chose d'intéressa
Vertical Hydroponic Farm

Vertical Hydroponic Farm

Nous réclamons notre projet RUF, Robotic Udéj Fbras SystemUn jardin hydroponique verticalPermettant des rendements de haute densité et des cycles de croissance plus courtsRéduction de la consommation de ressources - l'eau, d'engrais et espaceLabor sa
Système de culture maraîchère automatisé

Système de culture maraîchère automatisé

Bienvenue ! rSense « Makashitakun » est le système automatisé de culture maraîchère qui est construit avec Arduino et Raspberry Pi. Arduino est utilisé pour collecter des données de capteurs et actionneurs de manutention. Raspberry Pi est utilisé pou
Cage de hamster tweeting

Cage de hamster tweeting

Avez-vous déjà demandé ce que votre hamster fait lorsque vous dormez ou hors de la maison ? Il jeter les parties sauvages ou pratiquer le Français ? Ou peut-être juste dans sa roue ?Nous voulions découvrir par nous-mêmes ce que notre hamster, Martin,