Posts by berryfox

    Hallo zusammen,


    ich betreibe einen Raspberry und einen Arduino am I2C-Bus damit die beiden kommunizieren können. Ich benötige den Raspberry auf jeden Fall als Slave und den Arduino als Master. Wie ich im Arduino Daten über den Bus schreibe, weiß ich:


    Aber was genau muss ich im Raspberry implementieren? Klar, ich horche in einer Schleife auf der Adresse 0x25 und warte bis Daten kommen. Anschließend kann ich entsprechende Daten wieder zurück schicken. Aber was genau muss ich implementieren? Bisher habe ich leider nur das:

    Code
    def readMsg():
    data = com.read_i2c_block_data(0x25, 0, 7)
    return data
    while True:
        data = readMsg()
    print(data)
        time.sleep(2)
       

    Kann vielleicht jemand weiter helfen?



    Viele Grüße,

    Berryfox

    Hallo zusammen,


    ich würde gerne einen Buzzer (also "Pieper") an den Raspberry anschließen, damit ich verschieden kurze / lange (vielleicht sogar hohe / tiefe) Pieptöne ausgeben kann. Wie ich herausgefunden habe, gibt es aktive und passive Bauteile, ich habe mir im bekannten Online-Shop einen herausgesucht, der direkt festgeschraubt werden kann und auch schon Drähte zum Anschluss hat (Link (Affiliate-Link)).

    Aber ich weiß noch nicht, ob ich diesen einfach zwischen einen GPIO und Masse setzen kann oder einen Widerstand benötige!? Mein Plan bisher ist, diesen Ausgang z.B. einfach für eine halbe Sekunde oder kürzer auf HIGH-Level zusetzen und Töne zu erzeugen.

    Kann jemand weiterhelfen? :S


    Mfg

    berryfox

    Im Moment experimentiere ich mit der #include <TimeLib.h> und #include <time.h> und kann die Zeit der "Software-Uhr" stellen und erstelle auch eine Zeit zu der z.B. eine Steckdose eingeschaltet werden soll (ausschalten zur Vereinfachung weggelassen).



    Oben sieht man einen Auszug aus der setup(), in der loop() habe ich dann verschiedene Abfragen versucht, um den Ausgang zu schalten. Weder if (difftime(now(), start) > 0)noch if (now() > start) funktioniert. Was mache ich falsch? Habe ich einen Denkfehler oder mache ich grundsätzlich etwas falsch?

    dbv Genau, die Zeit läuft in der RTC weiter, aber trotzdem muss ich die Zeit doch mindestens 1 Mal initial setzen oder? Die RTC kann doch die Uhrzeit nicht alleine ermitteln, sondern nur laufen lassen?


    Gnom Ja so etwas war meine erste Idee. Bin jetzt ein wenig hin und her gerissen, finde die RTC aber auch nicht mehr so schlecht.

    ...Da läuft nichts weiter, da fängt nichts an, da hört nichts auf. ...

    OK Danke! Dann ist also meine Lösung: Eine RTC kaufen, diese per I2C anschließen und die Zeit vom Raspi an den Arduino und weiter an die RTC zu übermitteln, richtig? Die RTC merkt sich die Zeit und sie läuft eigenständig weiter. Da sie die aktuelle Zeit aber nicht ermitteln kann, muss ich sie aber (zuminddest einmal) an die RTC übermitteln!? Anschließend kann ich im Arduino an der RTC fragen, "wie spät", "welcher Wochentag", etc. Passt das so?

    Es wird nichts übertragen. Es wird von der RTC abgefragt - wenn du die Zeit brauchst, fragt dein Programm die RTC wie spät es ist

    Ich glaube entweder reden wir aneinander vorbei oder ich bin zu doof :shy::conf:

    Wenn ich in gewissen Abständen die Zeit vom Raspi an den Arduino schicke (z.B. alle 10 Minuten), läuft die Uhr dann im Arduino OHNE RTC innerhalb der 10 Minuten weiter? Oder ist die Uhrzeit direkt wieder weg? Oder brauche ich für mein Vorhaben ZWINGEND eine RTC?

    ...Aber die RTC ist ja dazu da 'die Zeit weiterlaufen zu lassen' selbst wenn es einen Stromausfall gab. Wenn du deinen Code jetzt dazu bringst beim Setup die RTC auszulesen sollte es passen, selbst wenn der Arduino mal keinen Saft mehr hatte.

    Aber heißt das auch, dass wenn ich die Uhrzeit einmal übertragen habe, sie auf dem Arduino bis zum Sromausfall weiter läuft? Dann bräuchte ich für meinen ersten Test keine RTC. Dass die Uhrzeit dann bei einem Stromausfall weg ist, ist klar.

    Eine RTC hat auf der Platine in der Regel einen Batteriehalter und darin z.B. eine CR2032 Knopfzelle sitzen - die reicht um die Zeit Jahrelang zu halten...

    Ja stimmt, die Modelle die ich gesehen habe, haben die direkt mit an Bord. Dann würde ich also eine RTC kaufen müssen und würde die Zeit trotzdem ab und an vom Raspi setzen. Ich hatte gedacht der Arduino kann sich die Zeit bei einem Stromausfall nicht merken, kann diese aber weiterlaufen lassen, sobald sie einmal gesetzt wurde.

    Ja, das könnte ich tun, möchte die eigentliche Steuerung aber komplett auf dem Arduino realisieren, da dieser dann auch ohne Raspi laufen könnte, wenn der Raspi sich mal aufhängt etc. Denke mal, der Arduino läuft theoretisch stabiler als der Raspi.

    Klar, dan würde die Zeit nicht mehr gesetzt, aber einmal gesetzte Zeit wird im Arduino ja wohl weiter laufen solange der Strom nicht ausfällt? :mad_GREEN:

    Ja stimmt, also statt z.B. ein mal "1520353094" einfach mehrmals z.B. "2018", "3" und "6". Wobei "2018" dann ja auch nicht geht, weil der Maximalwert "255" ist?! Aber da reicht es ja wenn ich "18" übertrage. Muss ich nur mal schauen, wie ich das nacheinander übertrage. Bisher übertrage ich testweise einfach nur eine "4".

    Python
    def writeMsg(value):
    com.write_byte(address, value)
    return -1
    while True:
    # Zustände abfragen
    writeMsg(4)

    Vom Arduino sende ich schon eine Struktur, das müsste ich dann nur auch in Python realisieren:

    C
    byte data[4];
    data[0] = 1;
    data[1] = 2;
    data[2] = 3;
    data[3] = 4;
    Wire.write(data, sizeof(data));

    Der Arduino braucht die Uhrzeit, weil z.B. eine Steckdose nach einer Uhrzeit ein- und ausgeschaltet werden soll. Außerdem benötige ich die die Info, ob HEUTE ein Samstag, Sonntag oder Feiertag ist. Auch dafür benötige ich die aktuelle Zeit (Anhand des Tages wird die Steckdose z.B. zu anderen Zeiten geschaltet).

    Hallo,


    ich betreibe einen Raspberry und einen Arduino und benötige im Arduino das Datum und die Uhrzeit. Da ich aus verschiedenen Gründen keine weitere Hardware verwenden möchte, möchte ich das Datum und die Uhrzeit vom Raspberry (der hat sie vom Timeserver) auf den Arduino übertragen. Ich habe beide Geräte bereits per I2C verbunden um Daten vom Arduino an den Raspberry zu senden.

    Mein Plan war erst, den Unix-Timestamp (in Sekunden) in gewissem Abstand an den Arduino zu senden und diesen in C dann in ein Datum / Uhrzeit umzurechnen. Dies geht aber nicht, da per I2C anscheinend keine so großen Zahlen übertragen werden können.

    Wie habt Ihr das gelöst? Gibt es (andere) elegante Möglichkeiten, die Uhrzeit und das Datum auf den Arduino zu bringen, ohne weitere Hardware einzusetzen? Wichtig ist mir eine genaue Zeit mit Schaltjahren sowie Sommer- und Winterumstellung. Außerdem muss die Uhrzeit nach einem Stromausfall wieder automatisch auf den Arduino übertragen werden.


    Viele Grüße,

    berryfox

    meigrafd ...oder das Script permanent laufen zu lassen.


    Ich denke, genau das werde ich nun tun. Irgendwo habe ich mal gesehen, dass eine (so kurze) while True: Schleife mit nur einem if(): am Ende noch ein time.sleep(0.2) enthält, damit der Rechner "Zeit für andere Sachen hat". Meine Anwendung mit der Zeitschaltuhr ist ja absolut nicht zeitkritisch. Macht es daher Sinn, so eine Pause mit einzubauen? Es könnten für diesen Fall ja auch 1 Sekunde oder auch 30 Sekunden sein.

    Ich habe eine Frage zum Modul gpiozero: Um eine Zeitschaltuhr zu realisieren, möchte ich über cron alle 15 Minuten ein Python3-Script aufrufen, welches die aktuelle Zeit mit fest definierten Start- und End-Zeiten vergleicht. Je nach Ergebnis des Vergleichs soll ein Ausgang (Testweise erst einmal eine LED) ein- bzw. ausgeschaltet werden.

    Das Problem ist, dass die LED zwar eingeschaltet wird, am Ende des Scripts aber wieder erlischt, da das Script die Ausgänge wieder reseted. In der Doku bin ich leider nicht fündig geworden. Wie kann ich Ausgänge schalten, die auch nach dem Skript weiter laufen? Ein z.B. sleep(10 Stunden) finde ich unschön, da das Script dann ja ewig lange läuft.

    Weiß jemand, wie es funktioniert? Oder ist mein Ansatz gänzlich falsch?

    Python
    ausgang = LED(8)
    if(start < now) and (now < end):
    ausgang.on()
    else:
    ausgang.off()

    Tell Der Analog-Digital-Wandler sollte nicht zum Bewegungsmelder, sondern zum Dämmerungsschalter

    Tell Es gibt einen Internetzugang, aber der ist vielleicht nicht immer aktiv (könnte man aber vernachlässigen)

    Tell Mit den Zwischenwerten soll es z.B. möglich sein, das Licht im Treppenhaus automatisch einzuschalten, während es draußen noch so hell ist, dass das Licht vor der Tür noch aus bleiben kann.

    Hallo zusammen,


    ich möchte mit einem Raspberry Pi 3 eine ambitionierte Haus-Automatisierung erstellen. Als Elektriker und Software-Entwickler bringe ich da sicherlich schon einige Grundkenntnisse mit. Aus einer alten, bestehenden Haus-Automatisierung sind alle benötigten Leitungen für Eingänge und Relais für Ausgänge vorhanden. Es sollen KEINE Funksteckdosen etc. geschaltet werden. Folgendes soll realisiert werden:

    • Verarbeitung von ca. 20 Eingängen
    • Verarbeitung von ca 20. Ausgängen
    • Licht per Taster ein- und ausschalten (wenn nicht ausgeschaltet wird, nach einer bestimmten Zeit automatisch aus)
    • Licht per Bewegungsmelder schalten (automatisch nach einer bestimmten Zeit ausschalten)
    • Dämmerungsschalter per Fotowiederstand, damit es nicht nur hell / dunkel sondern auch Zwischenwerte gibt (Analog-Digital-Wandler?)
    • Licht rein nach der Uhrzeit schalten
    • Uhrzeit über Funkuhr (DCF77 Empfänger?)

    Folgendes habe ich mir bisher gedacht:

    • Programm in Python3
    • Weboberfläche zum Anzeigen der Zustände und schalten einiger Ausgänge in HTML / PHP

    Was ist umsetzbar? Was wird schwierig? Worauf ist zu achten? Gibt es Tipps? Das ganze wird zuerst einmal auf einem Breadboard aufgebaut, bevor es an die "echte" Anlage geht.


    Mfg berryfox

    Danke für die vielen Hilfreichen antworten. Die gehässigen kann ich sehr gut ausblenden!


    Gnom Mit FHEM habe ich mich noch nicht sehr viel beschäftigt, das werde ich nun aber mal tun. Da ich alles über Relais schalten möchte, werde ich keine Funksteckdosen etc. nutzen wollen (Ich glaube, in FHEM geht es genau darum?).


    noisefloor Ja, bisher RPi.GPIO, ich werden mir aber mal gpiozero anschauen. OK, dann liege ich mit meinen Überlegungen ja schon einmal richtig.


    Guido64 Das mit den Dateien scheint mir programmiertechnisch leider nicht so schön zu sein.


    Ja, das hier ist mein erstes Projekt und daher teste ich erst einmal alle Möglichkeiten auf dem Breadboard um festzustellen, ob ich das überhaupt leisten kann und ob ich mit der Thematik zurecht komme. Das es sehr ambitioniert ist, ist mir klar.