Das war beeindruckend unhilfreich!
Eine Frage mit Gegenfrage beantworten.
Das war beeindruckend unhilfreich!
Eine Frage mit Gegenfrage beantworten.
Okay cool nur wie kann ich jetzt aus meinem Programm mit Python dem cmdline.py sagen welche Einstellungen ich verwende?
Bitte für Anfänger beschreiben.
Danke
Ich habe nicht so viel Ahnung von Python um den entsprechenden Code zu finden, da auch noch importe statt finden bin ich mit meinem wissen raus.
Hier ist das Beispiel von dem ich sprach.
Hallo Zusammen,
ich habe mir die luma.core auf dem Raspberry PI installiert und arbeite mit der Grafischen Oberfläche.
Jetzt habe ich folgendes Problem:
die Examples lassen sich nur mit der Konsole über die entsprechenden Parameter Starten. da ich keine Ahnung habe wie ich die Parameter in den Code einbauen kann.
Als Beispiel übergebe in der Konsole diese Parameter python welcome.py -d sh1106 --i2c-address 0x3d
Doch wenn ich Python 3.5 IDLE starte und die welcome.py offen habe sehe ich keien Changse diese werte irgend wo ein zu tragen...
Kannst könnt du / ihr mir hellfen?
Hallo File Change Event macht für mich auch Sin bzw. kling das Logisch. Den Sekundentakt gibt die Anzeige mit Uhrzeit und Sekunden vor. Ich wollte nur nicht die Sekunden erst wieder in das Display schreiben, wenn sich alle Sensoren zurückgemeldet haben. Ich bin den link von schnasseldag gefolgt. … Ja super -> Ich keine Ahnung von Python <- also wäre eine Einbindung in den Code schon erforderlich. Ach ja ich Habe ja auch den 16x12 Bit Servo Trebier dran der später auch noch ins Spiel kommt, wenn die Temps. Im Programm sind.
Die 4 Pin PC PWM Lüfter (NF-P14S redux-1200 PWM) die zwar mit 24,5 kHz vom Mainboard getaktet werden, laufen aber auch mit dem Adafruit Servo Shild Board über 1 kHz PWM genauso gut bzw. besser 😊! Steuerbar von 140 U/min bis max.
Bei max. hat der Lüfter 1308 U/min das entspricht 43,6 Hz (Hallsensor doppelte Taktung).
Nur mal zur INFO könnt auch andere Bastler interessieren.
Ich hänge noch mal den aktuellen Code ran.
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import subprocess, time, sys, syslog
import _thread
import lcddriver
import board
import busio
import adafruit_si7021
from datetime import datetime
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(21,GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(23,GPIO.OUT)
lcd = lcddriver.lcd()
lcd.lcd_clear
# 1-Wire Slave-Liste lesen
Dateipfad = open('/sys/devices/w1_bus_master1/w1_master_slaves')
w1_slaves = Dateipfad.readlines()
Dateipfad.close()
exitFlag = 0
def einkabelsensor( threadName):
# Fuer jeden 1-Wire Slave aktuelle Temperatur ausgeben
for line in w1_slaves:
# 1-wire Slave extrahieren
w1_slave = line.split("\n")[0]
# 1-wire Slave Datei lesen
Dateipfad = open('/sys/bus/w1/devices/' + str(w1_slave) + '/w1_slave')
filecontent = Dateipfad.read()
Dateipfad.close()
# Temperaturwerte auslesen und konvertieren
stringvalue = filecontent.split("\n")[1].split(" ")[9]
temperature = float(stringvalue[2:]) / 1000
# Temperatur ausgeben
print(str(w1_slave) + ': %6.2f °C' % temperature)
# Zeitdauer des Tastendrucks
duration = 0
# Interrupt-Routine fuer die Taste
def buttonISR(pin):
global duration
if (GPIO.input(pin)):
# Taste gedrueckt
if duration == 0:
duration = time.time()
else:
# Taste losgelassen
if duration > 0:
elapsed = (time.time() - duration)
duration = 0
if elapsed >= 0.05:
GPIO.output(23,0)
sys.exit(0)
# Interrupt fuer die Taste einschalten
GPIO.add_event_detect(21, GPIO.BOTH, callback=buttonISR)
# Create library object using our Bus I2C port
i2c = busio.I2C(board.SCL, board.SDA)
sensor = adafruit_si7021.SI7021(i2c)
while True:
starttime=time.time()
try:
dateString = datetime.now().strftime('%d.%m.%y')
timeString = datetime.now().strftime('%H:%M:%S')
lcd.lcd_display_string("Hallo",1)
lcd.lcd_display_string(dateString,2)
lcd.lcd_display_string(timeString +" Test",3)
GPIO.output(23,not (GPIO.input(23)))
_thread.start_new_thread( einkabelsensor, ("Thread-1", ) )
lcd.lcd_display_string("T: %0.1f C " % sensor.temperature + "H: %0.1f %%" % sensor.relative_humidity,4)
time.sleep(1.0 - ((time.time() - starttime) % 1.0))
except KeyboardInterrupt:
GPIO.output(23,0)
sys.exit(0)
Display More
Gruß Robert Danke
Hallo,
Richtig. Nur hier ist es nach meinem Verständnis so, dass die Daten jedes 1-Wire Sensors aus einer eigenen Datei gelesen werden, womit sich die Sensoren parallel abfragen lassen. Oder sehe ich da was falsch?
Gruß, noisefloor
Das siehst du korrekt
Hey danke für die Erklärungen also ist das Datei öffnen = dem Aufruf die 1 Wire Fühler auszulesen. OKAY wenn das so sein soll bitte
okay das ich nicht die _thread Funktion nehmen soll okay aber kann mir jemand für mein Programm das richtige anpassen? habe echt schon viel probiert auch mit Class aber bitte ich weiß nicht was ich da mache. Das heißt klappt es von Anfang an nicht habe ich keine Changs es gerade zu bügeln. Die Schönen Beispiele bringen mir nix da ich den Code nicht auf mein Programm ummünzen kann. Dafür fehlt mir einfach noch etwas Verständnis.
Gruß Robert
RobertHQ = Anfänger ... ich bin froh das ich das _thread eingebunden bekommen habe. die derzeitige Version kann ich gerne noch mal hoch laden.
Aber als Elektroniker verstehe ich eure Frage Warum überhaupt threading ... ja weil ich NICHT nur I²C Sensoren verwende sonder 1Wire (DS18B20) die gefühlt sich erst nach 5 Sekunden zurück melden.
Mein Plan ist diese bei Programmstart auszulesen und mit den werten anfangen zu rechnen und im späteren verlauf bei Änderungen darauf entsprechend zu reagieren.
Derzeit bekomme ich die Werte von den "Einkabelsensor" nicht einzeln aus der schleife auf mein Display
Der Print Befehl im _thread aufruf funktioniert nur halt leider auf der Shell.
Weiß wer ob ich die Sensoren "Direkt" ohne über Datei öffnen schließen öffnen schließen ... gehen muss?
Danke Gruß Robert
Display MoreHallo,
Da muss ich auch immer noch ein bisschen rumprobieren. Bzw. asyncio ist kooperatives Multitasking für Python. Damit man das nutzen kann, müssen sich a) externe Module auch kooperativ verhalten und b) muss man (als Programmierender) verstanden, wie Coroutines unter Python funktionieren, also vom Prinzip her. Das ist für Einsteiger vielleicht ein bisschen viel.
Von daher würde ich an deiner Stelle erstmal mit Threads und Queues zur Kommunikation anfangen.
Gruß, noisefloor
OK gesagt getan habe jetzt das Projekt mit import _thread erweitert.
aber wie bekomme ich jetzt für jeden "einkabelsensor" den er aus den Datein ausließt die Werte auf die Anzige? da die Anzeige in einer while True Schleife gefüttert wird und die Senoren über _thread.start_new_thread( einkabelsensor, ("Thread-1"), ) ) aufgerufen werden.
im Sensor Thread steht nur ein Print für x Sensoren ich verwende auch mehrere.
Hallo noisefloor,
Danke für deine Tips File Variable ist abgeändert derzeit verwende ich die Python 3.5.3.
Wie bereits geschrieben ich habe mit Python keine erfahrung für die implementierung feines asyncio Aufrufes bräuchte ich noch mal starthilfe.
Danke Gruß Robert
Hallo zusammen,
zu erst ein mal ich Habe noch nie mit Python programmiert aber mit Visual Basic 6.
ich versuche gerade mein Raspb. welches mit Raspbian Stretch with desktop läuft. Alles zusammen zu bekommen.
Derzeit läuft jeder Sensor / Aktor für sich. in sogenannte Beispieldateien.
Ich habe es geschafft, dass die Zeit sekündlich auf dem Display erscheint und nun sollen aber auch die anderen Temperaturfühler angezeigt werden.
Und zwar dann, wenn sie ausgelesen sind das dauert bei den 1 Draht mitunter länger als eine Sekunde.
Bei den i2c bekomme ich denn Quellcode nicht zusammengesetzt (Imports)
Weil es noch nicht kompliziert genug ist soll das Programm auch noch automatisch starten, was es auch schon macht ABER irgendwie macht er für die i2c Beispiele bei den Importen was falsch da liegen die Dateien nicht im Home Verzeichnes was (ich denke) ihn aus dem Takt bringt.
Derzeit ist der Autostart über eine launcher.sh welche im crontab eingetragen worden ist.
Irgend wann möchte ich das auch noch Grafisch darstellen. Thema (from tkinter
import *)
Das ist leider eine Menge Holz
Danke für eure Tips