Seite 1 von 1

Raspberry pi

Verfasst: Freitag 3. Januar 2014, 11:56
von b.grosse
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

Re: Raspberry pi

Verfasst: Freitag 3. Januar 2014, 13:37
von TrayserCassa
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

Re: Raspberry pi

Verfasst: Samstag 4. Januar 2014, 13:16
von diesch
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.

Re: Raspberry pi

Verfasst: Samstag 4. Januar 2014, 19:38
von b.grosse
Danke!!

Re: Raspberry pi

Verfasst: Sonntag 16. Februar 2014, 15:10
von b.grosse
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?

Re: Raspberry pi

Verfasst: Sonntag 16. Februar 2014, 15:16
von 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.

Re: Raspberry pi

Verfasst: Samstag 1. März 2014, 17:45
von b.grosse
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


Re: Raspberry pi

Verfasst: Samstag 1. März 2014, 18:16
von Sirius3
@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()

Re: Raspberry pi

Verfasst: Samstag 1. März 2014, 19:53
von b.grosse
danke
hat mir sehr geholfen :)

Re: Raspberry pi

Verfasst: Samstag 8. März 2014, 16:39
von b.grosse
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

Re: Raspberry pi

Verfasst: Sonntag 9. März 2014, 15:00
von b.grosse
Es hat sich erledigt war ein Hardwarefehler

Re: Raspberry pi

Verfasst: Sonntag 9. März 2014, 16:38
von EyDu
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.

Re: Raspberry pi

Verfasst: Mittwoch 27. August 2014, 17:34
von b.grosse
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

Re: Raspberry pi

Verfasst: Mittwoch 27. August 2014, 18:29
von BlackJack
@b.grosse: Man könnte per `pyudev`-Modul nach Tastaturen suchen. Zum Beispiel nach Geräten mit dem Attribut ID_INPUT_KEYBOARD.

Re: Raspberry pi

Verfasst: Donnerstag 28. August 2014, 05:31
von b.grosse
danke