Bidirektionaler Datenaustausch zwischen Android und Bluetoothmodul

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
kloeppi
User
Beiträge: 2
Registriert: Montag 13. Februar 2017, 20:07

Montag 13. Februar 2017, 20:46

Hallo,

ich hoffe, ich bin in diesem Forum richtig mit meinem Anliegen.
Obwohl ich absoluter Programmierneuling bin, funktioniert der jetzige Stand nach stundenlanger Recherche und tagelangem Probieren einwandfrei.
Mit den 2 unten angehängten SL4A Scripts sende ich von der Android App Tasker Daten über ein Bluetooth Modul HC-05 an einen Mikroprozessor.

BTSend.py (wird von Tasker mit Parameter %par1 gestartet)

Code: Alles auswählen

import socket
import android

droid = android.Android()
command=droid.getIntent().result[u'extras'][u'%par1']

Ziel='127.0.0.1'
Port=5005
 
s_udp_sock = socket.socket( socket.AF_INET,  socket.SOCK_DGRAM ) 
 
def sende(Nachricht): 
        s_udp_sock.sendto( Nachricht, (Ziel,Port) )
 
sende(command)
und sendet den Parameter über Socket an

BTServer.py (läuft permanent in Endlosscheife und hält Verbindung mit BT Modul HC-05)

Code: Alles auswählen

import socket
import android
import time

droid = android.Android()

uuid='00001101-0000-1000-8000-00805F9B34FB'
mac='xx:xx:xx:xx:xx:xx'

Quelle='127.0.0.1'
Port=5005

BTVerify=1
 
e_udp_sock = socket.socket( socket.AF_INET,  socket.SOCK_DGRAM )
e_udp_sock.bind( (Quelle,Port) )

print '########Dies ist der Empfaenger########'    
print 'Neue Verbindung:'
print 'Quelle',Quelle
print 'Port=',Port
 
while 1:

	if (len(droid.bluetoothActiveConnections().result) == 0):
		print 'Verbinde mit ClockRadioBT'
		connID=droid.bluetoothConnect(uuid,mac).result
		while (len(droid.bluetoothActiveConnections().result) == 0):
			time.sleep(0.10)

	print ''
	print 'Warte auf Daten'
	data, addr = e_udp_sock.recvfrom(16)
	if (len(data) == 1):
		# A = Amp On
		# a = Amp Off
		# B = Start charging
		# b = Stop charging
		droid.bluetoothWrite(data, connID)
		if (BTVerify == 1):
			if droid.bluetoothReadReady():
				res= droid.bluetoothRead(1, connID).result
				if (res == data):
					task_name='BTCallback'
					extras={'task_name':task_name}
					taskIntent = droid.makeIntent('net.dinglisch.android.tasker.ACTION_TASK', None, None, extras).result
					droid.sendBroadcastIntent(taskIntent)
					print 'Processed ', data, ', Res = ', res
		else:
			print 'Processed ', data, ', Res = ? (VerifyOff)'
	elif (data == 'VerifyOn'):
		BTVerify = 1
		print 'Set BTVerify = 1'
	elif (data == 'VerifyOff'):
		BTVerify = 0
		print 'Set BTVerify = 0'
	elif (data == 'Exit'):
		droid.exit()
		sys.exit
		print 'Processed ', data
	else:
		print 'Unknown command'
Jetzt möchte ich das gerne erweitern und müsste dazu Daten (C = PIR ON, c = PIR Off) in der anderen Richtung - also vom Mikroprozessor über das BT-Modul an Android - senden.
Würde evtl. mit einem 2. Script und res= droid.bluetoothRead(1, connID).result in Endlosschleife funktionieren, wenn ich 2x mit dem BT-Modul verbinden könnte - geht aber nicht.
Und im BTServer.py oben wartet das Script ja bei data, addr = e_udp_sock.recvfrom(16) auf Socket Daten.

Ich hoffe, ich habe mich einigermassen verständlich ausgedrückt und würde mich freuen, wenn jemand mir Newbie weiterhelfen kann

Danke für alle Antworten

Kloeppi
Zuletzt geändert von Anonymous am Montag 13. Februar 2017, 23:59, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Antworten