...
Currently it's not possible to use UDP communication from javascript running in the browser. However, we can use websocket.
...
websockets.
First download the OSC browser library and added it script import to the document head in your index.html.
Code Block | ||
---|---|---|
| ||
<script language="javascript" type="text/javascript" src="../osc.min.js"></script> |
In your p5j sketch, add the following code:
Code Block | ||
---|---|---|
| ||
const port = 8025;
const osc = new OSC();
setup() {
// setup OSC receiver
osc.on('/text', msg => {
handleMessage(msg);
}
);
try {
osc.open({
port:
port
}
);
}
catch (e) {
console.log("Could not connect: " + e);
}
}
function handleMessage(msg) {
console.log((msg.args[0]); // print the 1st message item out to console
console.log((msg.args[1]); // print the 2nd message item out to console
}
|
Arduino
OSC can also be used on Arduino. Just make sure you're wifi (or ethernet) connected Arduino device is on the same network as your receiver/sender application. This example is complatable with the Arduino Uno Wifi, and the MKR1010 IOT.
Code Block | ||
---|---|---|
| ||
#include <SPI.h>
#include <WiFiNINA.h>
#include <WiFiUdp.h>
#include <OSCMessage.h>
// WiFi stuff
const char* ssid = "Your Router";
const char* pwd = "Your password";
WiFiUDP Udp; // instance of UDP library
const int remotePort = 8000; // port to which you want to send
//fill in the IP address you want to send to:
char remoteAddress[] = "10.0.1.3"; // you will need to enter the IP address of the router here.
void setup() {
Serial.begin(9600);
// while you're not connected to a WiFi AP,
while ( WiFi.status() != WL_CONNECTED) {
Serial.print("Attempting to connect to Network named: ");
Serial.println (ssid); // print the network name (SSID)
WiFi.begin(ssid, pwd); // try to connect
delay(2000);
}
// When you're connected, print out the device's network status:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
Udp.begin(remotePort);
}
void loop() {
int sensor = analogRead(A0);
//the message wants an OSC address as first argument
OSCMessage msg("/sensor/");
msg.add(sensor);
Udp.beginPacket(remoteAddress, remotePort);
msg.send(Udp); // send the bytes to the SLIP stream
Udp.endPacket(); // mark the end of the OSC Packet
msg.empty(); // free space occupied by message
delay(100);
} |