J/Link Tutorial

Communicating with the serial port

With the release of J/Link, almost all the capabilities of Java are now available directly from Mathematica. Now you can perform many tasks that used to require writing a MathLink program by simply loading the appropriate classes.

Communication with the serial port in Java is handled by a standard extension package for Java called javax.comm, otherwise known as the Java Communications API. This functionality is not yet part of the standard Java 2 platform, although it is a standard extension. Implementations are freely available for Solaris, Windows, and various Unix platforms. Most other platforms will soon be supported.

To use J/Link to control a serial port, all you need to do is use the classes and methods that are available from the Java Communications API. Note that J/Link neither has nor requires any special knowledge about these Java classes. It works this way with any Java class.

Load J/Link and start the connection.

<< JLink`

InstallJava[];

Load one class to start.

LoadClass["javax.comm.CommPortIdentifier"];

The next command gets the port object from the serial port COM1 on a Windows computer. On a UNIX machine you would, for example, replace COM1 with /dev/modem.

com1 = CommPortIdentifier`getPortIdentifier["COM1"]

serialPort  =  com1@open["J/Link",  2000]

Now the serial port can be accessed directly from Mathematica.

serialPort@getBaudRate[]

serialPort@
      setSerialPortParams[19200, SerialPort`DATABITSU8, 
        SerialPort`STOPBITSU1, SerialPort`PARITYUNONE]

Here is how you could write a command to the port.

strm = serialPort@getOutputStream[];

strm@write[ToCharacterCode["command"]]

That's it. You now have a full, interpreted scripting environment for experimenting with or programming the serial port in a completely portable way. Reading from the port is handled by CommPort.getInputStream().read(). For more information on common questions, please refer to the Java™ Communications API FAQ.

Note that this example requires version 1.0.1 of J/Link.