Bidirektionaler Datenaustausch zwischen Android und Bluetoothmodul
Verfasst: 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)
und sendet den Parameter über Socket an
BTServer.py (läuft permanent in Endlosscheife und hält Verbindung mit BT Modul HC-05)
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
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)
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'
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