Sp@r0 Posté(e) le 16 décembre 2010 Posté(e) le 16 décembre 2010 Voilà je vous expose le concept, sur mon syno je dispose des informations suivantes : - des photos - ma domotique (températures, hygrométries, conso EDF, pression atmosphérique) - une connexion internet pour récupérer plein d'autres infos Mais je trouve un peu pénible de ne pas avoir d'afficheur qui m'affiche cela directement sans passez par un navigateur internet, au début je voulais utilisez un mini écran supportant la technologie DisplayLink (genre le Mino 720S) mais ces produits sont difficiles à trouver et surtout très chère !!! Après pas mal de recherche j'ai finalement sélectionner ce produit : Ce cadre photo numériques 8" coûte € (SAMSUNG SPF87H) , mais je l'ai acheter d'occasion 40€. Il existe également un modèle 10"(SAMSUNG SPF107H mais il nécessite une alimentation externe). Cette gamme de produit implante une fonction "mini-monitor" qui permet normalement d'utiliser le cadre photo numérique comme un écran usb (un peu comme la technologie displayLink mais en lowcost) Je me suis grandement inspiré de ce projet mais j'ai préféré le traduire et l'adapter pour que cela tourne sous python (du coup mon code est compatible avec tous synos disposant d'IPKG) (module pyUSB + python 2.5) Donc ce que je parviens à faire : - Achat du produit OK - Protocole USB OK (je vous conseil Bus Hound pas trés connu mais vraiment super mieux que usbsniff) - Codage en python pour envoyer une image fixe OK (enfin presque reste quelques petits bugs) - Affichage des photos de la photostation En cours - Affichage de la domotique KO - Affichage d'infos du web KO Alors ce la fonctionne vraiment bien je vous fournit mon code actuel encore largement perfectible (PS : les images doivent avoir la même résolution que le cadre) #!/usr/bin/env python2.5 # # Programme de gestion du SPF 87 H # V 0.0 => En gros c est le premier truc qui fait qq chose !!! # # Import des librairies necessaires import sys import os import time import struct import usb MAXBUFFER = 0xffff # Cherche les peropheriques usb def Cherche_USB(V_vendor, V_product): busses = usb.busses() for bus in busses: for dev in bus.devices: if dev.idVendor == V_vendor and dev.idProduct == V_product: print "Trouvez : " + hex(dev.idVendor) + " \ " + hex(dev.idProduct) return dev print "Nada rien vue ..." return 0 # Basculement en mode mini-monitor def Changement_MODE(dev): # Une petite verif assert dev.idVendor == 0x04E8 assert dev.idProduct == 0x2033 # Init conf = dev.configurations[0] iface = conf.interfaces[0][0] # On demande l'ouverture du peripherique handle = dev.open() handle.detachKernelDriver(iface.interfaceNumber) handle.setConfiguration(conf) handle.claimInterface(iface) handle.setAltInterface(iface) # Quelques preparatifs res = handle.getString(dev.iManufacturer,256) print "usb_get_string_simple : " + res + " \n" S_trame = [0] * 254 # On envoi la trame magique qui va planter mais on le sait try: res = handle.controlMsg(usb.TYPE_STANDARD | usb.ENDPOINT_IN, usb.REQ_GET_DESCRIPTOR, S_trame, 0xfe, 0xfe, 1000) except: print "Changement de mode OK" # Init du mode mini-monitor def Init_IMAGE(dev): # Une petite verif assert dev.idVendor == 0x04E8 assert dev.idProduct == 0x2034 # Init conf = dev.configurations[0] iface = conf.interfaces[0][0] endpoint = iface.endpoints[1] # On demande l'ouverture du peripherique handle = dev.open() handle.reset() handle.setConfiguration(1) handle.claimInterface(0) # Quelques preparatifs res = handle.getString(dev.iManufacturer,256) print "usb_get_string_simple : " + res + " \n" for V_i in range(3): print "Endpoint:",hex(iface.endpoints[V_i].address) print handle.resetEndpoint(iface.endpoints[V_i].address) print handle.clearHalt(iface.endpoints[V_i].address) return handle # Chargement d'une image def Changement_IMAGE(handle, f_im): S_image = f_im.read() L_trame = len(S_image) + 12 print hex(L_trame) S_trame = '\xa5'+'\x5a' + '\x09' + '\x04' + chr((L_trame%65536)%256) + chr((L_trame%65536)/256) + chr(L_trame/65536) + '\x00' + '\x46' + '\x00' + '\x00' + '\x00' print hex(ord(S_trame[4])) print hex(ord(S_trame[5])) print len(S_trame) V_buf = S_trame + S_image print " Longeur init + fichier : %d" % len(V_buf) if len(V_buf)<=MAXBUFFER: V_buffer = V_buf.ljust(MAXBUFFER, '\x00'); print " Longeur buffer : %d" % len(V_buffer) res = handle.bulkWrite(0x2,V_buffer,1000) reqBuffer = '\x00' res = handle.controlMsg(0xc0, 0x6, reqBuffer, value = 0, index = 0, timeout = 100) else: V_i = 0 while V_i < len(V_buf): V_bufferA = V_buf[V_i:(V_i + MAXBUFFER)] V_i = V_i + MAXBUFFER print " envoi morceau : %d" % len(V_bufferA) V_buffer = V_bufferA.ljust(MAXBUFFER, '\x00'); res = handle.bulkWrite(0x2,V_buffer,1000) reqBuffer = '\x00' res = handle.controlMsg(0xc0, 0x6, reqBuffer, value = 0, index = 0, timeout = 100) # test control transfert #res = handle.ctrltransfer(0xc0, 0x6, 0, 0, 0x2) #reqBuffer = '\x00' #res = handle.controlMsg(0xc0, 0x6, reqBuffer, value = 0, index = 0, timeout = 100) # Boucle principal on a vue plus elegant mais cela fontionne while 1: # SPF en mode stockage de masse dev = Cherche_USB(0x04E8, 0x2033) if dev != 0: print "Passage en mode mini-monitor" Changement_MODE(dev) # SPF en mode mini-monitor rdev = Cherche_USB(0x04E8, 0x2034) if rdev != 0: print "Lancement de l'envoi des images" handle = Init_IMAGE(rdev) while 1: print "Chargement image" f_image = open('image1.jpg', 'r') Changement_IMAGE(handle, f_image) time.sleep(5) print "Chargement image" f_image1 = open('image2.jpg', 'r') Changement_IMAGE(handle, f_image1) time.sleep(5) print "Chargement image" f_image2 = open('image3.jpg', 'r') Changement_IMAGE(handle, f_image2) time.sleep(5) time.sleep(1) 0 Citer
PatrickH Posté(e) le 16 décembre 2010 Posté(e) le 16 décembre 2010 Salut Sp@ro, T'as toujours de bonnes id 0 Citer
Sp@r0 Posté(e) le 16 décembre 2010 Auteur Posté(e) le 16 décembre 2010 Salut Sp@ro, T'as toujours de bonnes id 0 Citer
KingOfIce Posté(e) le 14 janvier 2011 Posté(e) le 14 janvier 2011 Hello Sp@r0 ! Je trouve ton tuto g 0 Citer
Sp@r0 Posté(e) le 14 janvier 2011 Auteur Posté(e) le 14 janvier 2011 Hello Sp@r0 ! Je trouve ton tuto g 0 Citer
KingOfIce Posté(e) le 14 janvier 2011 Posté(e) le 14 janvier 2011 Ouah ! Transmission de pens 0 Citer
Sp@r0 Posté(e) le 14 janvier 2011 Auteur Posté(e) le 14 janvier 2011 Bon j'ai mis une vidéo du cadre en fonctionnement avec des photos de ma cuisine ... VIDEO DU CADRE !!! Bon les trucs qui reste à voir : - améliorer le système de recadrage des photos qui reste perfectible sur certaine photo vertical - modifier le hardware du cadre avec un circuit maison pour ne plus avoir à appuyer sur le bouton pour valider le mode USB - commander la marche du cadre depuis le NAS => je vais en profiter pour développer la partie commande en X10 RF de mon projet de domotique 0 Citer
Messages recommandés
Rejoindre la conversation
Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.