INDI auf dem Raspberry einrichten | Seite 4 | Astronomie.de - Der Treffpunkt für Astronomie

INDI auf dem Raspberry einrichten

ksnguyen

Mitglied
Die Softwaren des Astroberry kosten entsprechend der Debian-Philosophie 0€. Aber es geht hier in diesem Thread um INDI auf Raspberry-Pi zurichten. Im speziellen wollen wir ein Verständnis und ein Gefühl bekommen für den Umgang und Hinzufügen neuer Hardwareperipherie wie GPS-Modulenund und wie es sich in den INDI-Stack integriert lässt.

Die Fragen zum Finanziellen und zum Nutzen sind hier nicht Thema, deswegen will ich hier auch in die falsche Richtung diskutieren. Wir können das in diesem Thread weiter machen.

Letztlich wollen wir doch immer nur das eine: Hardwareanstecken, Einschalten, und Sterne genießen.

So sollte es sein und so läufts ja auch schon, nur jetzt kommen halt neue GPS Module ins Spiel und der undurchsichtige Bluetooth-Stack macht aus uns wieder Ochsen vorm Berg und freudige Spielkinder, die wieder was neues entdecken.

Kurz: Das macht einfach Spass.

Grüße,

Sebastian
 
Zuletzt bearbeitet:

steins-ursel

Mitglied
Hallo!

Noch bin ich dran, um lcdproc mit lcdgps am Raspi zum Laufen zu Bewegen. Leider ist nur der HD44780 Treiber derjenige, welcher die meisten Optionen bietet.
Nachteil: Es gibt nicht wirklich viele LCD-Displays, welche in der Familie wirklich interessant sind.
Bedingungen: 3,3V, I2C oder zumindest 4BIT-Modus, Rest macht ein dann PCF8574(A).
Einzige gefundene Variante, bekommt noch eine Rote Folie vorne drauf. Die neueren Sachen von Electronic Assembly bieten weitaus mehr Flexibiltät, vor allem in der Hintergrundbeleuchtung mit rot, passen aber nicht so recht. ich werde da wohl noch einige Varianten auf dem Steckbrett testen müssen.

P.S. Hier kommt der Basteltrieb vor allem bei schlechtem Wetter voll zum Ausbruch :cool: :regen:
 

steins-ursel

Mitglied
Hallo Thomas,
Ein BT Modul mit zwei UARTs kenne ich nicht. Warum nimmst du nicht zwei HC05 oder HC06?
Hallo!

Habe ich gemacht mit einen kleinen Irrweg (noch) über zwei JDY-16. Die Dinger muss ich mir noch genauer Anschauen, Konfiguration und Nutzung sehr zäh, der Erfolgt blieb allerdings trotz sehr später Ursachensuche am WE aus.
Als Klassiker habe ich dann zum dem einen HC-06 noch ein 2. gebaut mit einem Beitian BN-220 (GPS), läuft klasse.
Intensiver Test über eine Nacht steht noch aus.
Habe somit in der MeteoStation jetzt eine "Bluetooth-Phalanx" :giggle:
 

ksnguyen

Mitglied
Das GPS Modul "Ublox NEO-6M" auf dem Astroberry hat direkt nach dem einstecken schon im Sekundentakt zu blinken angefangen, kurz darauf hat der USB-Seriell Wandler mit heftigen Blinken an der Sendeleitung einen Paketstrom angezeigt und zu sehen war das im Anhang als .png Bild.

Den GPSd habe ich im INDI Control-Panel vorher noch eingeschaltet. Versorgt ist das Modul mit 5V vom USB-Seriell-Wandler. Die mitgelieferte Patch-Antenne ist dran.

Ich hab nichts gemacht.
 

Anhänge

ksnguyen

Mitglied
Krass, Du hast die Platine da unten selbst geätzt?
Passt soviel Bluetooth-Software in den Arduino-Speicher?

Cooles Teil.

Mir ist noch was eingefallen zu dem GPS-Modul bezüglich der Empfangsqualität, die ich auch bei mir verbessern mag: Das Ublox-Modul hat an der Unterseite 4 große Lötpads. Ich vermute, wenn man diese flächig gut an Masse anbindet, sollten die Analog-Schaltungen im GPS-Modul einen ruhigeren Massebezug bekommen. Ich habe das mit (zu großem) Kupferblech versucht, aber sowohl das Ublox als auch das Blech bringen die Wärme vom Lötkolben so schnell weg, dass das unverbleite Lötzinn nicht haftet.
 

