@seb Sure. I'll share it here. Like I said it is very quick and dirty. It accepts an OSC message with only one variable (integer or float) of the form: '/adress1, if, value' integer (i) should also work. I do not parse the address tag(s). Also, in a normal OSC message multiple type tags can be used in one message, like: '/adress1, if, intval, floatval' That is not implemented. import socket import time import struct import pycom pycom.heartbeat(False) def readFloat(data): if(len(data)<4): print("Error: too few bytes for float", data, len(data)) rest = data float = 0 else: float = struct.unpack(">f", data[0:4])[0] rest = data[4:] return float def readInt(data): if(len(data)<4): print("Error: too few bytes for int", data, len(data)) rest = data integer = 0 else: integer = struct.unpack(">i", data[0:4])[0] rest = data[4:] return integer def getAdrVal(msg): if b',f' in msg: l = msg.find(b',f') vals = msg[l+4:] adress = msg[1:l-1] val = readFloat(vals) #print(adress,':',int(400*readFloat(val))) elif b',i' in msg: l = msg.find(b',i') vals = msg[l+4:] adress = msg[1:l-1] val = readInt(vals) else: print('not implemented') val = 0 adress = '' return(adress, int(200*val)) # UDP socket server serversocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) serversocket.setblocking(True) serversocket.bind(('0.0.0.0', 9000)) # only bind, no accept like in TCP print('OSC server started') red, green, blue = 0,255,0 while True: data, src = serversocket.recvfrom(1024) if data: #print(data) adrVal = getAdrVal(data) if b'Lo' in adrVal[0]:red = min(adrVal[1],255) if b'Mid' in adrVal[0]:green = min(adrVal[1],255) if b'Hi' in adrVal[0]:blue = min(adrVal[1],255) pycom.rgbled(red*256*256 + green*256 + blue)