×
Namespaces

Variants
Actions

Archived:Exemplo de comunicação via Bluetooth utilizando RFCOMM em PySymbian

From Nokia Developer Wiki
Jump to: navigation, search

Archived.pngAquivado: Este artigo foi arquivado, pois o conteúdo não é mais considerado relevante para se criar soluções comerciais atuais. Se você achar que este artigo ainda é importante, inclua o template {{ForArchiveReview|escreva a sua justificativa}}.

Acredita-se que este artigo ainda seja válido no contexto original (quando ele foi escrito)

Article Metadata

Testado com
Aparelho(s): Emulador

Compatibilidade
Plataforma(s): S60 3rd Edition FP1

Artigo
Palavras-chave: Bluetooth, RFCOMM
Criado por cabezonxdg em 01 de setembro, 2009
Última alteração feita por hamishwillee em 07 May 2013


Este exemplo serve para demonstrar como é feita a comunicação entre um smartphone e um computador via Bluetooth utilizando o protocolo RFCOMM. Para isso será construído uma aplicação de bate-papo onde o servidor rodará no smartphone e o cliente no desktop. O cliente inicia o chat enviando a primeira mensagem.

Para desktop é necessário possuir a API PyBluezPyblueZ instalada.

Servidor

'''
Exemplo de chat multi-plataforma utilizando af_inet ou bluetooth
Autor: Leonardo Soares e Silva
'''

 
import sys
try:
import bluetooth
except ImportError:
print"Ausencia da API PyBlueZ, baixe em http://code.google.com/p/pybluez/"
sys.exit()
 
#constantes
SERVICO = 'Chat'
 
class Chat_Cliente:
def __init__(self,):
self.cliente_socket = bluetooth.BluetoothSocket( bluetooth.RFCOMM )
 
 
def localizar_dispositivos(self):
'''
retorna uma lista com os dispositivos bluetooth encontrados
'''

dispositivos = bluetooth.discover_devices()
# workarround utilizado para eliminar os enderecos bluetooth iguais retornados pelo WIDCOMM
dispositivos = list(set(dispositivos))
return dispositivos
 
def localizar_servicos(self, btaddr):
'''
verifica se o dispositivo esta rodando o servico.
retorna False caso nao seja encontrado o servico no dispositivo ou uma tupla caso o dispositivo possua o servico:
endereco bluetooth do dispotivo.
canal em que o servico esta rodando.
'''

servicos = bluetooth.find_service( address = btaddr)
for x in servicos:
if x['name'] == SERVICO:
return ( x['host'], x['port'] )
 
return False
 
def iniciar_app(self):
'''
Fluxo principal da aplicacao:
1) Inicia a busca por dispositivos bluetooth proximos
2) Verifica se o servico esta rodando no dispositivo OBS: Ao encontrar o primeiro dispositivo rodando o servico a procura termina
3) Se conecta ao dispositivo.
'''

print"Localizando dispositivo..."
lista_dispositivos = self.localizar_dispositivos()
for x in lista_dispositivos:
print"Localizando servico em: ", x
dispositivo = self.localizar_servicos( x )
if dispositivo != False:
break
try:
print"Conectando-se em: ", dispositivo[0]
self.cliente_socket.connect( dispositivo )
except bluetooth.BluetoothError:
print"Falha na conexao!"
sys.exit(0)
 
def loop(self):
while 1:
self.escrever_mensagem()
data = self.receber_mensagem()
if len(data) == 0:
break
print"SERVER: ", data
 
def escrever_mensagem(self):
data = raw_input("CLIENTE: ")
self.cliente_socket.send(data)
 
def receber_mensagem(self):
data = self.cliente_socket.recv(1024)
return data
 
def finalizar_app(self):
self.cliente_socket.close()
 
app = Chat_Cliente()
app.iniciar_app()
app.loop()
app.finalizar_app()

Cliente

import socket
import appuifw
 
#constantes
SERVICO= u"Chat"
 
class Chat_Server:
def __init__(self):
self.server_socket = socket.socket( socket.AF_BT, socket.SOCK_STREAM )
appuifw.app.exit_key_handler = self.finalizar_app
 
def iniciar_app(self):
porta = socket.bt_rfcomm_get_available_server_channel( self.server_socket )
self.server_socket.bind ( ("", porta ) )
self.server_socket.listen(1)
socket.bt_advertise_service( SERVICO,
self.server_socket,
True,
socket.RFCOMM )
socket.set_security( self.server_socket, socket.AUTH | socket.AUTHOR )
print"Aguardando conexoes..."
self.cliente_socket, addr = self.server_socket.accept()
print"Conexao aceita por: "+str(addr)
 
def loop(self):
while 1:
data = self.receber_mensagem()
if len(data) == 0:
break
print"CLIENTE: ", data
self.escrever_mensagem()
 
def receber_mensagem(self):
data = self.cliente_socket.recv(1024)
return data
 
def escrever_mensagem(self):
data = appuifw.query(u"Escreva mensagem: ", "text" )
self.cliente_socket.send(data)
 
def finalizar_app(self):
self.cliente_socket.close()
self.server_socket.close()
print"Saindo.."
 
app = Chat_Server()
app.iniciar_app()
app.loop()
app.finalizar_app()
This page was last modified on 7 May 2013, at 14:09.
101 page views in the last 30 days.
×