• Benvenuti su RaspberryItaly!
Benvenuto ospite! Login Login con Facebook Registrati Login with Facebook


Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5

[-]
Tags
gestione seriale bluetooth

Gestione seriale Bluetooth
#1
Ciao,
sono un neofita e sto cercando di far comunicare un raspberry 3b con un applicazione android su smartphone che avevo fatto tempo fa per Arduino per controllare la GPIO.
Andiamo per gradi:
Ad oggi l'unica app android che sono riuscito a far funzionare è BlueTerm con il codice che poi posterò  di seguito.
Vorrei far funzionare l'app "Serial bluetoth Terminal" (se funziona questa, funziona anche quella che ho creato io), che mi permette di inviare una stringa e non un solo carattere.
Attualmente non riesco a collegarmi e ad ogni tentativo la risposta è sempre la stessa :" connection failed: read failed, socket might closed or timeout, read ret: -1"
Cosa manca?

Grazie,

Il codice è il seguente:

Codice:
import bluetooth
import RPi.GPIO as GPIO        #calling for header file which helps in using GPIOs of PI
LED=21

GPIO.setmode(GPIO.BCM)     #programming the GPIO by BCM pin numbers. (like PIN40 as GPIO21)
GPIO.setwarnings(False)
GPIO.setup(LED,GPIO.OUT)  #initialize GPIO21 (LED) as an output Pin
GPIO.output(LED,0)

server_socket=bluetooth.BluetoothSocket( bluetooth.RFCOMM )




port = 1
server_socket.bind(("",port))
server_socket.listen(1)


client_socket,address = server_socket.accept()
print ("Accepted connection from ",address)
while 1:

data = client_socket.recv(1024)
data2 = data.decode()
invio ="\n"+ "fatto"+"\n"

print ("Received:")
print (data)
print (data2)
if (data2 == "0"):    #if '0' is sent from the Android App, turn OFF the LED
 print ("GPIO 21 LOW, LED OFF")
 GPIO.output(LED,0)
 print (invio)
 client_socket.send(invio)
if (data2 == "1"):    #if '1' is sent from the Android App, turn OFF the LED
 print ("GPIO 21 HIGH, LED ON")
 GPIO.output(LED,1)
 
 print (invio)
 client_socket.send(invio)
 

if (data2 == "q"):
 print ("Quit")
 break

client_socket.close()
server_socket.close()
Risposta
#2
Non so quasi nulla di bluetooth.. diro solo un (fuori contesto) RPi.GPIO nel 2020??
Gpiozero! ;-)
Risposta
#3
(31/03/2020, 16:03)Zzed Ha scritto: Non so quasi nulla di bluetooth.. diro solo un (fuori contesto) RPi.GPIO  nel 2020??
Gpiozero! ;-)

Considera le premesse (neofita) e che ho modificato uno script trovato in rete....

Ora ti lancio una sfida: prova a farlo funzionare, magari un giorno ti servirà per  un'applicazione!! Big Grin Big Grin
Grazie,
Marco
Risposta
#4
Se hai fatto una app su Android non sei un neofita, sei un grande!
Io ho usato con successo tempo fa (è andata al primo colpo) Bluedot. Cosa fa (o coda devi farci) con la tua applicazione? forse è più comodo usarne una già pronta?
Risposta
#5
(01/04/2020, 13:56)Zzed Ha scritto: Se hai fatto una app su Android non sei un neofita, sei un grande!
Io ho usato con successo tempo fa (è andata al primo colpo) Bluedot. Cosa fa (o coda devi farci) con la tua applicazione? forse è più comodo usarne una  già pronta?

