AttributeError GPIO Orange Pi one

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
pumuckll
User
Beiträge: 56
Registriert: Donnerstag 30. August 2018, 17:45

Hallo Community,

Bin ein Programmierer mit "noob" Status und brauche etwas Hilfe.

Mit einem Orangepi One, möchte ich per udp befehle die GPIO Ausgänge schalten und mein Garagentor öffnen/schließen. Installiert ist die neueste Armbian Version.

Anfangs habe das mit einem Python und einem Bash Script realisiert. Weil ich nicht wusste wie ich die GPIO mit Python schalten kann.

Habe dann pyA20 gefunden und installiert. Hab eine weile gebraucht um die Pin/GPIO Bezeichnung zu verstehen, aber in den ersten test hat alles funktioniert. Aber in mein Programm bricht miet einem Fehler ab, wenn ein gpio nach dem udp befehl geschaltet wird.
Schalte ich den gpio vor dem udp signal funktioniert alles.

hier der code:

Code: Alles auswählen

#!/usr/bin/env python
#-*- coding: utf-8 -*-

import socket
import sys
import time
from time import sleep
from pyA20.gpio import gpio
from pyA20.gpio import port


gpio.init()

gpio.output(port.PC4, gpio.HIGH)
gpio.output(port.PC7, gpio.HIGH)


gpio.setcfg(port.PC4, gpio.OUTPUT)
gpio.setcfg(port.PC7, gpio.OUTPUT)

gpio.output(port.PC4, gpio.LOW)
gpio.output(port.PC7, gpio.LOW)

sleep(5)

gpio.output(port.PC4, gpio.HIGH)
gpio.output(port.PC7, gpio.HIGH)




# Voreinstellungen für Host und Port
# akzeptiert Nachrichten von jedem Host auf dem angeg. Port
host = ""
port = 7007

# Groesse Empfangspuffer (begrenzt die empfangene Nachricht)
bufsize = 8192  # 8 kByte

# UDP-Socket oeffnen
addr = (host, port)
UDPSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
UDPSock.bind(addr)

print "UDPServer Waiting for client on port xxxx"
 
#von oben bis hier funktioniert alles 
 
 
def auf():
    print "Auf"
    gpio.output(port.PC4, gpio.LOW)
    sleep(5)
    gpio.output(port.PC4, gpio.HIGH)

    
 
def ab():
    print "Ab"
    gpio.output(port.PC7, gpio.LOW)
    sleep(5)
    gpio.output(port.PC7, gpio.HIGH)

     
 
options = {    "0" : auf,
               "1" : ab,               
}
 
# Recive data from client and decide which function to call
while True:
    dataFromClient, addr = UDPSock.recvfrom(bufsize)
    options[dataFromClient]()
hier der Fehler:

Code: Alles auswählen

root@orangepione:~/entwicklung# ./tor.py
UDPServer Waiting for client on port xxxx
Auf
Traceback (most recent call last):
  File "./tor.py", line 70, in <module>
    options[dataFromClient]()
  File "./tor.py", line 49, in auf
    gpio.output(port.PC4, gpio.LOW)
AttributeError: 'int' object has no attribute 'PC4'
root@orangepione:~/entwicklung#
am Programm start werden die 2 Ausgänge zum testen ein und ausgeschaltet.

nach dem das udp signal empfangen wird , stürtz das programm dann ab.

so hatte ich denselben Fehler:

Code: Alles auswählen

while True:
#
    data, addr = UDPSock.recvfrom(bufsize)
    # weiter verarbeiten
    if data in ['torauf']:
       gpio.output(port.PC4, gpio.LOW)
       sleep(5)
       gpio.output(port.PC4, gpio.HIGH)

    if data in ['torzu']:
       gpio.output(port.PC7, gpio.LOW)
       sleep(5)
       gpio.output(port.PC7, gpio.HIGH)
beide varianten funktioieren wenn ich die gpio befehle entferne.

Was habe ich da falsch gemacht?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du importierst etwas als port, um den gleichen Namen danach an deinen Wert für den UDP Port zu binden. Entweder das eine oder das andere muss einen eigenen Namen bekommen, und natürlich an den entsprechenden Stellen der neue Name verwandt werden.
pumuckll
User
Beiträge: 56
Registriert: Donnerstag 30. August 2018, 17:45

vielen dank
jetzt funktioniert es

ein port hat jetzt 2t :)
Benutzeravatar
__blackjack__
User
Beiträge: 13006
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@pumuckll: Was aber eher ein schmutziger Hack als eine sinnvolle Lösung ist.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten