Raspberry pi

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
b.grosse
User
Beiträge: 16
Registriert: Freitag 3. Januar 2014, 11:29

Hallo,

ich möchte für ein Jugend Forscht Projekt Ventile nach Sensoren und einer Zeitschaltung ansteuern so das ich aus einer Kammer luft rein und raus lassen kan bzw. gar nichts passiert. Die Ansteuerung passiert über einen Raspberry pi mit dem modul pi face ansteuern. Ich habe leider nur ahnung von Html, Labview und Lego Mindstorms(ist eigentlich auch lab view). Eigentlich wollte Ich es mit Lab view machen aber ich habe im internet erfahren das sowas leider noch nicht möglich ist. Ich möchte daher mit der Programmierung klein anfangen und erst einmal was programmieren wo ich per Eingabe sagen kann ob luft rein/raus oder gar keine Luft sich bewegt. Könnte mir jemand erklären wie ich das hinbekomme?Welches python brauche ich 2 oder 3 oder ist es egal?

Sobald Diese Frage gestellt ist werde ich mir ein Python tutorial durchlesen

Raspberry pi model b
TrayserCassa
User
Beiträge: 97
Registriert: Donnerstag 2. Mai 2013, 19:11

Vorab Python 2 oder 3 .. Einige benutzten 2 die andern 3. Aber so wie ich das mitbekommen habe benutzen die Leute die mit Python 2 groß geworden sind es immernoch, andere wiederrum sind umgestiegen auf Python 3 ;)

Ich als Neuling benutzte Python3. Du wirst hier im Forum hilfe zu beiden Versionen bekommen, falls du sie benötigst. Einige Module existieren nur für Python 2 und daher nicht in python 3 ausführbar. Allerdings ist hier die Frage ob du sie brauchst ;)

Hier mal ein Thered der das schon mal besprochen hat

mfg
Trayser
Benutzeravatar
diesch
User
Beiträge: 80
Registriert: Dienstag 14. April 2009, 13:36
Wohnort: Brandenburg a.d. Havel
Kontaktdaten:

Die Python-Bibliothek für das PiFace gibt es für Python 2 und Python 3, dafür ist es also egal.

Für Python 2.x spricht, dass es mehr Bibliotheken gibt, die nur mir 2.x funktionieren, als solche, die nur mit 3.x funktionieren. Ob das für dich relevant ist, kommt darauf an, was du genau vor hast.

Für Python 3.x spricht, dass da ganz klar die Zukunft liegt und da manche Sachen einfacher oder eleganter gelöst sind, z.B. die Zeichenkodierung in Strings.

Die Unterschiede zwischen den beiden sind aber nicht sehr groß, so dass es kein ernsthaftes Problem sein sollte, wenn du später mal wechseln willst.


Die Doku zu pifacedigitalio hat ein paar einfache Beispiele, wie du damit die Schalter, Relays und LEDs ansprechen kannst.
http://www.florian-diesch.de
b.grosse
User
Beiträge: 16
Registriert: Freitag 3. Januar 2014, 11:29

Danke!!
b.grosse
User
Beiträge: 16
Registriert: Freitag 3. Januar 2014, 11:29

ich bin jetzt ein Stück weiter und wollte Mir ein Hauptprogramm schreiben von dem ich alle anderen Programme sarte und koordiniere. Ich habe dabei eine Fragen bevor ich anfange:
Wie startet man ein python Programm durch ein (Haupt)Python Programm so das das (Haupt)Python Programm angehalten ist und wie das es weiterläuft?
BlackJack

@b.grosse: Externe Programm startet man mit dem `subprocess`-Modul.

Die Frage ist ob man wirklich verschiedene Programme schreiben sollte wenn alles in Python umgesetzt wird und die nicht besser so schreibt, dass man die Funktionen und Klassen in den Modulen auch von anderen Modulen aus benutzen kann.
b.grosse
User
Beiträge: 16
Registriert: Freitag 3. Januar 2014, 11:29

