nun versuche ich schon seit Tagen...
Die GUI funktioniert.
Das Programm soll u.a. 8 Relais automatisch ein & aus schalten. (je nachdem, wie voll die Solarbatterie ist..)
Klicke ich auf das Fenster "Home-Modus" => ab def home_modus(self, event): , wird die Spannung an der Batterie gemessen.
Bis jetzt werden erstmal nur 2 Relais zum Test darüber dann automatisch geschaltet.
Und irgendwie habe ich es auch geschafft, dass die Spannung dann innerhalb der GUI angezeigt wird.
Jedoch wird das Textfenster => self.text_ctrl_4 = wx.TextCtrl(self, wx.ID_ANY, str(voltage1), pos = ( 717, 252), size = ( 235, 245 )) erst im Hauptprogramm angezeigt.
Aber wie bekomme ich so eine Endlosschleife hin?
(die Spannung, u.s.w. soll ständig abgefragt werden und nicht nur bei einem Klick auf das Fenster)
Oder, wie kann ich aus einem Unterprogramm die Spannung, direkt anzeigen lassen?
Also, innerhalb "def home_modus(self, event):" oder "def f(event):"
"def f(event):" läuft als MultiProcess parallel zum Hauptprogramm. Dieses erzeugt bisher nur ein Frame. Aber leider keine Ausgabe der Spannung, an der richtigen Position.
Ein Extra Frame wäre aber keine gute Lösung. Am liebsten innerhalb der GUI. So wie es schon funktioniert, nur irgendwie in einer Endlosschleife. So, dass ständig die aktuelle Spannung zu sehen ist.
Das ganze sollte eigentlich ein Weihnachtsgeschenk werden.
Aber da ich erst seit 2 Wochen erstmalig programmiere, brauche ich mehr Zeit oder einen Tip...
Und hier der ganze Code (darunter ein Foto der GUI):
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#
# generated by wxGlade 0.9.4 on Mon Dec 16 14:13:04 2019
#
import wx
import RPi.GPIO as GPIO
import time
import Adafruit_ADS1x15
import os
from multiprocessing import Process
adc = Adafruit_ADS1x15.ADS1115()
# Start continuous ADC conversions on channel 0
adc.start_adc(3, gain=1)
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
# GPIO 23 & 22 set up as inputs, pulled up to avoid false detection.
# Both ports are wired to connect to GND on button press.
# So we'll be setting up falling edge detection for both
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# GPIO 24 set up as an input, pulled down, connected to 3V3 on button press
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(12, GPIO.OUT) #Relai 1
GPIO.setup(16, GPIO.OUT) #Relai 2
GPIO.setup(13, GPIO.OUT) #Relai 3
GPIO.setup(27, GPIO.OUT) #Relai 4
GPIO.setup(25, GPIO.OUT) #Relai 5
GPIO.setup(19, GPIO.OUT) #Relai 6
GPIO.setup(20, GPIO.OUT) #Relai 7
GPIO.setup(6, GPIO.OUT) #Relai 8
GPIO.setup(26, GPIO.OUT) #LED
GPIO.setup(21, GPIO.OUT) #Pieper
GPIO_PIR = 5
print ("PIR-Modul gestartet (CTRL-C to exit)")
print ("")
print ("")
# Set pin as input
GPIO.setup(GPIO_PIR,GPIO.IN)
# Initialisierung
Read = 0
State = 0
Counter = 0
n = 0
m = 0
def f(event):
global voltage1
count = 0
app = wx.App()
# Fenster
# self.text_ctrl_4 = wx.TextCtrl(self, wx.ID_ANY, str(voltage1), pos = ( 717, 252), size = ( 235, 245 ))
frame = wx.Frame(parent=None, title="chuck a luck", size=(235, 245))
frame.SetBackgroundColour("white")
frame.Show()
app.MainLoop()
while (count < 333333):
count = count + 1
print (count)
# begin wxGlade: dependencies
# end wxGlade
# begin wxGlade: extracode
# end wxGlade
class _629771570__276881481__937043555__734407672__521534468__912868207__331308564_MyDialog(wx.Dialog):
def __init__(self, *args, **kwds):
# begin wxGlade: _629771570__276881481__937043555__734407672__521534468__912868207__331308564_MyDialog.__init__
kwds["style"] = kwds.get("style", 0) | wx.CAPTION
wx.Dialog.__init__(self, *args, **kwds)
self.SetSize((1917, 1041))
self.button_1 = wx.Button(self, wx.ID_ANY, "\"I AM AT\n HOME\"\n\n MODE")
self.button_2 = wx.Button(self, wx.ID_ANY, "All Cams\n \"OFF\"\n\n MODE")
self.button_3 = wx.Button(self, wx.ID_ANY, "All Cams\n \"ON\"\n\n MODE")
self.button_4 = wx.Button(self, wx.ID_ANY, "\"I GO\nAWAY\"\n\nMODE")
self.button_13 = wx.ToggleButton(self, wx.ID_ANY, " Shut -\n Down\n \n\"OFF\"")
self.button_14 = wx.ToggleButton(self, wx.ID_ANY, " PIR - 1\n\n \"Deck\"")
self.button_15 = wx.ToggleButton(self, wx.ID_ANY, "PIR - 2\n\n \"See\"")
self.button_16 = wx.ToggleButton(self, wx.ID_ANY, "PIR - 3\n\n\"Steg\"")
self.button_3_1 = wx.ToggleButton(self, wx.ID_ANY, "CAM\n - 1 -\n\n\"Deck\"")
self.button_3_2 = wx.ToggleButton(self, wx.ID_ANY, "CAM\n - 2 -\n\n\"See\"")
self.button_7 = wx.ToggleButton(self, wx.ID_ANY, "CAM\n - 3 -\n\n\"Steg\"")
self.button_8 = wx.ToggleButton(self, wx.ID_ANY, "Schalter\n - 4 -\n\n Telefon")
self.button_9 = wx.ToggleButton(self, wx.ID_ANY, "Schalter\n - 5 -\n\n Licht")
self.button_10 = wx.ToggleButton(self, wx.ID_ANY, "Schalter\n - 6 -\n\nHeizung")
self.button_11 = wx.ToggleButton(self, wx.ID_ANY, " Schalter\n - 7 -\n\n All 12V")
self.button_12 = wx.ToggleButton(self, wx.ID_ANY, " Schalter\n - 8 -\n\nLAN/LTE")
self.__set_properties()
self.__do_layout()
self.Bind(wx.EVT_BUTTON, self.home_modus, self.button_1)
self.Bind(wx.EVT_BUTTON, self.no_cam_modus, self.button_2)
self.Bind(wx.EVT_BUTTON, self.cam_modus, self.button_3)
self.Bind(wx.EVT_BUTTON, self.go_away_modus, self.button_4)
self.Bind(wx.EVT_TOGGLEBUTTON, self.off_modus, self.button_13)
self.Bind(wx.EVT_TOGGLEBUTTON, self.pir1_modus, self.button_14)
self.Bind(wx.EVT_TOGGLEBUTTON, self.pir2_modus, self.button_15)
self.Bind(wx.EVT_TOGGLEBUTTON, self.pir3_modus, self.button_16)
self.Bind(wx.EVT_TOGGLEBUTTON, self.schalter_01, self.button_3_1)
self.Bind(wx.EVT_TOGGLEBUTTON, self.schalter_02, self.button_3_2)
self.Bind(wx.EVT_TOGGLEBUTTON, self.schalter_03, self.button_7)
self.Bind(wx.EVT_TOGGLEBUTTON, self.schalter_04, self.button_8)
self.Bind(wx.EVT_TOGGLEBUTTON, self.schalter_05, self.button_9)
self.Bind(wx.EVT_TOGGLEBUTTON, self.schalter_06, self.button_10)
self.Bind(wx.EVT_TOGGLEBUTTON, self.schalter_07, self.button_11)
self.Bind(wx.EVT_TOGGLEBUTTON, self.schalter_08, self.button_12)
# end wxGlade
def __set_properties(self):
# begin wxGlade: _629771570__276881481__937043555__734407672__521534468__912868207__331308564_MyDialog.__set_properties
self.SetTitle("Bord-Computer")
self.SetSize((1917, 1041))
self.SetBackgroundColour(wx.Colour(47, 47, 47))
self.SetFont(wx.Font(36, wx.FONTFAMILY_ROMAN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, 0, "Serif"))
self.button_1.SetMinSize((235, 245))
self.button_1.SetToolTip(u"In diesem Modus schalten sich automatisch die Kameras nur über die Nacht ein.\nNach 24h (ohne weitere Klicks hier) schaltet jeder Modus in den \"NOT AT HOME\" Mode um.")
self.button_2.SetMinSize((235, 245))
self.button_3.SetMinSize((235, 245))
self.button_4.SetMinSize((235, 245))
self.button_13.SetMinSize((235, 245))
self.button_14.SetMinSize((235, 245))
self.button_15.SetMinSize((235, 245))
self.button_16.SetMinSize((235, 245))
self.button_3_1.SetMinSize((235, 245))
self.button_3_2.SetMinSize((235, 245))
self.button_7.SetMinSize((235, 245))
self.button_8.SetMinSize((235, 245))
self.button_9.SetMinSize((235, 245))
self.button_10.SetMinSize((235, 245))
self.button_11.SetMinSize((235, 245))
self.button_12.SetMinSize((235, 245))
# end wxGlade
def __do_layout(self):
# begin wxGlade: _629771570__276881481__937043555__734407672__521534468__912868207__331308564_MyDialog.__do_layout
grid_sizer_1 = wx.GridSizer(4, 8, 0, 0)
grid_sizer_1.Add(self.button_1, 0, 0, 0)
grid_sizer_1.Add(self.button_2, 0, 0, 0)
grid_sizer_1.Add(self.button_3, 0, 0, 0)
grid_sizer_1.Add(self.button_4, 0, 0, 0)
grid_sizer_1.Add((0, 0), 0, 0, 0)
grid_sizer_1.Add((0, 0), 0, 0, 0)
grid_sizer_1.Add((0, 0), 0, 0, 0)
grid_sizer_1.Add(self.button_13, 0, 0, 0)
grid_sizer_1.Add(self.button_14, 0, 0, 0)
grid_sizer_1.Add(self.button_15, 0, 0, 0)
grid_sizer_1.Add(self.button_16, 0, 0, 0)
grid_sizer_1.Add((0, 0), 0, 0, 0)
grid_sizer_1.Add((0, 0), 0, 0, 0)
grid_sizer_1.Add((0, 0), 0, 0, 0)
grid_sizer_1.Add((0, 0), 0, 0, 0)
grid_sizer_1.Add((0, 0), 0, 0, 0)
bitmap_1 = wx.StaticBitmap(self, wx.ID_ANY, wx.Bitmap("/home/pi/Pictures/man-sea-water-cut-2.jpg", wx.BITMAP_TYPE_ANY))
bitmap_1.SetMinSize((1907, 245))
grid_sizer_1.Add(bitmap_1, 0, 0, 0)
grid_sizer_1.Add((0, 0), 0, 0, 0)
grid_sizer_1.Add((0, 0), 0, 0, 0)
grid_sizer_1.Add((0, 0), 0, 0, 0)
grid_sizer_1.Add((0, 0), 0, 0, 0)
grid_sizer_1.Add((0, 0), 0, 0, 0)
grid_sizer_1.Add((0, 0), 0, 0, 0)
grid_sizer_1.Add((0, 0), 0, 0, 0)
grid_sizer_1.Add(self.button_3_1, 0, 0, 0)
grid_sizer_1.Add(self.button_3_2, 0, 0, 0)
grid_sizer_1.Add(self.button_7, 0, 0, 0)
grid_sizer_1.Add(self.button_8, 0, 0, 0)
grid_sizer_1.Add(self.button_9, 0, 0, 0)
grid_sizer_1.Add(self.button_10, 0, 0, 0)
grid_sizer_1.Add(self.button_11, 0, 0, 0)
grid_sizer_1.Add(self.button_12, 0, 0, 0)
self.SetSizer(grid_sizer_1)
self.Layout()
self.Centre()
# end wxGlade
def home_modus(self, event): # wxGlade: _629771570__276881481__937043555__734407672__521534468__912868207__331308564_MyDialog.<event_handler>
print("Event handler 'home_modus' not implemented!")
global voltage, value
# Read the last ADC conversion value and print it out.
value = adc.get_last_result()
voltage = ('%.1f'% (float(value)*50/32768.0)) #Originalwert:48 und nicht 50, but try..
if State == 0 and 25 < float(voltage) < 26:
print ("25 bis 26 Volt => ",voltage," V", end='\r')
GPIO.output(25, GPIO.HIGH)
GPIO.output(27, GPIO.LOW)
elif State == 0 and float(voltage) < 25:
print ("weniger als 25V => ",voltage," V", end='\r')
GPIO.output(27, GPIO.HIGH)
GPIO.output(25, GPIO.HIGH)
elif State == 0 and float(voltage) > 26:
print ("mehr als 26V => ",voltage," V", end='\r')
GPIO.output(27, GPIO.LOW)
GPIO.output(25, GPIO.LOW)
voltage1 = str(voltage) + " Volt"
self.text_ctrl_4 = wx.TextCtrl(self, wx.ID_ANY, str(voltage1), pos = ( 717, 252), size = ( 235, 245 ))
# self.text_ctrl_4.ShowModal()
# self.dialog.ShowModal()
event.Skip()
def no_cam_modus(self, event): # wxGlade: _629771570__276881481__937043555__734407672__521534468__912868207__331308564_MyDialog.<event_handler>
print("Event handler 'no_cam_modus' not implemented!3")
event.Skip()
def cam_modus(self, event): # wxGlade: _629771570__276881481__937043555__734407672__521534468__912868207__331308564_MyDialog.<event_handler>
print("Event handler 'cam_modus' not implemented!")
event.Skip()
def go_away_modus(self, event): # wxGlade: _629771570__276881481__937043555__734407672__521534468__912868207__331308564_MyDialog.<event_handler>
print("Event handler 'go_away_modus' not implemented!")
event.Skip()
def off_modus(self, event): # wxGlade: _629771570__276881481__937043555__734407672__521534468__912868207__331308564_MyDialog.<event_handler>
print("Event handler 'off_modus' not implemented!")
event.Skip()
def pir1_modus(self, event): # wxGlade: _629771570__276881481__937043555__734407672__521534468__912868207__331308564_MyDialog.<event_handler>
print("Event handler 'pir1_modus' not implemented!")
event.Skip()
def pir2_modus(self, event): # wxGlade: _629771570__276881481__937043555__734407672__521534468__912868207__331308564_MyDialog.<event_handler>
print("Event handler 'pir2_modus' not implemented!")
event.Skip()
def pir3_modus(self, event): # wxGlade: _629771570__276881481__937043555__734407672__521534468__912868207__331308564_MyDialog.<event_handler>
print("Event handler 'pir3_modus' not implemented!")
event.Skip()
def schalter_01(self, event): # wxGlade: _629771570__276881481__937043555__734407672__521534468__912868207__331308564_MyDialog.<event_handler>
print("Event handler 'schalter_01' not implemented!")
event.Skip()
def schalter_02(self, event): # wxGlade: _629771570__276881481__937043555__734407672__521534468__912868207__331308564_MyDialog.<event_handler>
print("Event handler 'schalter_02' not implemented!")
event.Skip()
def schalter_03(self, event): # wxGlade: _629771570__276881481__937043555__734407672__521534468__912868207__331308564_MyDialog.<event_handler>
print("Event handler 'schalter_03' not implemented!")
event.Skip()
def schalter_04(self, event): # wxGlade: _629771570__276881481__937043555__734407672__521534468__912868207__331308564_MyDialog.<event_handler>
print("Event handler 'schalter_04' not implemented!")
event.Skip()
def schalter_05(self, event): # wxGlade: _629771570__276881481__937043555__734407672__521534468__912868207__331308564_MyDialog.<event_handler>
print("Event handler 'schalter_05' not implemented!")
event.Skip()
def schalter_06(self, event): # wxGlade: _629771570__276881481__937043555__734407672__521534468__912868207__331308564_MyDialog.<event_handler>
print("Event handler 'schalter_06' not implemented!")
event.Skip()
def schalter_07(self, event): # wxGlade: _629771570__276881481__937043555__734407672__521534468__912868207__331308564_MyDialog.<event_handler>
print("Event handler 'schalter_07' not implemented!")
event.Skip()
def schalter_08(self, event): # wxGlade: _629771570__276881481__937043555__734407672__521534468__912868207__331308564_MyDialog.<event_handler>
print("Event handler 'schalter_08' not implemented!")
event.Skip()
# end of class _629771570__276881481__937043555__734407672__521534468__912868207__331308564_MyDialog
class MyApp(wx.App):
def OnInit(self):
self.dialog = _629771570__276881481__937043555__734407672__521534468__912868207__331308564_MyDialog(None, wx.ID_ANY, "")
self.SetTopWindow(self.dialog)
self.dialog.ShowModal()
self.dialog.Destroy()
return True
# end of class MyApp
if __name__ == "__main__":
# info('main line')
t = Process(target=f, args=('bob',))
t.start()
# p.join()
# p = Process(target=MyApp, args=('bob',))
# p.start()
app = MyApp(0)
app.MainLoop()