In una rete locale, vorrei leggere da programma installato su pc1, un contatto normalmente aperto L'unico mezzo di comunicazione del pc1 con l'esterno e' la rete locale Vorrei evitare di interrogare continuamente il contatto per sentire quando viene chiuso, ma esserne 'informato' in qualche modo Comunque, se fosse per semplificare l'elettronica, anche l'interrogazione ciclica sarebbe sopportabile Secondo voi qual'e' la via piu' semplice/economica per ottenere quanto richiesto (per combinazione intendo hardware e software)? Ciao e grazie RobertoA
Come 'testare' un contatto normalmente aperto via tcp/ip?
May 31, 2014
23 Replies
Il 31/05/2014 15:27, RobertoA ha scritto:
Puoi usare i 2 doppini non usati del cavo ethernet 100, G.
Il 31/05/2014 15:27, RobertoA ha scritto:
Sono curioso di sentire altre risposte, ma ormai (intendo al giorno d'oggi) un Raspberry mi sembra diventato un'alternativa economicamente interessante. Alimentazione e lan da un lato e contatto collegato ad un pin GPIO dall'altra tramite una resistenza di pull-up, fine dell'hardware.
Uno script Python sul Raspi che legge il contatto, gestisce l'antirimbalzo, e quando lo stato varia apre una connessione TCP verso il PC destinatario inviandogli un messaggio.
Sul PC destinatario uno script in qualsiasi linguaggio che faccia da server TCP in ascolto, magari si puo` aggiungere all'interno del programma gia` presente.
"Giorgio" ha scritto nel messaggio news:5389e3b9$0$20697$ snipped-for-privacy@news.tiscali.it...
Grazie per la risposta Di che doppini 'non usati' stai parlando? E supponendo ci siano, quando arrivano al pc1 che deve 'leggere' lo stato del pulsante, come dovrebbero essere usati?
"Claudio_F" ha scritto nel messaggio news:lmcoli$lop$ snipped-for-privacy@speranza.aioe.org...
Grazie per la risposta Dici che a meno del costo di un raspberry non c'e' niente? Che possa parlare via ethernet intendo
"RobertoA" ha scritto nel messaggio news:lmckl5$ddm$ snipped-for-privacy@virtdiesel.mng.cu.mi.it...
[cut]
Se si tratta di ethernet 100 mbit cablata vengono utilizzate solo 2 coppie su 4. Fai due adattatori M/F per portarti fuori una coppia, colleghi il contatto dall'altra parte e lato pc potresti utilizzare un convertitore USB to serial collegando TX ed RX alla coppia. Un semplice programmino invia a bassa velocita' (1200 bps o meno) un pacchetto formato da uno o piu' byte e, se lo ricevi, significa che il
Se non hai il filo, esistono dei moduli che forniscono una seriale over wifi tipo questo che acquistai tempo fa e mai provai
formatting link
.
Ciao, Pier.
formatting link
Il giorno sabato 31 maggio 2014 15:27:05 UTC+2, RobertoA ha scritto:
...
Prova a collegare su un connettore plug l'1 col 3 e il 2 col 6 (Tx con Rx), fai il ping (al tuo stesso PC) e guarda cosa succede.
Piccio.
"Piccio" ha scritto nel messaggio news: snipped-for-privacy@googlegroups.com... Il giorno sabato 31 maggio 2014 15:27:05 UTC+2, RobertoA ha scritto:
...
Prova a collegare su un connettore plug l'1 col 3 e il 2 col 6 (Tx con Rx), fai il ping (al tuo stesso PC) e guarda cosa succede.
Piccio.
---------------------------
Grazie per la risposta Non ho capito bene come funzionerebbe il resto della rete locale Se il cavo che parte da pc1 lo mando allo switch principale della lan, come faccio a cortocircuitare il tx e l'rx ? Se il pc stesse trasferendo dati con altri dispositivi?
Il giorno domenica 1 giugno 2014 09:50:51 UTC+2, RobertoA ha scritto:
In effetti occorrerebbe una seconda scheda di rete dedicata.
Piccio.
Il 31/05/2014 17:32, RobertoA ha scritto:
Non lo so, per questo ero curioso di sentire altre risposte. Sia Arduino ethernet che i comuni serial server costano di piu` e non e` detto che possano originare traffico senza ulteriore hardware.
E comunque il raspi si puo`programmare per fare / leggere cose arbitrariamente complesse (nei limiti della sua velocita`), per cui e` molto di piu` di un semplice "ripetitore di contatto".
Lo avevo preso tempo fa ma mai acceso. Sull'onda della curiosita` nata da questo thread l'ho provato ieri sera per la prima volta con la sua distribuzione base (raspbian). Ci sono ancora molte cose oscure, ma la lettura contatto (con debounch software) + trasmissione TCP del messaggio APERTO o CHIUSO ad ogni variazione funziona:
#! /usr/bin/env python #--------------------------------------------------------------------- # RaspberryPi TCP client - Python 2 & 3 - By C.Fin 2014 #--------------------------------------------------------------------- import RPi.GPIO as gpio import time import socket #--------------------------------------------------------------------- class Debouncher(object):
def __init__(self, initial_state=0, cyc=1): self.cyc = cyc self.state = 2 if initial_state == 0 else 0 self.counter = 0
def debounch(self, value): if self.state == 0: if value == 0: self.counter=self.cyc self.state = 1 return 1
elif self.state == 1: if value == 1: self.state = 0 else: self.counter -= 1 if self.counter == 0: self.state = 2 return 1
elif self.state == 2: if value == 1: self.counter = self.cyc self.state = 3 return 0
else: if value == 0: self.state = 2 else: self.counter -= 1 if self.counter == 0: self.state = 0 return 0 #--------------------------------------------------------------------- def message(msg): print(msg) sock = socket.socket() sock.settimeout(1) REMOTE_ADDR = "192.168.1.25", 4005 try: sock.connect(REMOTE_ADDR) sock.sendall(msg.encode("ascii")) sock.close() except socket.error: print("No connessione TCP!") #--------------------------------------------------------------------- def main(): ACT = 1 # 0=chiuso verso massa 1=chiuso verso Vcc gpio.setmode(gpio.BCM) gpio.setup(24, gpio.IN) if gpio.input(24) == ACT: closed = True ; message("CHIUSO") else: closed = False ; message("APERTO") debouncher = Debouncher(ACT if closed else ACT^1, cyc=9) while True: time.sleep(0.010) contact = debouncher.debounch(gpio.input(24)) if contact == ACT: if not closed: closed = True ; message("CHIUSO") else: if closed: closed = False ; message("APERTO") #--------------------------------------------------------------------- main()
Sul PC destinatario il server stampa i messaggi in arrivo:
#! /usr/bin/env python #--------------------------------------------------------------------- # Server TCP - Python 2 & 3 - By C.Fin 2014 #--------------------------------------------------------------------- try: from socketserver import TCPServer, BaseRequestHandler except ImportError: from SocketServer import TCPServer, BaseRequestHandler #--------------------------------------------------------------------- class Gest(BaseRequestHandler):
def handle(self): sock = self.request data = sock.recv(1024) addr = self.client_address print( "From (%s:%s) Recieved: " % (addr[0], addr[1], data.decode("ascii")) ) #--------------------------------------------------------------------- def main(): LOCAL_ADDR = "192.168.1.25", 4005 server = TCPServer(LOCAL_ADDR, Gest) server.serve_forever() #--------------------------------------------------------------------- main()
From (192.168.1.12:44601) Recieved: From (192.168.1.12:44602) Recieved: From (192.168.1.12:44603) Recieved: From (192.168.1.12:44604) Recieved: From (192.168.1.12:44605) Recieved: From (192.168.1.12:44606) Recieved: From (192.168.1.12:44607) Recieved: From (192.168.1.12:44608) Recieved: From (192.168.1.12:44609) Recieved: From (192.168.1.12:44610) Recieved: From (192.168.1.12:44611) Recieved:
Il 01/06/2014 11:36, Piccio ha scritto:
Un banale adattatore USB-Ethernet e' sufficiente, pochi euro e si risolve. Meglio se configurato con un indirizzo IP diverso dalla LAN. I tempi di risposta pero' sono dell'ordine del secondo.
angelo
Il 01/06/2014 22:15, RobertoA ha scritto:
Come ha suggerito Piccio: collegando i pin 1+3 e 2+6 sul plug ethernet.
angelo
"angelo" ha scritto nel messaggio news:lmfm3f$rdk$ snipped-for-privacy@speranza.aioe.org...
E quando hai la presa usb disponibile (del convertitore usb-ethernet) come fai a 'sentire' la chiusura di un contatto?
Oppure usare una uscita della scheda audio per generare un segnale e rilevarlo con uno degli ingressi.
"angelo" ha scritto nel messaggio news:lmg1k6$qd5$ snipped-for-privacy@speranza.aioe.org...
No, spetta. Allora il pc1 si collega col cavo ethernet allo switch centrale Il convertitore ethernet-usb si collega col cavo ethernet allo switch centrale (almeno immagino tu intenda questo) Ora resta il cavo usb del convertitore, immagino da usare per 'sentire' la chiusura contatto Come fai a far 'leggere' al pc la chiusura di un contatto usando il cavo usb?
L'unico canale di comunicazione che il pc1 ha con l'esterno e' la connessione lan
Il 01/06/2014 23:19, RobertoA ha scritto:
Direi di lasciare la rete com'e' e usare l'adattatore USB per "sentire" il tuo contatto. Per farlo devi prendere un cavo di rete, inserirlo nell'adattatore e, all'altro capo, collegare tra loro i fili 1 e 3 mentre l'interruttore lo metti tra il 2 e il 6. Poi configuri l'indirizzo IP dell'adattatore (possibilmente esterno alla tua rete) e alla fine con un ping al suo indirizzo sai se risponde o meno. Naturalmente tra l'interruttore e l'adattatore USB il collegamento dev'essere diretto, senza altri dispositivi in mezzo.
angelo
Il giorno domenica 1 giugno 2014 23:20:24 UTC+2, RobertoA ha scritto:
Oppure collega una qualsiasi periferica con presa di rete (IpCam, stampante , altro) e interrompi tramite l'interruttore il segnale Rx: se risponde all
Naturalmente IP fisso, no DHCP.
Piccio.
"angelo" ha scritto nel messaggio news:lmg6ts$855$ snipped-for-privacy@speranza.aioe.org...
Allora ho capito male io, intendi dire che l'adattatroe usb-ethernet va collagato al pc1 via usb? E allora non posso, l'unico canale comunicazione che ha il pc1 con l'esterno e' la rete locale
"Piccio" ha scritto nel messaggio news: snipped-for-privacy@googlegroups.com... Il giorno domenica 1 giugno 2014 23:20:24 UTC+2, RobertoA ha scritto:
Oppure collega una qualsiasi periferica con presa di rete (IpCam, stampante, altro) e interrompi tramite l'interruttore il segnale Rx: se risponde allora
Naturalmente IP fisso, no DHCP. Piccio.
--------------------
Ringrazio per la risposta Veramente cercavo qualcosa di piu' semplice di un Arduino o Beagleboard Una telecamera ip e' sicuramente roba piu' complessa Vorrei individuare un prodotto del tipo cpu-interfacciaethernet-webserver Ridotto ai minimissimi termini
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required