So hab jetzt mein Programm ohne subprocess fertig und hab aber einen Fehler.
wenn ich 1 2 oder 3 eingebe passiert nichts und er Fragt mich nochmal, also folgere ich das er 1 2 oder 3 nicht erkennt.
kann das sein das ich die Keyboard eingabe noch in umerisch umwandeln muss?

Das ist das Programm:

Code: Alles auswählen

from time import sleep
import pifacedigitalio as pfio
import sys
pfio.init()
pfio.digital_write( 0, 1, 0)
sleep(0.50)
pfio.digital_write( 1, 1, 0)
sleep(0.50)
pfio.digital_write( 2, 1, 0)
pfio.digital_write( 0, 0, 0)
sleep(0.50)
pfio.digital_write( 3, 1, 0)
pfio.digital_write( 1, 0, 0)
sleep(0.50)
pfio.digital_write( 4, 1, 0)
pfio.digital_write( 2, 0, 0)
sleep(0.50)
pfio.digital_write( 5, 1, 0)
pfio.digital_write( 3, 0, 0)
sleep(0.50)
pfio.digital_write( 6, 1, 0)
pfio.digital_write( 4, 0, 0)
sleep(0.50)
pfio.digital_write( 7, 1, 0)
pfio.digital_write( 5, 0, 0)
sleep(0.50)
pfio.digital_write( 6, 0, 0)
sleep(0.50)
pfio.digital_write( 7, 0, 0)
sleep(0.50)

while True:
    e = input("Programm 1,2 oder 3?:   ")
    s = input ()
    if s == 1:
        print("beende...")
        pfio.deinit()   
        raise SystemExit    
    else:
        u = 0
        if  e == 1:
            while u <= 10:
                print ("1 Variante")
                print (u + " mal")
                u + 1
        elif e == 2:
            while u <= 10:
                    print ("2 Variante")
                    print (u + " mal")
                    u + 1
        elif e == 3:
            while u <= 10:
                        print ("3 Variante")
                        print (u + " mal")
                        u + 1

Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@b.grosse: genau, »input« liest Strings ein, und ein Vergleich mit Zahlen ist immer falsch. Warum machst Du eigentlich zwei Inputs?
Gib Deinen Variablen sinnvolle Namen. Du solltest auch Dein Programm noch in Funktionen packen, es wird solangsam zu lang:

Code: Alles auswählen

from time import sleep
import pifacedigitalio as pfio

def initialize():
    pfio.init()
    ports = list(range(8))
    for port_an, port_aus in zip(ports + [None,None], [None,None] + ports):
        if port_an is not None:
            pfio.digital_write(port_an, 1, 0)
        if port_aus is not None:
            pfio.digital_write(port_aus, 0, 0)
        sleep(0.5)
 
def run_program(variant):
    if variant == 1:
        for u in range(11):
            print ("1 Variante")
            print (u + " mal")
    elif variant == 2:
        for u in range(11):
            print ("2 Variante")
            print (u + " mal")
    elif variant == 3:
        for u in range(11):
            print ("3 Variante")
            print (u + " mal")

def main():
    try:
        initialize()
        while True:
            variant = input("Programm x, 1,2 oder 3?:   ")
            if variant == 'x':
                print("beende...")
                break
            run_program(int(variant))
    finally:
        pfio.deinit()
if __name__ == '__main__':
    main()
b.grosse
User
Beiträge: 16
Registriert: Freitag 3. Januar 2014, 11:29

danke
hat mir sehr geholfen :)
b.grosse
User
Beiträge: 16
Registriert: Freitag 3. Januar 2014, 11:29

Hallo Leute Ich habe ein Programm ausgefüllt es wäre dann bis auf weiteres fertig. Ich habe Leider einen Fehler, den ich nicht finde. :K
Wenn ich versuche Programm 1 zu starten "versucht " er das Programm zu beenden und scheitert daran
Bitte nicht sauer sein das ich es nicht in eine Funktion gepackt habe , da ich mich damit zum einen unzureichend auskenne und die möglichkeiten nicht überblicke(ich habe nur noch zwei Wochen stressige Schule Zeit) und zum anderen ich keine wirklichen "Rythmus" dahinter habe wie ich die Kammern auf und ablasse (ich glaube es legt eher am ersten Grund :| )

Hier ist das Programm:

Code: Alles auswählen

from time import sleep
import pifacedigitalio as pfio

Delay       = 1
Sleep       = 5
antwort1    ="Auffüllen (1/3)"
antwort2    ="Auffüllen (2/3)"
antwort3    ="Auffüllen (3/3)"
antwort4    ="Ruhestellung"
antwort5    ="Ablassen"
Auslassen   = 30
     
def initialize():
    pfio.init()
    ports = list(range(8))
    for port_an, port_aus in zip(ports + [None,None], [None,None] + ports):
        if port_an is not None:
            pfio.digital_write(port_an, 1, 0)
        if port_aus is not None:
            pfio.digital_write(port_aus, 0, 0)
        sleep(0.225)

     
def run_program(variant):
    if variant == 1:
        for u in range(2):
            pfio.digital_write(0,0,0)
            pfio.digital_write(1,0,0)
            pfio.digital_write(2,0,0)
            pfio.digital_write(3,0,0)
            pfio.digital_write(4,0,0)
            pfio.digital_write(5,0,0)
            pfio.digital_write(6,0,0)
            pfio.digital_write(7,0,0)
            pfio.digital_write(0,0,1)
            pfio.digital_write(1,0,1)
            pfio.digital_write(2,0,1)
            pfio.digital_write(3,0,1)
            print (antwort4)
            sleep(Sleep)
            pfio.digital_write(0,1,0)
            pfio.digital_write(1,0,0)
            pfio.digital_write(2,1,0)
            pfio.digital_write(3,0,0)
            pfio.digital_write(4,1,0)
            pfio.digital_write(5,0,0)
            pfio.digital_write(6,0,0)
            pfio.digital_write(7,0,0)
            pfio.digital_write(0,0,1)
            pfio.digital_write(1,0,1)
            pfio.digital_write(2,0,1)
            pfio.digital_write(3,0,1)
            print (antwort1)
            sleep(Delay)
            pfio.digital_write(0,1,0)
            pfio.digital_write(1,0,0)
            pfio.digital_write(2,1,0)
            pfio.digital_write(3,0,0)
            pfio.digital_write(4,0,0)
            pfio.digital_write(5,0,0)
            pfio.digital_write(6,0,0)
            pfio.digital_write(7,0,0)
            pfio.digital_write(0,0,1)
            pfio.digital_write(1,0,1)
            pfio.digital_write(2,0,1)
            pfio.digital_write(3,0,1)
            print (antwort2)
            sleep(Delay)
            pfio.digital_write(0,1,0)
            pfio.digital_write(1,0,0)
            pfio.digital_write(2,0,0)
            pfio.digital_write(3,0,0)
            pfio.digital_write(4,0,0)
            pfio.digital_write(5,0,0)
            pfio.digital_write(6,0,0)
            pfio.digital_write(7,0,0)
            pfio.digital_write(0,0,1)
            pfio.digital_write(1,0,1)
            pfio.digital_write(2,0,1)
            pfio.digital_write(3,0,1)
            print (antwort3)
            sleep(Delay)
            pfio.digital_write(0,0,0)
            pfio.digital_write(1,0,0)
            pfio.digital_write(2,0,0)
            pfio.digital_write(3,0,0)
            pfio.digital_write(4,0,0)
            pfio.digital_write(5,0,0)
            pfio.digital_write(6,0,0)
            pfio.digital_write(7,0,0)
            pfio.digital_write(0,0,1)
            pfio.digital_write(1,0,1)
            pfio.digital_write(2,0,1)
            pfio.digital_write(3,0,1)
            print (antwort4)
            sleep(Sleep)
            pfio.digital_write(0,0,0)
            pfio.digital_write(1,1,0)
            pfio.digital_write(2,0,0)
            pfio.digital_write(3,1,0)
            pfio.digital_write(4,0,0)
            pfio.digital_write(5,1,0)
            pfio.digital_write(6,0,0)
            pfio.digital_write(7,1,0)
            pfio.digital_write(0,0,1)
            pfio.digital_write(1,1,1)
            pfio.digital_write(2,0,1)
            pfio.digital_write(3,1,1)
            print (antwort5)
            sleep(Auslassen)
            pfio.digital_write(0,0,0)
            pfio.digital_write(1,0,0)
            pfio.digital_write(2,0,0)
            pfio.digital_write(3,0,0)
            pfio.digital_write(4,0,0)
            pfio.digital_write(5,0,0)
            pfio.digital_write(6,1,0)
            pfio.digital_write(7,0,0)
            pfio.digital_write(0,1,1)
            pfio.digital_write(4,0,1)
            pfio.digital_write(5,1,1)
            pfio.digital_write(6,0,1)
            print (antwort4)
            sleep(Sleep)
            pfio.digital_write(0,0,0)
            pfio.digital_write(1,0,0)
            pfio.digital_write(2,0,0)
            pfio.digital_write(3,0,0)
            pfio.digital_write(4,0,0)
            pfio.digital_write(5,0,0)
            pfio.digital_write(6,0,0)
            pfio.digital_write(7,0,0)
            pfio.digital_write(0,1,1)
            pfio.digital_write(4,0,1)
            pfio.digital_write(5,1,1)
            pfio.digital_write(6,0,1)
            print (antwort1)
            sleep(Delay)
            pfio.digital_write(0,0,0)
            pfio.digital_write(1,0,0)
            pfio.digital_write(2,0,0)
            pfio.digital_write(3,0,0)
            pfio.digital_write(4,0,0)
            pfio.digital_write(5,0,0)
            pfio.digital_write(6,0,0)
            pfio.digital_write(7,0,0)
            pfio.digital_write(0,0,1)
            pfio.digital_write(4,0,1)
            pfio.digital_write(5,1,1)
            pfio.digital_write(6,0,1)
            print (antwort2)
            sleep(Delay)
            pfio.digital_write(0,0,0)
            pfio.digital_write(1,0,0)
            pfio.digital_write(2,0,0)
            pfio.digital_write(3,0,0)
            pfio.digital_write(4,0,0)
            pfio.digital_write(5,0,0)
            pfio.digital_write(6,0,0)
            pfio.digital_write(7,0,0)
            pfio.digital_write(0,0,1)
            pfio.digital_write(1,0,1)
            pfio.digital_write(2,0,1)
            pfio.digital_write(3,0,1)
            print (antwort3)
            sleep(Delay)
            pfio.digital_write(0,0,0)
            pfio.digital_write(1,0,0)
            pfio.digital_write(2,0,0)
            pfio.digital_write(3,0,0)
            pfio.digital_write(4,0,0)
            pfio.digital_write(5,0,0)
            pfio.digital_write(6,0,0)
            pfio.digital_write(7,0,0)
            pfio.digital_write(0,0,1)
            pfio.digital_write(1,0,1)
            pfio.digital_write(2,0,1)
            pfio.digital_write(3,0,1)
            print (antwort4)
            sleep(Sleep)
            pfio.digital_write(0,0,0)
            pfio.digital_write(1,1,0)
            pfio.digital_write(2,0,0)
            pfio.digital_write(3,1,0)
            pfio.digital_write(4,0,0)
            pfio.digital_write(5,1,0)
            pfio.digital_write(6,0,0)
            pfio.digital_write(7,1,0)
            pfio.digital_write(0,0,1)
            pfio.digital_write(1,1,1)
            pfio.digital_write(2,0,1)
            pfio.digital_write(3,1,1)
            print (antwort5)
            sleep(Auslassen)
            print ("1 Variante")
            print (u)
    elif variant == 2:
        for u in range(11):
            print ("2 Variante")
            print (u)
    elif variant == 3:
        for u in range(11):
            print ("3 Variante")
            print (u)
     