steins-ursel

Mitglied
Krass, Du hast die Platine da unten selbst geätzt?
Hallo!
Nicht geätzt!, habe vor Jahren mir eine A3-Portalfräse selbst gebaut.
Entwicklung einer Platine: Erstellung von Schaltplan und Board unter CadSoft Eagle 7.x -> Wandlung per ULP in G-Code -> Isolierfräsen unter Linux-CNC 2.7.X -> Reinigung mit "weicher" Messingbürste -> Löten -> Unter Spannung setzen und hoffen, dass keine Rauchzeichen kommen ;)

Passt soviel Bluetooth-Software in den Arduino-Speicher?
Es gibt keine einzige Zeile Bluetooth-Code, die Module sind transparent im Signalweg integriert, d.h. die Hard- und Software bekommt es nicht mit, solange die Übertragungsraten im Limit des Moduls bleiben. Einzig die Schnittstelle im Raspi ist unterschiedlich, /dev/ttyUSBX oder /dev/ttySX ist in der Regel kabelgebunden, /dev/rfcommX kommt direkt aus dem BT Modul des Raspi's. Konfiguration der Module über ein Terminal mit AT Befehlen vor dem ersten Einsatz, Entnahme der Info's aus den Datenblättern

Cooles Teil.

Mir ist noch was eingefallen zu dem GPS-Modul bezüglich der Empfangsqualität, die ich auch bei mir verbessern mag: Das Ublox-Modul hat an der Unterseite 4 große Lötpads. Ich vermute, wenn man diese flächig gut an Masse anbindet, sollten die Analog-Schaltungen im GPS-Modul einen ruhigeren Massebezug bekommen. Ich habe das mit (zu großem) Kupferblech versucht, aber sowohl das Ublox als auch das Blech bringen die Wärme vom Lötkolben so schnell weg, dass das unverbleite Lötzinn nicht haftet.
Ob hier eine größere Massefläche Sinn macht, wage ich zu bezweifeln, da wir hier im Wellebereich von wenigen cm sind. Bei LW, MW und KW stimme ich dir voll und ganz zu, hier IMHO aber nicht.
 

steins-ursel

Mitglied
Hallo!

Raspberry pi und lcdproc habe ich nun zum Funktionieren bewegen können. Allerdings nicht mit den vorgesehenen Displays von EA (DOGM....), sondern es wird sehr klassisch. Es muss zwingend eines sein, dass mit dem Urvater 44780 kompatibel ist, sonst geht da nichts.
Allerdings ist mit beim durchsehen der Firmware der Meteostation und Suche der Unterstützung vom Controller ST7036 eine Idee gekommen. Es gibt bei EA eine Library für den Arduino, welche den ST7036 unterstützt.
Die Firmware wird dahingehend angepasst, dass die einzelnen Daten auf dem Display in der Meteostation ausgegeben werden. Somit kann man das gute Stück auch Stand Alone nutzen.
 

ksnguyen

Mitglied
Langsam. Der ST7036 ist deine Kernintelligenz im System? Und nun passt Du den C-Code an für das Display.

Ich dachte das Bluetooth ist dazu da, dass die Daten per Funk übertragen werden, und auf dem entfernten Rechner ausgewertet werden.
 

steins-ursel

Mitglied
N'Abend!

Kleines Verständnisproblem:
1x Bluetooth übermittelt die Daten von der Artduino Meteostation an einen Treiber von Indi.
1x Bluettoth übermittelt die Daten vom GPS an den GPS-Deamon. Darauf greift ntp und ein Treiber von Indi zu.
Ich möchte die GPS-Daten per lcdproc auf einem kleinen Display am Raspi ausgeben, um mit zu bekommen, wann der Fix steht oder weg ist. Da hatte ich die ganze Zeit mit einem ST7036 und einem SSD1803 herum experimentiert. Leider ist die Initialisierung auf den HD44780 zugeschnitten (ist auch der Treiber schlechthin), sodaß ich die anderen beiden nicht habe zu Laufen bewegen zu können.

