2017-01-07 13 views
1

Gibt es eine Möglichkeit, den Gerätenamen mit der seriellen Schnittstelle zu verbinden?Abrufen des Gerätenamens an Port/dev/ttyACM0

Dieser Code gibt mir nur den Namen der seriellen Schnittstelle. Aber ich brauche die Gerätenamen mit ihm verbunden heißt Nokia 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) 

Ich habe andere Möglichkeiten wie gammu-detect prüft, aber ich mag einen selbststehende Python-Skript haben, die diese Operation tut. Gibt es eine Möglichkeit, mit Pyserial fertig zu werden?

Antwort

1

Ja, natürlich.

Aber das ist nicht streng mit der seriellen Schnittstelle selbst verbunden. Dies hängt vom Protokoll ab, das das Gerät verwendet.

Im Wesentlichen senden Sie einige voreingestellte Anfangsdaten an das Gerät und es antwortet mit Hersteller, Name, Modell und Version oder einer Kombination von diesen.

Ich bin nicht sicher, ob dies standardisiert ist oder nicht, Sie müssen danach suchen.

Wenn es standardisiert ist, ist es sehr wahrscheinlich so etwas wie:

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

Ich weiß, dass einige Programme tun. Sie können sogar alte 56K-Modems hören, die auf die Abfrage reagieren, wenn der Erkennungsalgorithmus sie fragt, wer sie sind.

Jetzt müssen Sie suchen, ob dies eine Standardprozedur ist oder jedes Gerät seine eigene hat.

Wenn Sie für Handys suchen, dann sehr wahrscheinlich ist es eine für Telefon-Versionen, vielleicht jede pro-Betriebssystem wie iOS, Symbian, Android, * Fenster, ...

Wenn Sie nicht das Protokoll über die finden Internet, dann installieren Sie die virtuelle Karte für serielle Ports, führen Sie Mann in der Mitte auf Loop-Ports, um zu sehen, welche Daten bei der ersten Kommunikation mit der Telefonanwendung gesendet werden.

Hinweis: Achten Sie nicht auf Daten, wenn Sie eine Verbindung zum Internet herstellen, z. B. wenn Sie das Telefon als Modem verwenden. Sie werden nur AT & T Protokoll sehen, was Ihnen nicht viel helfen würde.

Wenn Sie sehen möchten, wie es universell funktioniert, verwenden Sie dieselbe Technik mit der virtuellen seriellen Karte, aber wenn der Assistent für neue Geräte neue Hardware erkennt.

P.S. Ich habe etwas gefunden!

Versuchen zu senden:

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

Sie sollten einige Daten enthält numerische Kennung eines Geräts zurück. Wie die Seriennummer.

+0

Vielen Dank für Ihre Hilfe. Ich denke, was du mir geschickt hast, geht in die richtige Richtung, aber'ser.write ('\ x02S \ x00 \ x00 \ x00 \ x00 \ x03') 'gibt mir nur die Nummer 7. Aber es ist die gleiche, die ich bekomme indem ich den AT-Befehl'AT + CGMI' sende, der mir den Herstellernamen des Gerätes geben soll. Muss ich irgendwie auf die Antwort des Geräts warten? – fahrradlaus

+0

Die Idee ist, dem Gerät einige Daten zu senden.Wenn es falsch ist, antwortet ein Gerät mit einem Fehlercode/Nachricht. Wenn es richtig ist, dann erhalten Sie den Info oder Seriencode. Was hier passiert, ist höchstwahrscheinlich, dass Sie den Fehlercode erhalten. Die Verwendung von AT & T, wenn sich das Telefon nicht im Modemmodus befindet, bringt Ihnen nichts. Zumindest sollte es nicht. Das Telefon empfängt möglicherweise AT & T aus heiterem Himmel, aber es wird höchstwahrscheinlich nur die Firmware-Version des GPRS-Modems zurückgeben. Normalerweise muss das Telefon entweder per Befehl vom Port oder manuell in den GPRS-Modus versetzt werden. (wie iPhone). – Dalen

+0

Stellen Sie außerdem sicher, dass Sie die richtige Baudrate verwenden. Wenn die Baudrate falsch ist, empfängt das Gerät Unsinn und nimmt es als Fehler wahr. Der zurückgegebene Wert ist auch ein Unsinn. Zurückgegebene 7 zeigt an, dass sowohl meine Zeichenfolge als auch der AT & T-Befehl als Fehler empfangen werden, aber ob es ein tatsächlicher Fehler ist oder die Baudrate falsch ist, muss überprüft werden. Wenn 7 tatsächlich binär 55 (ord ("7")) ist, dann ist es möglich, dass 55 etwas bedeutet (dieses Gerät ist ein Telefon). Aber es ist wahrscheinlich ein Fehler. – Dalen

1

Jetzt funktioniert alles gut! Ich musste den Befehl .read eingeben. Hier die Lösung:

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()