def main():
    try:
        initialize()
        while True:
            pfio.digital_write(0,0,0)
            pfio.digital_write(1,0,0)
            pfio.digital_write(2,0,0)
            pfio.digital_write(3,0,0)
            pfio.digital_write(4,0,0)
            pfio.digital_write(5,0,0)
            pfio.digital_write(6,0,0)
            pfio.digital_write(7,0,0)
            variant = input("Programm x, 1,2 oder 3?:   ")
            if variant == 'x':
                print("beende...")
                break
            run_program(int(variant))
    finally:
        pfio.digital_write(0,0,0)
        pfio.digital_write(1,0,0)
        pfio.digital_write(2,0,0)
        pfio.digital_write(3,0,0)
        pfio.digital_write(4,0,0)
        pfio.digital_write(5,0,0)
        pfio.digital_write(6,0,0)
        pfio.digital_write(7,0,0)
        pfio.deinit()
        print("fertig!")
        input("zum Schließen beliebige taste drücken") 
if __name__ == '__main__':
    main()
    
Hier ist der Fehlercode:

Code: Alles auswählen

Python 3.2.3 (default, Mar  1 2013, 11:53:50) 
[GCC 4.6.3] on linux2
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
Programm x, 1,2 oder 3?:   2
2 Variante
0
2 Variante
1
2 Variante
2
2 Variante
3
2 Variante
4
2 Variante
5
2 Variante
6
2 Variante
7
2 Variante
8
2 Variante
9
2 Variante
10
Programm x, 1,2 oder 3?:   3
3 Variante
0
3 Variante
1
3 Variante
2
3 Variante
3
3 Variante
4
3 Variante
5
3 Variante
6
3 Variante
7
3 Variante
8
3 Variante
9
3 Variante
10
Programm x, 1,2 oder 3?:   1
Traceback (most recent call last):
  File "/home/pi/Desktop/Wechsel mit test.py", line 237, in <module>
    main()
  File "/home/pi/Desktop/Wechsel mit test.py", line 233, in main
    pfio.deinit()
  File "/usr/lib/python3/dist-packages/pifacedigitalio/core.py", line 183, in deinit
    pfd.deinit_board()
  File "/usr/lib/python3/dist-packages/pifacedigitalio/core.py", line 118, in deinit_board
    self.disable_interrupts()
  File "/usr/lib/python3/dist-packages/pifacedigitalio/core.py", line 90, in disable_interrupts
    self.gpio_interrupts_disable()
  File "/usr/lib/python3/dist-packages/pifacecommon/interrupts.py", line 221, in gpio_interrupts_disable
    deactivate_gpio_interrupt()
  File "/usr/lib/python3/dist-packages/pifacecommon/interrupts.py", line 376, in deactivate_gpio_interrupt
    unexport_file.write(str(GPIO_INTERRUPT_PIN))