1. für lcdproc habe ich nun eine Lösung mit einen kompatiblen Display gefunden (sogar 3,3V), muss nur die Platine erstellen und das Ganze ausgiebig testen.
2. für den ST7036 habe ich bei Electronic Assembly eine library für den Arduino gefunden. Da noch mind. 10kb Platz sind im Flash, ließe sich die Firmware soweit erweitern, dass direkt an der Wetterstation das Display die "Wetterdaten" ausgeben kann, somit muss ich nicht jedesmal den Raspi mit rauskramen, um nur mal zu schauen, wie wird's denn.
Angeschaut habe ich mir das Ganze schon, die Basis bildet die Meteostation Firmware. Aus der Testfirmware hole ich mir die Ausgabenblock für die serielle Schnittstelle, und ersetze das Serial.Print durch Displayausgaben, muss da allerdings das Ganze hintereinander ausgeben, max. 3 Werte gleichzeitig.

Auszug Firmware:
C:
void loop()
{
  byte pin, analogPin;

  /* DIGITALREAD - as fast as possible, check for changes and output them to the
     FTDI buffer using Serial.print()  */
  //Nacho Mas. TODO: sustitute this call by
  //mapAndSendDigital()
  //checkDigitalInputs();

  /* SERIALREAD - processing incoming messagse as soon as possible, while still
     checking digital inputs.  */
  while (Firmata.available())
    Firmata.processInput();

  /* SEND FTDI WRITE BUFFER - make sure that the FTDI buffer doesn't go over
     60 bytes. use a timer to sending an event character every 4 ms to
     trigger the buffer to dump. */

  currentMillis = millis();
  if (currentMillis - previousMillis > samplingInterval) {
    previousMillis += samplingInterval;
    checkMeteo();
    runMeteoStation();
/* Hier kommt der Display Code !!!!
    checkDigitalInputs();
    /* ANALOGREAD - do all analogReads() at the configured sampling interval */
    for (pin = 0; pin < TOTAL_PINS; pin++) {
      if (IS_PIN_ANALOG(pin) && pinConfig[pin] == ANALOG) {
        analogPin = PIN_TO_ANALOG(pin);
        if (analogInputsToReport & (1 << analogPin)) {
          //Nacho Mas. Read analog and do something before send. Then send it
          mapAndSendAnalog(analogPin);
        }
      }
    }
    // report i2c data for all device with read continuous mode enabled
    if (queryIndex > -1) {
      for (byte i = 0; i < queryIndex + 1; i++) {
        readAndReportData(query[i].addr, query[i].reg, query[i].bytes);
      }
    }
  }
}
Auszug aus Testfirmware:
C:
void loop(){
    Serial.println("LOOP BEGIN\t");
    runMeteoStation();
    Serial.println("RESULT\t");
    Serial.print("IR:");
    Serial.print(IR);
    Serial.print(", P:");
    Serial.print(P);
    Serial.print(", HR:");
    Serial.print(HR);
    Serial.print(", DEW:");
    Serial.print(dewPoint(Thr,HR));
    Serial.print(", IR Radiance:");
    Serial.print(Light);
    Serial.print(", Temp HR:");
    Serial.print(Thr);
    Serial.print(", Temp IR:");
    Serial.print(Tir);
    Serial.print(", Temp P:");
    Serial.println(Tp);
    Serial.println("\n");
    delay(1000); // wait a second before printing again
}
Hier zum Schluss noch ein Beispiel von Electronic Assembly:
C:
#include <Arduino.h>
#include <SPI.h>
#include <dogm_7036.h>
/*Available functions in dogm_7036 Libraray:
void initialize       (byte p_cs, byte p_si, byte p_clk, byte p_rs, byte p_res, boolean sup_5V, byte lines);
void string           (const char *str);
void ascii            (char character);
void position         (byte column, byte line);
void displ_onoff      (boolean on);
void cursor_onoff     (boolean on);
void define_char      (byte mem_adress, byte *dat);
void clear_display    (void);
void contrast         (byte contr);
*/

dogm_7036 DOG;
byte arrow_down[] = {0x04, 0x04, 0x04, 0x04, 0x15, 0x0E, 0x04, 0x00}; //pattern for own defined character

