Alpaca Treiber für MicroPython Controller (Raspberry Pico W, ESP32, …)

  • Ersteller des Themas Ersteller des Themas RTJoe
  • Erstellungsdatum Erstellungsdatum
Status
Es sind keine weiteren Antworten möglich.

RTJoe

Aktives Mitglied
Hallo zusammen,
für mein aktuelles Selbstbauprojekt – einen Stromversorgungsverteiler für’s Teleskop – war ich auf der Suche nach einer Softwarelösung, um die Schalter per gängiger Astro-Software bedienbar zu machen und die gemessenen Ströme anzeigen zu können. Ich habe mich dann entschieden, einen Alpaca Treiber zu implementieren. Dieser lässt sich vollständig in die von mir verwendeten Microcontroller einbetten, es sind keine ASCOM Treiber auf dem PC notwendig. Alpaca ist betriebssystemunabhängig und kann nahtlos in mein derzeitiges, ASCOM basiertes Setup integriert werden.

Die Software ist in MicroPython geschrieben und kann deshalb für Selbstbauprojekte mit kleinen Microcontrollern verwendet werden, in denen selbst ein Raspberry Pi schon Overkill bedeuten würde. Ich habe sie auf einem Raspberry Pico W und einem ESP32-C3 getestet. Damit können Projekte mit solchen Controllern von Astrosoftware wie z.B. N.I.N.A. oder auch von selbst geschriebenen Programmen bedient werden.

IMG_0111.jpg


Derzeit wir nur der Gerätetyp „Switch“ unterstützt, die Software kann aber für andere Typen erweitert werden (ich habe bereits Typ „CoverCalibrator“ für Flatpanels in Planung). Das Alpaca Discovery Protocol (zur automatischen Suche aller verfügbaren Geräte im Netzwerk) ist bereits enthalten.

Ein spezielles Feature ist die besonders einfache Unterstützung von Ein- und Ausgangspins, ADC-Eingängen und PWM-Ausgängen. Diese können ohne das Schreiben von Code verwendet werden. Man editiert einfach eine JSON-Datei mit der für das Projekt benötigten Konfiguration der Pinfunktionen, startet die Software und los geht’s…

Hier ist eine solche Beispielkonfiguration mit 4 Pins (je ein Eingang, Ausgang, ADC und PWM):
Python:
[
{"switchnr": 0,"name": "GPIO OUT","pincfg": {"pin": 15,"pinfct": "OUTP","initval": 1},"canwrite": true,"min": 0,"max": 1,"step": 1,"swfct": "MiPyPin","descr": "Output test pin"},
{"switchnr": 1,"name": "GPIO In","pincfg": {"pin": 16,"pinfct": "INP","pull": "PULL_DOWN"},"canwrite": false,"min": 0,"max": 1,"step": 1,"swfct": "MiPyPin","descr": "Input test pin"},
{"switchnr": 2,"name": "PWM test","pincfg": {"pin": 14,"pinfct": "PWM","initval": 19000,"freq": 1000},"canwrite": true,"min": 0,"max": 65535,"step": 1,"swfct": "MiPyPin","descr": "PWM test pin"},
{"switchnr": 3,"name": "ADC test","pincfg": {"pin": 28,"pinfct": "ADC"},"canwrite": false,"min": 0,"max": 65535,"step": 1,"swfct": "MiPyPin","descr": "ADC test pin"}
]

Wenn der Controller mit dieser Konfiguration mit N.I.N.A. verbunden wird, macht die Benutzeroberfläche automatisch alle Switches zugänglich. Damit können nun Ausgangspins und PWM-Werte gesetzt sowie Eingangspins und ADCs ausgelesen werden. Hier die von N.I.N.A. automatisch erstellte Oberfläche für diese Konfiguration:

SwExample1NINA.jpg


Hier ist mein einfacher Steckbrett-Testaufbau für obiges Beispiel mit einem Raspberry Pico W. Man kann eine LED via GPIO Ausgang ein- und ausschalten sowie die Helligkeit einer zweiten LED mittels PWM einstellen. Außerdem werden der Zustand des Tasters und die Spannung des Trimmpotis angezeigt.

SwExample1BBoard.jpg


Für speziellere „Switches“ muss die benötigte Funktionalität einfach in ein paar Get- und Set-Methoden programmiert werden, den Rest erledigt der Treiber. Ich habe z.B. ein Beispielprogramm erstellt, in dem ein DS18B20 Temperatursensor mit ein paar Zeilen Code als „read-only“ Switch angebunden wird.

Der Treiber hat alle ASCOM Alpaca Conformance Tests erfolgreich absolviert, sollte also wirklich ASCOM Alpaca konform sein.

Den kompletten Quellcode einschließlich Doku habe ich auf Github zur Verfügung gestellt. Ihr könnt ihn gerne für eigene Projekte verwenden:
https://github.com/RunTJoe/MiPyAlpaca

Viele Grüße,
Joachim
 
Hallo Joachim,

tolles Projekt, zumal ich auch gerade ein paar minimale Erfahrungen in Python gesammelt habe beim umschreiben von Shell-Scripten.:)
Mich würde sowas schon reizen im Hinblick auf die Nutzung als Steuerung für Heizbänder incl. Berechnung des aktuellen Taupunkts.
Mal sehen, ob ich da in Zukunft mal drauf zurückkomme. Zurzeit bin ich noch nicht in Bastellaune. :eek:

Grüße
Hartmut
 
Status
Es sind keine weiteren Antworten möglich.
Zurück
Oben