IOError: [Errno 22] Invalid argument
b.grosse
User
Beiträge: 16
Registriert: Freitag 3. Januar 2014, 11:29

Es hat sich erledigt war ein Hardwarefehler
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Du solltest aufhören dein Programm, bzw. Teile davon, zusammenzukopieren. Schau dir den Code von Sirius3 an, dort wird das Problem vernünftig gelöst.
Das Leben ist wie ein Tennisball.
b.grosse
User
Beiträge: 16
Registriert: Freitag 3. Januar 2014, 11:29

So das ist jetzt eine weile her das ich die Erste Frage gestellt habe und mit Python begonnen hab.

Ich wollte das Programm jetzt so erweitern das ich wenn der Raspberry pi nicht am Internet und nicht an der Tastatur hängt über am Raspberry pi angebaute gesteuert werden kann.

Dazu hsbe ich das um die Internetverbindung zu erkennen:

Code: Alles auswählen

import socket
REMOTE_SERVER = "www.google.com"
def is_connected():
  try:
    # see if we can resolve the host name -- tells us if there is
    # a DNS listening
    host = socket.gethostbyname(REMOTE_SERVER)
    # connect to the host -- tells us if the host is actually
    # reachable
    s = socket.create_connection((host, 80), 2)
    return True
  except:
     pass
  return False
Leider habe ich nichts anständiges gefunden um die Tastatur zu erkennen habt ihr da ne idee? :K
BlackJack

@b.grosse: Man könnte per `pyudev`-Modul nach Tastaturen suchen. Zum Beispiel nach Geräten mit dem Attribut ID_INPUT_KEYBOARD.
b.grosse
User
Beiträge: 16
Registriert: Freitag 3. Januar 2014, 11:29

danke
Antworten