//the following port definitions are used by our demo board "EA PCBARDDOG7036"
int led       = 3;
int led_red   = 3;
int led_green = 5;
int led_blue  = 6;
void init_backlight(boolean mono);
void mono_backlight(byte brightness);
void rgb_backlight(byte red, byte green, byte blue);


void setup()
{
  init_backlight(false); //use rgb backlight in this sample code. Please change it to your configuration
  DOG.initialize(10,0,0,9,4,1,DOGM163);   //SS = 10, 0,0= use Hardware SPI, 9 = RS, 4 = RESET, 1 = 5V, EA DOGM163-A (=3 lines)
  DOG.displ_onoff(true);          //turn Display on
  DOG.cursor_onoff(true);         //turn Curosor blinking on
  DOG.define_char(0, arrow_down); //define own char on memory adress 0
}


void loop()
{
  DOG.clear_display();            //Clear the whole content
  DOG.position(1,1);              //set Position: first line, first character
  DOG.string("DOGM163-A");        //show String
  DOG.position(1,2);              //set Position: second line, first character
  DOG.string("ST7036 COG");   
  DOG.position(1,3);           
  DOG.string("3 lines 16 char"); 
  rgb_backlight(255, 0, 0); //red backlight
  delay(2000);
  DOG.clear_display();         
  DOG.position(1,1);
  DOG.string("ELECTRONIC");
  DOG.position(9,2);
  DOG.string("ASSEMBLY");
  DOG.position(1,3);
  DOG.string("lcd-module.com");
  rgb_backlight(0, 255, 0); //green backlight
  delay(2000);
  DOG.clear_display();
  DOG.position(1,1);           
  DOG.string("Arduino Library");
  DOG.position(1,2);
  DOG.string("0wn Char ");
  DOG.ascii(0);                   //show own defined char (adress 0, see DOG.define_char())
  DOG.position(1,3);
  DOG.string("low power");
  rgb_backlight(0, 0, 255); //blue backlight
  delay(2000);
  DOG.clear_display();
  DOG.position(1,1);           
  DOG.string("LED-Backlights:");
  DOG.position(1,2);
  DOG.string("5 monochrome");
  DOG.position(1,3);
  DOG.string("full color RGB");
  rgb_backlight(255, 255, 0); //purple backlight
  delay(2000);
}

//The following functions controll the backlight with a PWM. Not needed for the display content
void init_backlight(boolean mono)
{
  if(mono) //EA LED55X31-G, EA LED55X31-W, EA LED55X31-B, EA LED55X31-A, EA LED55X31-R
  {
    pinMode(led,  OUTPUT);
    mono_backlight(255);
  }
  else  //EA LED55X31-RGB
  {
    pinMode(led_blue,  OUTPUT);
    pinMode(led_green, OUTPUT);
    pinMode(led_red,   OUTPUT);
    rgb_backlight(255,0,0);
  }
}
//Use this funtion for monochrome backlight
void mono_backlight(byte brightness)
{
  analogWrite(led, brightness);
}
//Use this function for RGB backlight
void rgb_backlight(byte red, byte green, byte blue)
{
  analogWrite(led_red,  red);
  analogWrite(led_green, green);
  analogWrite(led_blue,   blue);
}
P.S. aktuell hat der Basteltrieb bei mir voll zugeschlagen, und ich lass da auch nicht locker, bis das Teil läuft.
Ist allemal besser als Corona-Buden-Koller ;)
 
Zuletzt bearbeitet:

ksnguyen

Mitglied
Ok, ich glaub ich habs verrafft: Electronic A. liefert einen Arduino Treiber für ein SPI-gesteuertes Mehrfarb-LCD Display. Den nutzt Du um Deine Meteo-Umweltdaten auf dem LCD lesbar zu machen.

Daher auch die Main-loop() des Arduino, in der Du zyklisch alles pollst und die Meteostation bedienst mit einem eingebetteten Zustandsautomaten ( checkMeteo(); runMeteoStation(); ).

Deinen Ansatz des Arduino als Hardware/Software Treiber für das Display finde ich cool und wird funktionieren, da bin ich sicher.

__

