Ich schreibe ein Raspberry Pi-Programm, um Dinge auszuführen, Eingaben von Sensoren zu übernehmen, in einer Datenbank zu speichern und mit einem Server zu synchronisieren.
Gibt es eine Möglichkeit, es auf dem PC zu testen, bevor es auf dem Raspberry Pi bereitgestellt wird? Da es zu viele GPIO-Vorgänge gibt, möchte ich sicherstellen, dass es funktioniert, bevor ich es auf den Raspberry Pi lege. Eine Art GPIO-Emulator oder so. Ich bin auf Manjaro Linux .
Es muss kein Emulator sein, eine Art IDE, die GPIO-Funktionen verstehen kann. Eine mögliche Ausgabe wäre beispielsweise:
gpio 1 is running,
sensor 1 is running
sensor 2 isn't running
So etwas, vielleicht ein Bpython-Plugin oder so. Ich möchte nur sicherstellen, dass alle meine GPIO-Funktionen so funktionieren, wie ich sie haben möchte, bevor ich sie auf dem Raspberry Pi teste, da Fehler auf dem Raspberry Pi oft damit zusammenhängen, dass ich Teile nicht richtig verbinde. Und ich mag es nicht, Fehler auf dem Raspberry Pi zu codieren und zu beheben.
Wenn ich also überprüfen kann, ob mein Skript auf meinem PC ordnungsgemäß funktioniert, kann ich zum Raspberry Pi gehen, da ich weiß, dass mein Skript in Ordnung ist, und Probleme auf der Platine beheben. Ich möchte mein Skript einfach nicht mehr auf dem Raspberry Pi testen.
Antworten:
Mir ist keine fertige Lösung für Ihre Anforderungen bekannt.
Sie können jedoch mit wenig Aufwand Ihre eigenen schreiben. Wie viele verschiedene Aufrufe tätigen Sie an die GPIO-Funktionen? Möglicherweise verwenden Sie weniger als 10. Erstellen Sie einfach Ihr eigenes lokales Python-Modul mit dem gleichen Namen wie Ihr Zielmodul und erstellen Sie Stubs für die von Ihnen verwendeten Funktionen.
Wenn Sie beispielsweise die Funktion gpio_write () verwenden, die ein gpio und ein Level benötigt, könnte Ihr Stub nur sein
Ihr gpio_read-Stub könnte sein
Dies ist eine ziemlich übliche Praxis, die lange Zeit in der Softwareentwicklung verwendet wurde, um Software zu testen, bevor Hardware verfügbar ist.
Mein pigpio Python- Modul läuft übrigens auf Windows / Mac / Linux-PCs.
quelle
GPIO Zero bietet eine Mock-Pin- Schnittstelle, sodass Sie denselben Code auf Ihrem PC ausführen und die Pins emulieren können. Sehen Sie sich Beispiele für die Verwendung in der Testsuite an .
quelle
Ich habe diese kleine Bibliothek fedeb95 / pin gemacht , die sich für mich als nützlich erwiesen hat. Es fehlen einige Funktionen, aber wenn es zu Ihnen passt ... hat es bei mir funktioniert.
Bearbeiten: Pin ist ein RPi.GPIO-Wrapper. Anstatt die Methode x von RPi.GPIO aufzurufen, rufen Sie die Methode x von pin auf. Sie können in einer Konfigurationsdatei angeben, ob Ihr Programm im Testmodus ausgeführt wird (wenn Sie zufällige Werte von Pins lesen oder Werte, die Sie mit set_value festgelegt haben) oder auf einer tatsächlichen Himbeere, in der diese Bibliothek einfach die entsprechende RPi.GPIO-Methode aufruft. Es fehlt etwas, aber es ist eine sehr einfache Bibliothek, und jeder kann mir einen Beitrag leisten oder mir sagen, welche Funktion er benötigt, und ich werde versuchen, sie hinzuzufügen
quelle
Es gibt eine Bibliothek, die Sie hier herunterladen können: https://roderickvella.wordpress.com/2016/06/28/raspberry-pi-gpio-emulator/
Oder es gibt einen Simulator, mit dem Sie den Python-Code hier schreiben und testen können: http://blog.withcode.uk/2016/10/rpi-gpio-python-simulator/
quelle
Ich nehme an, Sie könnten spöttische Bibliotheken wie Mock verwenden .
Sie werden hauptsächlich für Unit-Tests verwendet, aber ich bin mir sicher, dass es in Ihrem Fall sehr gut funktionieren würde. Und Sie sollten es wahrscheinlich besser versuchen, indem Sie einige Unit-Tests schreiben.
Es ersetzt unterwegs eine vorhandene Klasse, und Sie müssen sich nur das Verhalten selbst schreiben, nach dem Sie suchen. Sie können damit nichts an Ihrer Logik ändern (auch nicht die Importe), aber dennoch die Rückgabewerte erhalten, die Sie vermutlich von einem tatsächlichen Aufruf der API erhalten würden.
quelle
Als Neuling in Python und dem Pi verstand ich Joans Antwort nicht und brauchte eine einfache (Bot nicht elegant!) Methode, um mein Programm auf dem PC ohne Fehlermeldungen zu testen, die durch fehlende GPIO-Aufrufe verursacht wurden. Ich wähle einfach aus, welche Codeabschnitte ausgeführt werden sollen, indem ich überprüfe, auf welchem Computer ich ausgeführt werde. Ich kann dann einen GPIO-Anruf - wie das Schließen eines Schalters - über die PC-Tastatur auslösen.
quelle