Bind Bluetooth device programmatically to rfcomm via python in
11:28 12 Aug 2020

i wrote a script in python for serial communication between my M5Stack Stick C (like raduino) and the raspberry pi. all work fine. i can send "X","Y" or "Z" from raspberry py to the stick and he will reply the value (G-Force) back to the raspi! so far so good

Codes:

Python on raspy:

import serial
import time
import threading


ser = serial.Serial('/dev/rfcomm5') #init serial port
input_line = []#init input char array

def process_data(_data):
    #called every time a sream is terminated by \n 
    #and the command string is ready to use
    command = convert(_data)
    print(command)
    
def convert(s):   #convert the char list in a string
    
    new = "" #init string to append all chars from char array
    
    for x in s:     # traverse in the string  
        new += str(x)  
  
    return new    # return string  
    
def processIncomingByte(inByte):#adding incoming chars to input_line
    
    global input_line# globalize the input_line
    
    if(inByte == '\n'):#if \n is incoming, end the chararray and release process data method
        process_data(input_line)
        input_line = []#reset input_line for next incoming string
    elif(inByte == '\r'):
        pass
        
    else:#put all incoming chars in input_line 
        input_line.append(inByte)
        

while True:
    while(ser.in_waiting > 0):#while some data is waiting to read....
        processIncomingByte(ser.read())#.... process bytes whit method
    ser.write(b'X\n')
    time.sleep(0.5)

before the script work, i have to manually bind the m5Stak Stick-C over Blueman to /dev/Rfcomm5. it work just fine over GUI or Console....

but now i would like to connect the stick via python to rfcomm5 (just by know the MAC adress, will be found in a config file later on...) i startet to investigate a bit, but the more i research the more confused i am!! i read some stuff over sockets and server-client aproaches. over a seperated script and so on.... i tested this code:

from bluetooth import *

target_name = "M5-Stick-C"
target_address = None
nearby_devices = discover_devices()

for address in nearby_devices:
    if (target_name == lookup_name( address )):
        target_address = address
        break
if (target_address is not None):
    print ("found target bluetooth device with address ", target_address)
else:
    print ("could not find target bluetooth device nearby")

and indeed it found the device (just testing)! but do i realy need to make a second script/process to connect to from my script?

is the the M5stack Stick-C the server? (i think so)

im so confused about all that stuff. i coded a lot, but never whit sockets, server-client stuff. basically the communication (server/client?) works. i just need to connect the device i found in the second script via macadress to rfcomm5 (or whatever rfcomm). do i need a bluetooth socket? like in this example https://gist.github.com/kevindoran/5428612

isnt the rfcomm the socket or am i wrong?

python bluetooth raspberry-pi bind rfcomm