2017-01-07 2 views
1

Existe-t-il un moyen de connecter le nom du périphérique au port série?Obtenir le nom du périphérique connecté au port/dev/ttyACM0

Ce code me donne juste le nom du port série. Mais j'ai besoin le nom du périphérique connecté à savoir Nokia Téléphone

import serial 
import time 


ser = serial.Serial('/dev/ttyACM0', 
        460800, 
        timeout=5, 
        xonxoff = False, 
        rtscts = False, 
        bytesize = serial.EIGHTBITS, 
        parity = serial.PARITY_NONE, 
        stopbits = serial.STOPBITS_ONE) 
sere = ser.name 
print (ser, sere) 

J'ai été vérifier d'autres possibilités comme gammu-detect mais je voudrais avoir un script python auto permanent qui fait cette opération. Y at-il un moyen de le faire avec pyserial?

Répondre

1

Oui, bien sûr.

Mais ceci n'est pas strictement lié au port série lui-même. Cela dépend du protocole utilisé par le périphérique.

En essentiel, vous envoyez des données initiales prédéfinies à l'appareil et il répond avec le fabricant, le nom, le modèle et la version ou une combinaison de ceux-ci.

Je ne suis pas sûr que ce soit normalisé ou non, vous devrez le chercher.

Si elle est standardisée, il est très probablement quelque chose comme:

1. Open the port with 9600 baud rate 
2. Send the request for info 
3. Use info to reset the port etc. 

Je sais que certains programmes font. Vous pouvez même entendre les vieux modems 56K réagir à la requête lorsque l'algorithme de détection leur demande qui ils sont.

Maintenant, vous devez rechercher s'il s'agit d'une procédure standard ou si chaque périphérique a ses propres.

Si vous recherchez un téléphone, puis très probablement il y a une pour les versions de téléphone, peut-être chacun par OS comme iOS, Symbian, Android, Windows *, ...

Si vous ne trouvez pas le protocole sur la Internet, puis installez la carte virtuelle pour les ports série, exécutez man au milieu sur les ports en boucle pour voir quelles données sont envoyées lors de la communication initiale avec l'application téléphonique. Remarque: Ne regardez pas les données lorsque vous vous connectez à Internet, c'est-à-dire en utilisant le téléphone comme modem. Vous verrez seulement le protocole T, ce qui ne vous aiderait pas beaucoup.

Si vous voulez voir comment cela fonctionne universellement, utilisez la même technique avec une carte série virtuelle, mais lorsqu'un nouvel assistant de périphérique détecte un nouveau matériel.

P.S. J'ai trouvé quelque chose!

Essayez d'envoyer:

"\x02S\x00\x00\x00\x00\x03" 

Vous devriez obtenir certaines données contenant identifiant numérique d'un dispositif. Comme le numéro de série.

+0

Un grand merci pour votre aide. Je pense que ce que vous m'avez envoyé va dans le bon sens, mais je ne peux pas écrire ('\ x02S \ x00 \ x00 \ x00 \ x00 \ x03') 'juste le numéro 7. Cependant c'est le même que je reçois en envoyant la commande AT'AT + CGMI 'qui est censée me donner le nom du fabricant de l'appareil. Ai-je besoin d'attendre la réponse de l'appareil? – fahrradlaus

+0

L'idée est d'envoyer des données à l'appareil.Si ce n'est pas le cas, un périphérique répond avec un code d'erreur/message. Si c'est juste, alors vous obtenez l'info ou le code de série. Donc, ce qui se passe ici est très probablement que vous obtenez le code d'erreur. L'utilisation d'AT & T lorsque le téléphone n'est pas en mode modem ne vous servira à rien. Au moins, ça ne devrait pas. Téléphone peut recevoir AT & T à l'improviste, mais il vous renverra très probablement la version du firmware du modem GPRS. Habituellement, le téléphone doit être mis en mode GPRS soit par commande à partir du port ou manuellement. (comme l'iPhone). – Dalen

+0

Assurez-vous également que vous utilisez la vitesse de transmission correcte. Si le débit en bauds est incorrect, l'appareil recevra un non-sens et le percevra comme une erreur. La valeur retournée sera également un non-sens. Returned 7 indique que ma chaîne et la commande AT & T sont reçues comme une erreur, mais qu'il s'agisse d'une erreur réelle ou que la vitesse de transmission est erronée doit être vérifiée. Si 7 est réellement binaire 55 (ord ("7")), alors il est possible que 55 signifie quelque chose comme (cet appareil est un téléphone). Mais c'est très probablement une erreur. – Dalen

1

Maintenant, tout va bien! J'ai dû taper la commande .read. Voici la solution:

import serial 
import time 

ser = serial.Serial('/dev/ttyACM0', 
        460800, 
        timeout=5, 
        xonxoff = False, 
        rtscts = False, 
        bytesize = serial.EIGHTBITS, 
        parity = serial.PARITY_NONE, 
        stopbits = serial.STOPBITS_ONE) 
#s = input('Enter AT command --> ') 
#print ('AT command = ' + s) 
ser.write(bytes('AT+CGMI' + '\r\n')) 
ser.timeout = 1 
response = ser.read(999) 
print(response) 
ser.close()