Can't seem to get arduino to send over OSC messages to Wekinator program

Hello! First time poster and I’m a bit stumped on some example code that I am trying to get working with the application Wekinator, running on a pi.

So I have wekinator running actively listening to port 6448 for any OSC messages with the address “/wek/inputs”.
I have the pi and the arduino uno with an ethernet shield connected directly through an ethernet cable.

After I upload the script to the uno, I would expect to see wekinator’s “OSC input status” light to flash green to indicate it’s receiving data but unfortunately nothing is happening.

I’m a bit of a novice in regards to networking and would appreciate any steps more experienced programmers could offer in being able to troubleshoot this issue.

Below is the example code I have running. Please let me know if there is anything I could add that would help.

Below is the OSC library I’m working with for the code.

Thank you in advance


#include <OSCMessage.h>

/*
    Make an OSC message and send it over UDP
    
    Adrian Freed
 */
#include <Ethernet.h>
#include <Udp.h>
#include <SPI.h>    
#include <OSCMessage.h>
#include <Adafruit_CC3000.h>

EthernetUDP Udp;

//the Arduino's IP
IPAddress ip(128, 32, 122, 252);
//destination IP
IPAddress outIp(192, 168, 1, 210);
const unsigned int outPort = 6448;

 byte mac[] = {  
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // you can find this written on the board of some Arduino Ethernets or shields
void setup() {
  Ethernet.begin(mac,ip);
    Udp.begin(8888);

}


void loop(){
  //the message wants an OSC address as first argument
  OSCMessage msg("/wek/inputs");
  msg.add((float)50);
  
  Udp.beginPacket(outIp, outPort);
    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(20);
}

bump is this thread appropriate to this forum? should it be moved to the "networking, protocols and devices" channel?

//the Arduino's IP
IPAddress ip(128, 32, 122, 252);
//destination IP
IPAddress outIp(192, 168, 1, 210);

The Arduino and the smartphone aren't on the same network.
How do you expect them to communicate?

Hi ieee488, The device the arduino is attempting to communicate with is a raspberry pi. The arduino and the destination ip (raspberry pi) are connected via an ethernet cable. I figured that the ip addresses could be whatever you wanted as long as they were in an acceptable range.

The ip for the "destination ip" is the one i pulled from my pi using ifconfig under the eth0 inet address from terminal which I entered into the example code. The pi is connected to my home's wifi.

The ip address listed under the "arduino ip" was already included the example code from the library, and haven't changed.

are you suggesting that the ip address numbers hold greater relevance then I imagined? does the arduino IP need to be within the same range such as "192.xx.xxx.x"? Do you think I should implement a static ip address for the arduino?

**Edit: Just tried the same patch code using a similar range as my raspberry pi's address. (192.168.1.xxx) and the wekinator program is now signaling that it's receiving input. Thanks again for the help!

sparkcloud:
The arduino and the destination ip (raspberry pi) are connected via an ethernet cable.

Don't you need a crossover network cable for that?

Hi ieee488, The project right now is sending the data over in 1 direction, so I think a regular straight through cable will work fine. I originally wanted to have this communication handled via a wifi shield but wasn't getting any results with the example code. But now with the success of using an ethernet shield, I'm gonna try and revisit the wifi code I had prepared to see if I can get that to work.

but yes, I think I should use a crossover network cable should I want communication to occur bilaterally. will update the page should others be interested.

Apparently with if one of the two devices communicating has a Gigabit Ethernet port then a crossover cable isn't necessary.