Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
An example for sending and receiving OSC messages with a Particle Photon
#include "simple-OSC/simple-OSC.h"
// create OSC object
UDP osc;
// set IP addresses and ports for I/O
IPAddress outIp(128, 237, 246, 8);
unsigned int outPort = 9000;
unsigned int inPort = 3000;
// creat named variables for pins
int leftMotorPin = D1;
int rightMotorPin = D0;
int ledPin = D7;
// runs once at the beginning of the program
void setup() {
// start serial & OSC
pinMode(leftMotorPin, OUTPUT);
pinMode(rightMotorPin, OUTPUT);
pinMode(ledPin, OUTPUT);
// You can view Serial.print() commands sent from the Photon via your computer's console (while it's plugged in to the computer).
// Do `ls /dev/tty.usb*` in terminal to find the address of the Photon,
// then do `screen ADDRESS BAUD` to make a serial monitor.
// For example, if my Photon is "/dev/tty.usbmodem331", I'd do 'screen /dev/tty.usbmodem331 115200'.
// while waiting for connection to be set up
while (!WiFi.ready()) {
// wait and print to console
// print to console when connection is started
Serial.println("WiFi connected");
// get Photon's IP:PORT and print it to console
IPAddress ip = WiFi.localIP();
Serial.print(F("ip : "));
Serial.print(F(" : "));
// continuously runs throughout the life of the program, after setup()
void loop() {
// RECEIVE ===
// create message object
OSCMessage inMessage;
// if the incoming OSC packet is larger than 0 bytes
int size = 0;
size = osc.parsePacket();
if (size > 0) {
// copy each byte from the incoming packet to the message object
while (size > 0) {
// if the message can be parsed
if (inMessage.parse()) {
Serial.println("Message Received");
// route it to a callback function
inMessage.route("/A", leftCallback);
inMessage.route("/B", rightCallback);
// SEND ===
// To test sending messages, you can use `nc -ul PORT` in terminal to listen to incoming messages on localhost.
// For example, if outIp is my computer's IP address (, and outPort is the port I'm sending to (9000),
// then I'd run `nc -ul 9000` in terminal, and send a message from the Photon using the following example.
// For TouchOSC, you'd want to send the appropriate route to your mobile device's IP. Follow instructions [here](
// create an outgoing message object
OSCMessage outMessage("/sensor");
// add parameters to the object
// send the object
outMessage.send(osc, outIp, outPort);
// callbacks are run asynchronously from the main loop()
void leftCallback(OSCMessage &inMessage) {
Serial.println("LEFT CALLBACK");
if (inMessage.getInt(0) == 0) {
Serial.println("LEFT OFF");
digitalWrite(leftMotorPin, LOW);
digitalWrite(ledPin, LOW);
} else {
Serial.println("LEFT ON");
digitalWrite(leftMotorPin, HIGH);
digitalWrite(ledPin, HIGH);
void rightCallback(OSCMessage &inMessage) {
Serial.println("RIGHT CALLBACK");
if (inMessage.getInt(0) == 0) {
Serial.println("RIGHT OFF");
digitalWrite(rightMotorPin, LOW);
digitalWrite(ledPin, LOW);
} else {
Serial.println("RIGHT ON");
digitalWrite(rightMotorPin, HIGH);
digitalWrite(ledPin, HIGH);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.