Es gibt zwar auch einen Linux Treiber Kernelmodul. Jedoch weiß ich nicht wie man den Device Tree Blob Overlay in der Boot-Konfiguration sauber aktiviert. Bei mir im Astroberry-Image liegen die Overlays unter /boot/overlays mit der Dateiendung .dtbo und sie werden in der /boot/config.txt aktiviert:

dtparam=spi=on
dtoverlay=anLcd_raspi.dtbo

## Original Config aus Github-Source:
#device_tree_overlay=overlays/anLcd_raspi.dtbo

Der Treiber lässt sich sicherlich auch direkt auf dem laufenden Raspi-Image "nativ" kompilieren, sodass eine Toolchain wie Yocto nicht benötigt wird (kein Crosscompile). Ich kann das mal durchspielen, wenn Du dennoch an der Linux Variante interessiert bist.
Ich kann schlecht abschätzen, was weniger Arbeit macht.

"Wie oft habe ich Euch gesagt, ihr sollte für jede Arbeit das richtige Werkzeug benutzen!" - James Doohan aka Montgomery Scott (Star Trek)
 

steins-ursel

Mitglied
Der Treiber lässt sich sicherlich auch direkt auf dem laufenden Raspi-Image "nativ" kompilieren, sodass eine Toolchain wie Yocto nicht benötigt wird (kein Crosscompile). Ich kann das mal durchspielen, wenn Du dennoch an der Linux Variante interessiert bist.
Ich kann schlecht abschätzen, was weniger Arbeit macht.

"Wie oft habe ich Euch gesagt, ihr sollte für jede Arbeit das richtige Werkzeug benutzen!" - James Doohan aka Montgomery Scott (Star Trek)
Moin!

Es muss ein Treiber für lcdproc erstellt werden je nach Controller-Typ, dazu noch das Device, wo das Display dranhängt.
Da eh schon die RTC am i2c hängt, würde sich für das Display auch i2c anbieten. Ob nun direkt, der SSD1803 kann das wohl, oder über einen PCF8574 ff. ist IMHO wohl der bessere Weg. Generell würde ich dem PCF8574 vorziehen, da kann man eine 4Bit Ausgabe implementieren und ist mit den Display doch recht flexibel.

Bevor da aber jetzt Zeit investiert wird, teste ich lieber mal die Hardware mit dem kompatiblen Display.
 

steins-ursel

Mitglied
Hallo!

das LCD an der MeteoStation läuft, ist ein EA DOGM163, sogar mit Hardware-SPI. Habe das einiges an Platinenmaterial verschossen, aber was macht man nicht alles für's Hobby. :giggle:
Schraube jetzt noch an dem mechanischen Einbau, die Messwerte werden analog der Indi-Steuerung dargestellt, einen Temperaturwert habe ich ausgelassen, sonst wäre noch eine 4. Seite notwendig geworden. Sobald alles rund läuft kommt auch der Quellcode inkl. Platinenlayout.
Auf Grund der max. Länge von 16 Zeichen pro Zeile sind für die Bezeichner nur 7 Zeichen geblieben, 6 Zeichen inkl. Komma für die Werte und 2 Zeichen für die Einheiten, sofern welche vorhanden sind.
Somit kann man die Station auch autark betreiben, ohne Raspi und Indi.
 

Anhänge

steins-ursel

Mitglied
N'Abend,

lcdproc läuft, leider nur mit einem 2x16 Testdisplay, aber immerhin. Zur Zeit noch im "Bastelstadium", aber am Wochenende hat man Zeit. Sobald in einer vernünftigen Form, gibt es Bilder.
 

steins-ursel

Mitglied
N'Abend,

lcdproc nun auch mit 4x20 Zeichen. Habe leider mit billigem Kram experimentiert, ging in die Hose.
Die Schaltung selbst mit einem PCF8574 sauber in SMD aufgebaut, 3,3V Versorgung dazu, läuft. :):):)
Morgen wird noch die Steuerung der Hintergrundbeleuchtung bestückt, die Anzeige rot foliert,
das sollte es dann sein.
 

Anhänge

Das Homepagetool mit der aktuellen Mondphase u.v.m.

(Alle Angaben für 10 Grad ö.L. Länge / 50 Grad n.B.)

In Kooperation mit www.Der-Mond.org Hole Dir jetzt das kostenlose Mondtool für Deine Homepage

Oben