2017-01-12 3 views
0

Ich verwende eine OrangePI-Platine, um Daten von einem Arduino zu protokollieren, die alle 10 Sekunden eine Linie durch serielle Ausgabe gibt.Python-Skript? - Protokollierung der seriellen Ausgabe von Arduino

20.0/12.0 V 

die die Temperatur durch einen Temperatursensor an der arduino und die Spannung gemessen wird, die loggig für Batteriesparzwecke ist.

Ich habe es geschafft, ein Skript aus Schnipsel und Vorschläge rund um das Web zusammengestellt, die genau das tut, was ich brauche.

Das Skript läuft jedes Mal, wenn ich den Rechner durch Setzen eines Cron @ Reboot, das ziemlich gut funktioniert.

Jetzt plane ich den Arduino-Code mit einer „Batteriewächter“ auszudehnen, die eine Warnung an den seriellen Ausgang sendet, wenn die Spannung unter bestimmten Pegel geht

20.0/9.0 V/BAT! 

An diesem Punkt der OrangePI stoppen sollte/shutdown und senden Sie einen bestimmten Brief an das Arduino, wenn es "sicher zum Herunterfahren", so dass das Arduino ein Relais deaktivieren und das gesamte System ausschalten kann. (und sich selbst)

Also ich nehme an, der OrangePI sollte immer die letzte Zeile im Arduino-Ausgang für die Zeichenfolge "BAT!" und dann das Herunterfahren auslösen.

Ich habe ein Konzept für den harware Teil dieses Projektes auch ein Konzept für den Arduino-Code

aber keine Ahnung, wie das auf Linux codieren. Vielleicht ist der Ansatz falsch, wie es jetzt ist, und das Ganze sollte in Python oder so codiert werden?

Vielen Dank für Anregungen.

+0

Das sieht nicht wie * Python * für mich aus .. Es ist in der Tat ein * Bash * Skript –

+0

Ja ist es nicht Python, die Frage ist, ist all das in bash verwaltbar oder sollte ich alles in Python neu schreiben. Oder C wenn möglich, da ich besser mit C vertraut bin (weil arduino) – Georg91

Antwort

1

Python wäre ein wirklich einfacher und netter Weg zu gehen. Mit pyserial können Sie die Strings lesen, die Sie über die serielle Verbindung senden, und nach dem Wort BAT suchen oder was immer Sie wirklich wollen. Also, aus der Spitze von meinem Kopf, könnten Sie so etwas wie:

import serial 
from sys import argv 

port = argv[1] # just to assign port and baud from command line 
baud = argv[2] 

COM = serial.Serial(port, baud) # create serial instance 
data_in = COM.readline().strip("\r\n") # strip ending 
### then some manipulation of data_in ### for example: 
if(something you want is in the transmission string): 
    # do something 
else: 
    float_list = [float(x) for x in data_in] 
    # convert all the vals to a floats for logging etc. 

Hoffen, dass dieses Beispiel ist hilfreich und man kann mit ihr etwas tun.

Verwandte Themen