Making Java and Arduino have a simple conversation isn’t too hard – after all, the Arduino IDE is written in Java and uses the RXTX Java library – however there are a few tricks that can make the difference between hair loss and success. The Arduino Playground has an article which almost has all you need to get things working, however I found a little extra Googling was required before I had success. The following steps should get the conversation between the technologies started if you’re running Eclipse on a Mac, assuming you already have an Arduino loaded with some code that spits text out to serial (see the Arduino Playground article for an example).
Setup the RXTX library
- Create a folder for your Java project – this is where you’ll be dumping all your files.
- Download and unzip the RXTX library and place is in your project folder.
Create a Java Project and Test Program
- Open up Eclipse and create a new Java project (
File > New > Project...).
- Open up your project properties (
Project > Properties), select
Java Build Path, and then
Add Jars.... Select the RXTXComm.jar and click OK.
- Create a new class (right click on your project’s src folder, then select
New > Class).
- Copy the sample code from the Arduino Playground article.
- Create a new launch configuration (Run > Run Configurations…, then select the New launch configuration button).
- In the arguments tab add the following VM argument:
Changing the path as appropriate for your rxtx version and location.
- Select the Environment tab then click New… and create the following environment variable:
Select OK and close the Run Configurations dialog.
Fix Problems with Native Libraries
- If you try to run the configuration now it will most likely fail with an error along the lines of:
/path-to-lib/librxtxSerial.jnilib: no matching architecture in universal wrapper
This can easily be fixed by downloading a more complete and compatible version of the native side of the RXTX library from here. Use this to replace the .jnilib file in
/path-to-lib/rxtx-2.1-7-bins-r2/Mac_OS_X. Big thanks to Robert Harder for this.
Find Your Device and Port
- Back in Eclipse, find this line your sample program
and comment it out.
- The first thing the program does is try to find the port you will be communicating with. The sample code has a list that probably doesn’t include the port you are looking for associated with your device. To remedy this add some printlns to log all of the found ports. In the port searching loop find this line:
CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
and add this line after it:
- Connect your Arduino to your Mac’s usb port and run the program. You should see a list of ports something like this:
Found /dev/tty.Bluetooth-Incoming-PortIn my case the device is /dev/tty.wchusbserial410.
- Find the PORT_NAMES variable at the top of the class and add your device to it.
- Run the program again and your Java program should be intently listening to all your Arduino has to say and spit it out to the console for you to see!