non esageriamo......avevo usato APP INVENTOR del MIT, un'ambiente pensato per l'educazione ma col quale puoi fare molte cose (se ci sono arrivato io...): allora leggevo un sensore di temperatura con Arduino, lo spedivo all'app che lo leggeva, lo visualizzava e poi, con due livelli impostabili accendeva o spegneva un led quando la temperatura usciva dal range.
Devo ammettere che ha funzionato tutto quasi subito e ricordo (l'ho fatto tre anni fà) che c'era molto materiale in rete.
E' rimasto solo un esperimento perchè poi ho abbandonato il progetto iniziale (gestione di un termocamino che avevo in casa).
Ora vorrei portare avanti un progetto concreto (ne avevo parlato qui https://forum.raspberryitaly.com/showthr...light=evse) che prevede (nella mia testa Big Grin) come base importante (ma non solo...sempre nella mia testa...)il collegamento via bluetooth.
Praticamente sul mio smartphone voglio poter regolare la corrente di ricarica, leggere quella reale e lo stato degli ingressi per poi comandare delle uscite a seconda delle esigenze di ricarica.
La parte pratica la sto già sviluppando e provando con un discreto successo (per il mio livello) ma è ovvio che mi serve gestire delle variabili che vanno e vengono e qui mi è cascato l'asino....
Non conoscendo approfonditamente il tema ho pensato di riprendere il vecchio progetto (squadra che vince non si cambia!) e di adattarlo all'utilizzo con raspberry.
Mi ricordo che allora avevo testato l'app di cui parlavo sopra e, una volta verificato che funzionava bene, avevo imbastito la mia app personale e ha funzionato quasi subito! 
Tu confermi la mia impressione che ci siano diverse strade (adesso approfondisco bluedot), ma mi sento come buon pilota di bicicletta che deve decidere come far partire un transatlantico.....
Intanto grazie, ora approfondisco!
Risposta
#6
Buongiorno
dovresti iniziare da qui https://github.com/pybluez/pybluez
questa e una libreria da usare per usare python e bluetooth. Trovi info ed esempi
Se invece vuoi usare il sistema ble dove puoi non avere la connessione. https://www.nccgroup.trust/us/about-us/n...y-devices/

https://ianharvey.github.io/bluepy-doc/index.html

questi sono due buoni punti di partena.

Ti serve installare tutte le librerie necessarie su pi e quindi usare una libreria che ti permette di accedere a tali librerie di sistema
Ciao
Risposta
#7
Vedi anche la App Bluetooth Control Panel

Inviato dal mio Redmi Note 8 utilizzando Tapatalk
Risposta
#8
Ciao,
ce l'ho fatta!...per il momento.
Il problema era un file di configurazione di bluez che andava modificato inserendo una "-c".
Ho testato il collegamento sia con i vari terminali android che con la mia app e tutto funziona correttamente (anche se avrò ancora del lavoro da fare per gestire gli errori di disconnessione, ma per il momento va bene così).
Ora superato lo scoglio bluetooth alziamo l'asticella Big Grin :
Vorrei impostare il programma in modo che le stesse variabili possano essere lette/modificate da tre "canali" diversi: app bluetooth, display touch, da web server sul raspberrry.
Per fare questo pensavo di utilizzare il concetto di "multithreading", in modo da poter avere le applicazioni che riguardano la "comunicazione" che girano contemporaneamente e passano le variabili al programma in esecuzione che deve utilizzarle.
Che ne dite?
Risposta
#9
Ciao
allora il multithread serve per avere dei processi che viaggiano per gli affari loro ma sempre all'interno del programma. Questo e un buon inzio sicuramente ma per scambiare dati tra vari rhread ..... non molto semplice. Il miglior sistema e quello che ho usato in thermo 5 ovvero un database in memoria al quale accedi poi da ogni thread.
Che e poi il sistema che si usa su android normalmente. Questa soluzione e volatile quindi e necessario craere un file json da aggiornare , leggere alla bisogna
Thermo 5 usa sia multithread che database in memoria quindi prendi quello che ti serve da spunto e se qualcosa non ti viene......chiedi pure.
Buon divertimento
Athos
Risposta
#10
Ok, grazie per la dritta...te l'ho detto che il tuo progetto sarebbe stato ricco di spunti !! Big Grin 
Il discorso database è uno spazio ancora abbastanza inesplorato per me, ma "purtroppo" ho del tempo da potergli dedicare e quindi mi ci metto...preparati! Wink 

Per il momento grazie e Buona Pasqua a te e a tutta la comunity!!!
Risposta
  


Vai al forum:


Navigazione: 1 Ospite(i)
Forum con nuovi Post
Forum senza nuovi post
Forum bloccato
Forum Redirect