• 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
#11
Ciao,
Sono riuscito a generare, modificare e gestire un file con json. Smile
Ho provato a scambiare dati con la mia applicazione bluetooth e a scriverli/leggerli sul file json. Smile

Poi ho voluto provare a fare in modo di poter modificare i dati da riga di comando....e funziona...male! nel senso che il flusso come l'ho impostato è all'interno del ciclo del bluetooth quindi per poter inserire dei dati manualmente devi aver fatto un'invio tramite bluetooth.
Io invece devo riuscire a "parallelizzare" le due cose:
Vi invio di seguito il codice. Considerate che il dizionario contiene due coppie con indice "nome" e "linguaggi":

Eccolo:

Codice:
import bluetooth
import json
import time


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)
print (server_socket)
   

while 1:
#time.sleep (1)
with open("ProvaJson2.json")as JsonFile:
       DataStringInvio=json.load(JsonFile)
       DataStringInvioBt= str(DataStringInvio)+"\n"
       client_socket.send(DataStringInvioBt)
data = client_socket.recv(1024)
DataStringBt = data.decode()
print ("Received:")
print (DataStringBt)
DataDict = json.loads(DataStringBt)
with open("ProvaJson2.json","w")as JsonFile:
   json.dump(DataDict,JsonFile)
print (DataDict)
print("immetti il tuo nome e premi invio:")
NomeInput = input()
print("immetti il linguaggio e premi invio:")
LingInput = input()
ManualDict = {"nome":NomeInput,"linguaggi":LingInput}
with open("ProvaJson2.json","w")as JsonFile:
   json.dump(ManualDict,JsonFile)

client_socket.close()
server_socket.close()
Risposta
#12
non ho ben chiaro cosa vuoi fare, quindi la butto un po' lì..
crea una funzione che invia i dati via bluetooth e la richiami da dentro il ciclo, quando ti serve
Risposta
#13
Il mio desiderio è che il sistema sia sempre allineato da qualsiasi dispositivo io lo interroghi.
Quindi è ottima l'idea di gestire un unico file, che può essere scritto e letto in più modi.
Il discorso della connessione bluetooth deve funzionare in autonomia, non posso richiamarlo quando serve (o magari ogni tot tempo): ci avevo provato ma, ogni volta che esco dal loop del bluetooth, si disconnette e si deve rifare il pairing.
Se io ho aperto l'applicazione che legge il file json via bluetooth e da tastiera sovrascrivo lo stesso file, l'applicazione leggendo il file modificato acquisisce la nuova stringa.
Così se faccio un loop che ogni 3 secondi legge e con "print" mi scrive il contenuto del file json, quando io lo modifico con l'app, poi devo vederlo.
spero di essermi spiegato...è più facile pensarlo che scriverlo....
Risposta
#14
ok perdonami, ma come premesso avevo usato bluetooth una sola volta prima, con app preconfezionata Bluedot..
allora uno script python che legge il file json via bluetooth altri script python che lo modificano alla bisogna.
Il multitasking è bello.
Risposta
#15
Ciao,
sono riuscito a far funzionare i processi in parallelo utlizzando i thread:
praticamente ho generato un codice che (ad intervalli regolari)legge il file json, lo modifica e lo riscrive.
nello stesso tempo in un'altro thread faccio partire la comunicazione bluetooth che legge il file json e, se voglio, lo modificoe lo invio.
A questo punto mi sono accorto di un problema (...ancora sul bluetooth!): inserendo il codice che ho postato un pò di tempo fa la procedura si ferma fino a che non invio dati (data = client_socket.recv(1024)) e questo non mi va bene, perchè io devo poter leggere il file json da bluetooth senza necessariamente riscriverlo.
A questo punto ho pensato due cose:
1) C'è qualche modulo in bluez che mi permette di stabilire se ci sono dati ricevuti, altrimenti proseguo
2) Utilizzo una variabile che cambia stato ogni tot tempo (true, false ogni 2 secondi per es.) e inserisco quel controllo dei dati ricevuti in un ciclo While che controlla la variabile: in questo modo ogni due secondi controllo se ha ricevuto qualcosa e passo oltre.
Non ho trovato niente in bluez che possa aiutarmi (anche se credo che debba esserci una soluzione semplice!) e quindi sto cercando di percorrere la seconda strada...ma non sono riuscito a generare una variabile globale che funzioni come voglio.

avete qualche idea??

Grazie
Risposta
  


Vai al forum:


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