OSC in Processing: Unterschied zwischen den Versionen

Aus hyperdramatik
Zur Navigation springen Zur Suche springen
(Der Seiteninhalt wurde durch einen anderen Text ersetzt: „==Install oscp5 Library== Sketch --> Import Library --> Add Library --> oscp5 see: http://hyperdramatik.net/mediawiki/index.php?ti…“)
 
Zeile 3: Zeile 3:
Sketch --> Import Library --> Add Library --> oscp5
Sketch --> Import Library --> Add Library --> oscp5


==Code Example==
see: http://hyperdramatik.net/mediawiki/index.php?title=OSC_between_Arduino_and_Processing
Here are two code sketches for Arduino and Processing that send OSC messages to eachother.
 
===Processing Code===
 
<source lang="js" line start="2" highlight="4-6">
///////////////////////////////////////////////////////////////////////////////////
// Code for sending and receiving OSC messages to/from an ESP32
///////////////////////////////////////////////////////////////////////////////////
// Example for sending & receiving open sound control (OSC) messages on the ESP32.
// Every time you click the mouse in the window you send a '0' or '1' to the ESP.
// Every time an analog sensor goes bellow threshold, you receive it's value.
///////////////////////////////////////////////////////////////////////////////////
// based on this example: oscP5sendreceive by andreas schlegel
// oscP5 website at http://www.sojamo.de/oscP5
///////////////////////////////////////////////////////////////////////////////////
 
import oscP5.*;
import netP5.*;
 
OscP5 oscP5;
NetAddress myRemoteLocation;
 
void setup() {
  size(400, 400);
  frameRate(25);
  /* start oscP5, listening for incoming messages at port 12000 */
  oscP5 = new OscP5(this, 9999);
 
  /* myRemoteLocation is a NetAddress. a NetAddress takes 2 parameters,
  * an ip address and a port number. myRemoteLocation is used as parameter in
  * oscP5.send() when sending osc packets to another computer, device,
  * application. usage see below. for testing purposes the listening port
  * and the port of the remote location address are the same, hence you will
  * send messages back to this sketch.
  */
  myRemoteLocation = new NetAddress("192.168.0.11", 8888);
}
 
float backgroundShade = 0;
 
void draw() {
  background(backgroundShade);
}
 
int onOff = 0;
 
void mousePressed() {
  OscMessage myMessage = new OscMessage("/led");  // create osc message
 
  if (onOff == 0) {
    onOff = 1;
  } else onOff = 0;
 
  myMessage.add(onOff); /* add an int to the osc message */
  oscP5.send(myMessage, myRemoteLocation);  /* send the message */
}
 
 
/* incoming osc message are forwarded to the oscEvent method. */
void oscEvent(OscMessage theOscMessage) {
  /* print the address pattern and the typetag of the received OscMessage */
  print("### received an osc message.");
  print(" addrpattern: "+theOscMessage.addrPattern());
  print(" typetag: "+theOscMessage.typetag());
 
  /* read the contents of the OSCmessage as float and print it */
  float messageValue = theOscMessage.get(0).floatValue();
  println(" message: "+messageValue);
 
  backgroundShade = map(messageValue, 0, 4000, 0, 255);
}
 
</source>
 
===Arduino Code===
 
<source lang="js" line start="2" highlight="4-6">
///////////////////////////////////////////////////////////////////////////////////
// Code for ESP32 DEV MODULE 38pin version
///////////////////////////////////////////////////////////////////////////////////
// Example for sending & receiving open sound control (OSC) messages on the ESP32
// Send integers '0' or '1' to the address "/led" to turn on/off an LED on pin14.
// Every time the analog sensor value on pin36 goes bellow the "threshold" value
// a message is sent to the address "/sensor" with the current sensor value.
///////////////////////////////////////////////////////////////////////////////////
// based on this example: ESP8266ReceiveMessage from the OSCuino library
///////////////////////////////////////////////////////////////////////////////////
// when uploading code: sometimes necessairy
// to presss&hold the "BOOT" button
// when you see the following lines:
// "Connecting........_____....._____....."
/////////////////////////////////////////////////
 
#include <WiFi.h>
#include <WiFiUdp.h>
#include <OSCMessage.h>
#include <OSCBundle.h>
#include <OSCData.h>
 
char ssid[] = "xxx";          // your network SSID (name)
char pass[] = "xxx";                    // your network password
 
// A UDP instance to let us send and receive packets over UDP
WiFiUDP Udp;
const IPAddress outIp(192, 168, 0, 5);    // remote IP (not needed for receive)
const unsigned int outPort = 9999;          // remote port (not needed for receive)
const unsigned int localPort = 8888;        // local port to listen for UDP packets (here's where we send the packets)
 
OSCErrorCode error;
#define LED_PIN 27
#define SENSOR_PIN 36
unsigned int ledState = LOW;
int sensorValue = 0;
int thresholdValue = 4000;
 
 
void setup() {
  pinMode(LED_PIN, OUTPUT);
  pinMode(SENSOR_PIN, INPUT);
  digitalWrite(LED_PIN, ledState);    // turn *on* led
 
  Serial.begin(115200);
 
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, pass);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
 
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
 
  Serial.println("Starting UDP");
  Udp.begin(localPort);
  Serial.print("Local port: ");
#ifdef ESP32
  Serial.println(localPort);
#else
  Serial.println(Udp.localPort());
#endif
 
}
 
 
// function for turning on/off the LED
// depending on if one recives 1/0:
void led(OSCMessage &msg) {
  ledState = msg.getInt(0);
  digitalWrite(LED_PIN, ledState);
  Serial.print("/led: ");
  Serial.println(ledState);
}
 
 
void loop() {
 
///////////////////////////////////////////////////////////
// Receiving OSC message and turning LED on/off:
///////////////////////////////////////////////////////////
 
  OSCMessage msg; // create an OSC message object called msg
 
  int size = Udp.parsePacket(); // parse incoming OSC packet
 
  // if message received, unpack and store in msg
  if (size > 0) {
    while (size--) {
      msg.fill(Udp.read());
    }
    if (!msg.hasError()) {
      msg.dispatch("/led", led);
    } else {
      error = msg.getError();
      Serial.print("error: ");
      Serial.println(error);
    }
  }
 
///////////////////////////////////////////////////////////
// Reading sensor value and sending OSC message:
///////////////////////////////////////////////////////////
 
  sensorValue = analogRead(SENSOR_PIN);
  if (sensorValue < thresholdValue) {
 
    Serial.println(sensorValue);
 
    // publish sensor value over OSC:
    if (WiFi.status() == WL_CONNECTED)
    {
      OSCMessage msg("/sensor");
      float toSend = sensorValue;
      msg.add(toSend);
 
      Udp.beginPacket(outIp, outPort);
      msg.send(Udp);
      Udp.endPacket();
      msg.empty();
    }
  }
}
</source>

Aktuelle Version vom 5. Mai 2022, 12:54 Uhr

Install oscp5 Library

Sketch --> Import Library --> Add Library --> oscp5

see: http://hyperdramatik.net/mediawiki/index.php?title=OSC_between_Arduino_and_Processing