• Wie beim meinem Robi V1 angemerkt, will ich noch einen mit Funktion bauen.
    Dieser zeigt den aktuellen Stand der ISS am Himmel an.

    Ist offensichtlich ja schon fast fertig ;)

    Ich will aber mal wieder zu viel und habe jetzt angefangen mit einem OLED-Display das System zu erweitern.
    Display bekomme ich angebaut und auch angesprochen.
    Das ganze System beruht aber auf zwei verschiedenen Teilen. Der Code auf dem ESP und der python-code auf meinem Server.
    Der Server prüft den Stand der ISS, gleicht das mit den Daten meines Standorts ab und schiebt die Motoren an, oder eben nicht.
    Im log-Fenster des Python-Codes werden diese Daten angezeigt:


    Und die Zeile 5 wäre die interessanteste für ein Display direkt am ESP.
    Hinzu kommt, dass es ein kleines OLED ist, auf dem die Daten gar nicht alle passen würden.
    Die reine Uhrzeit 21:13 würde schon reichen.
    Aber ... keinen Plan wie.

    Das Projekt (ohne Display und ohne schnickschnack) gibt es schon länger auf instructables:
    https://www.instructables.com/id/Building-an…g-Adafruit-HUZ/
    Habe dort natürlich auch schon nachgefragt. Das Prinzip verstehe ich, aber umsetzen kann ich es nicht.
    Falls hier also jemand denkt ... "ey, easy. mach einfach dies und das" dann immer raus damit.

    Ich baue das Ding auch ohne Display. Gleich geht es erst mal ans Layout, da doch ein paar Teile untergebracht werden müssen.

    Mir ging auch schon durch den Kopf, ob man den ganzen Python-Part nicht auch mit Micro-Python auf einem zweitem ESP umsetzen kann.
    Aber da habe ich noch weniger Ahnung von. Außer "ja, habe ich von gehört" ist da noch nichts an Wissen vorhanden.

    Der alte Robi V1 ist jetzt auch in 3 Wettbewerben eingetragen.
    Wer einen instructables-Account hat, darf gerne für den kleinen seine Stimme abgeben :)
    -> https://www.instructables.com/id/Cutest-Heartbeat-Robot/

  • Zu MicroPython,
    MicroPython ist != Python, heisst MicroPython implementiert nicht alles von CPython und
    die meissten Module haben ein u-Prefix wie zum Beispiel uos als os Modul.
    Desweitern gibt es auch Unterschiede in der Art der Implementierung wie z. B. ReferenzCount vs. GarbageCollection.
    D. h. das Du die wenigsten, bis auf sys wahrscheinlich keine, Standardbibliotheken und Module nutzen kannst.

    Zu deinem Projekt, normalerweise wird dies so gelöst dass entweder der ServerA automatisch zu allen verbunden Clients eine Nachricht
    verschickt oder der Client periodisch den ServerA nach neuen Infos kontaktiert. Dann gibt es noch die ServerA/ClientServer Lösung wo der Client
    auch eine Serverkomponente hat die dann vom ServerA genutzt wird um Neuigkeiten zu veröffentlichen.

    Bei allen Lösungen muß der Client und der Server einen IP-Code haben welcher dann durch TCP/UDP etc... die Kommunkikation realisiert.

    Ggf. könntest Du auch Hardwarelösungen in betracht ziehen, sprich der Server setzt die Infos in Infrorot-Signale um und sendet diese zum Client,
    oder Fake-Wifi-AP Announcements welche als SSID die Zeit als UnixTimestamp enthaten oder Lichtimpulse, Schallimpulse im nicht hörbaren Bereich
    Funk, usw ... da fällt Dir wahrscheinlich mehr als mir ein.

    Soll es eine Softwarelösung mit IP-Protokoll sein, dann müsstes Du Dich erstmal entscheiden welches Verfahren Du benutzen willst, da jedes
    seine Vor- bzw. Nachteile hat danach finden wir bestimmt auch passenden Code ;)

    Cheers
    Claudia

  • D. h. das Du die wenigsten, bis auf sys wahrscheinlich keine, Standardbibliotheken und Module nutzen kannst.

    Damit dürfte sich micro-python erledigt haben :)

    Zu deinem Projekt, normalerweise wird dies so gelöst dass entweder der ServerA automatisch zu allen verbunden Clients eine Nachricht
    verschickt

    Der Ersteller hatte ja bereits eine Lösung gebaut. Nur eben so, dass das Display am Server hängt und nicht am Client.
    Er verwendet einen Rasp als Server und gibt die Infos direkt an ein LCD-Display aus.

    Derzeit steuert der Server den Client via http. Über die Konsole lassen sich die Steuerbefehle zu den Motoren mittels curl absetzen.
    Verbindung per WLAN/LAN ist also gegeben.

  • Feines Projekt!

    Ich hab was ähnliches vor, wenn ich mal mit dem Grundgerüst für meinen ADS-B Tracker fertig bin :)

    Dachte dabei aber an die Ausrichtung einer Kamera und Verfolgung von Flugzeugen anhand gegebener Koordinaten. Und wenn ich ganz ganz gaaaaaanz viel Zeit hab, bau ich da noch einen elektronischen Kompass und einen GPS Empfänger ein, sodass man sich nicht immer die "Mühe" machen muss, den Aufbau exakt nach einer Himmelsrichtung auszurichten, sondern es kalibriert sich von selbst ein.

    Hach, wir werden sehen, was die kalten Winterabende noch so bringen... Vor allem, da ich Bioshock Infinite schon durch habe :D

  • OK, hab mir das Projekt mal genauer angesehen und folgenden Vorschlag (alles ohne Pistole) :)

    Im python script fügst im main loop nach

    Python
    print("Next Pass (Localtime): %s" % ephem.localtime(tr))


    einen Funktionsaufruf


    Python
    doLCD(ephem.localtime(tr))


    ein.
    Die Funktion selber sieht zum Beispiel so aus

    im esp sketch fügst Du im void loop eine Abfrage auf diesen String ein


    C
    // CONTROL LCD
      int index = req.indexOf("/lcd/time/");
      if (index != -1) {
        // req.substring(index)
        respMsg = "OK: LCD NEW TIME SET";
      }


    Die Zeile // req.substring(index) ist die die ausgearbeitet werden muß,
    sprich hier hast Du ja wahrscheinlich etwas wie LCD.write(... dann würdest Du dies
    eben durch

    LCD.write(req.substring(index))

    ersetzen. Ob dies so 1 zu 1 geht hängt davon ab ob die genutzt LCD Schreibmethode einen String erwarten kann.

    Achja, substring(index) liefert den gesammten Text bis zum Ende nach ermitteltem index zurück, was heisst, evtl. muß
    auch erst ein buffer in der Größe angelegt werden um den Text zu speichern und dann der LCD Schreibmethode zu übergeben.
    Hängt aber alles von den eingesetzten Methoden ab. Vlt. erstmal einen print auf die console um zu sehen ob es überhaupt funktioniert.

    Alles ungetestet und habe mich so gut wie möglich an den vorgegebene Codestyke gehalten.

    Cheers
    Claudia

    Edit: Du mußt höchstwahrscheinlich req.substring(index+10) machen, da ja der Start des gesuchten Strings ermittelt wird
    und nicht das Ende. 10 = die Länge vom String /LCD/time/

  • Da werde ich rangehen, wenn der Webserver auf dem ESP stabil läuft.
    Der crasht so ca alle 30 bis 60 minuten. Ich habe diverse Wemos D1 minis probiert und alle das selbe Problem.
    Auch ohne angeschlossene Hardware crasht der Server-Part.
    Anpingen geht noch.

    Habe es auch bei instructables geschrieben. Abwarten.

  • Ich habe jetzt im Original-Code zwei delay-Werte von 1 auf 10 geändert.
    Scheint stabil zu bleiben. Läuft jetzt seit ein paar Stunden.
    Derzeit aber nur der Chip ohne angeschlossene Hardware. Stück für Stück aufbauen um Probleme einzugrenzen.

    Fernwartung per TeamViewer und zu Hause den Chip am USB ist schon was feines :)

    @ClaudiaF
    Wie würde das denn als einfache print-Ausgabe im seriellen Arduino-Monitor aussehen?
    Wenn ich es dort hinbekomme, ist das Display auch umsetzbar.

  • Also alles wie oben beschrieben umsetzen und die Überprüfung auf dem ESP wäre dann

    C
    // CONTROL LCD
    int index = req.indexOf("/lcd/time/");
    if (index != -1) {
        Serial.println(req.substring(index+10));
        respMsg = "OK: LCD NEW TIME SET";
    } 
    delay(2000);

    Cheers
    Claudia

    Edit: vergiß den delay(2000) - keine Ahnung warum der drinnen ist ;)

  • Noch immer nicht stabil.
    Heute knie ich mich noch mal rein.
    Habe aber auch gerade zwei weitere ESPs bestellt. Nur nicht von Wemos.
    Vielleicht ist es doch ein hw Problem. Und brauchen werde ich die früher oder später eh.
    Ausnahmsweise direkt in Deutschland bestellt. Dafür dann morgen per Brief bei mir.

  • Dafür ist es zu sporadisch. Mal läuft der Stunden, mal nur Sekunden.
    Unabhängig davon, ob der was tut oder nur so vor sich hin idlet.
    Und da das bei 4 von 4 Chips passiert, liegt es schon mal nicht nur an einem bestimmten (Wemos D1 mini).

    Das [definition='1','0']log[/definition] ist nur auf die Ausgabe http-Verbindungen gestellt.
    Heute Nachmittag lese ich mich noch in den Webserver ein. Mal schauen, was man da noch mitloggen kann.

    Einen Stützkondensator habe ich auch schon verbaut. Ändert nichts.

    Ich habe nicht mal die Motoren angeschlossen. Der Crasht einfach so aus dem nichts. Pingbar bleibt der aber.

  • schwarz ;) ... zwischen 5V und Masse.
    Größe kann ich gerade nur raten. Aber eher ein kleinerer.
    Wobei ich eh nicht glaube, dass der etwas bringt.
    Der Chip leistet ja jetzt nichts und hat eine eigene, stabile Stromversorgung. Das muss doch auch so laufen.
    Alle anderen im Haus rennen seit dem Tag, an dem ich sie eingeschaltet habe.

  • Der ESP8266 ist schon bisschen picky, was die Spannungsversorgung angeht :)
    100nF Keramik direkt über die Versorgungsspannung am IC kann lohnenswert sein. Und zusätzlich 470uF Elektrolyt zum Puffern über der Versorgung sind auch nicht verkehrt.

    Wenn es nur Sekunden läuft, könnte es tatsächlich an der Hardware liegen... Denn die Kapazitäten sind ja eher für Stabilität in Sachen Resets zu verhindern.

    Magst Du den Code mal online stellen oder mir zukommen lassen? Dann probiere ich es mal auf nem Wemos D1 mini Clone oder einer nodeMCU aus.


    Das einzige, dass einen Unterschied macht, ist der delay im loop.

    Hast Du die Loops schon auf non-blocking umgebaut und yield() es öfters an wichtigen Passagen?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!