2016-06-23 9 views
-1

Ich mache ein IoT-Experiment mit Himbeerpis und Sensoren mit dem Ziel, Temperaturänderungen zu überwachen. Jeder Raspberry Pi ist mit mehreren Sensoren verbunden. Mein Ziel ist es, eine Lesung pro Sensor pro Sekunde zu haben, die Daten in einem Puffer (realer Puffer oder eine CSV-Datei) zu speichern und die Daten an einen Broker zu veröffentlichen. Das Programm macht jetzt alle Dinge in der Warteschlange. Es stellt sich eine gewisse Verzögerung heraus. Ich habe getestet und es stellt sich heraus, dass die Verzögerung vom Leseprozess kommt. Gibt es eine Möglichkeit, die Lesedauer zu reduzieren? Wird Multi Threading dieses Problem lösen? Wenn ja, was ich denke, ist 3 Thread zu erstellen. Sensor-Thread liest die Daten und speichert sie in einem Puffer. Communicator-Thread stellt eine Verbindung zum Broker her, liest die Daten im Puffer und sendet sie an den Broker. Der Haupt-Thread verwaltet den Sensor-Thread und den Communicator-Thread. Wenn ich das Programm auf diese Weise umgestalte, schreibe ich für jedes Sensor ein Sensorgewinde oder für alle Sensoren ein Sensorgewinde?Refactoring Multi-Thread-Programm auf Raspberry Pi mit Sensoren

Alle Vorschläge werden sehr geschätzt.

+4

Der Pi sollte in der Lage sein, alle Sensoren einmal pro Sekunde ohne Probleme zu lesen, selbst wenn Sie ein Dutzend Sensoren haben. Das Verwenden von Threads klingt wie ein Over-Engineering des Problems. Sie sollten zuerst überprüfen, ob die Verzögerung vom Lesen des Sensors oder dem Schreiben der Daten kommt. Versuchen Sie dann, das Problem zuerst zu beheben. – JvO

+0

Wie kann ich überprüfen, woher die Verzögerung kommt? Derzeit befinden sich alle Sensoren auf einem Steckbrett, kann es auch eine Verzögerung verursachen? – Tian

Antwort

0

Bevor Sie Ihre Anwendung neu entwerfen, sollten Sie den Engpass eingrenzen. Um dies zu diagnostizieren, würde ich versuchen, den Beginn und das Ende jedes Lesens von Ihren Sensoren in einen String-Puffer zu schreiben, den Sie im Speicher behalten. Tun Sie dies für 30 Sekunden oder so. Hören Sie dann auf, von den Sensoren zu lesen, und schreiben Sie den Puffer in eine Protokolldatei. Wenn in der Protokolldatei Verzögerungen zwischen dem Beginn und dem Ende jedes Sensorlesevorgangs angezeigt werden, ist dies der Engpass. Ist dies nicht der Fall, wird der Engpass wahrscheinlich dazu führen, dass Ihre CSV-Datei ständig auf die Festplatte geschrieben wird.

+0

Vielen Dank für Ihre Antwort. Ich bin Ihrer Anweisung gefolgt und die bestätigte Verzögerung kommt vom Leseteil. Da die Verzögerung nicht gleichmäßig über die Zeit verteilt ist, denke ich, dass es eher ein Softwareproblem als ein Hardwareproblem ist. Gibt es Vorschläge, wie Sie dieses Problem beheben können? – Tian

+0

In diesem Fall kann die Durchführung der Lesevorgänge in separaten Threads eine praktikable Lösung sein. Ich würde einen Thread pro Sensor verwenden und jede einzelne einen Lesevorgang durchführen und die Daten in einen gemeinsamen Puffer ablegen. Sie müssen sicherstellen, dass Ihre Lese- und Schreibvorgänge im Puffer synchronisiert sind. –