Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Read Data from Serial Port in R

I'm wanting to plot live data from the serial port. I figured R would be a good tool for the job. I'm stumbling on trying to read data from the serial port (COM4). I've verified the data is coming in through terra term (and close the session before trying R), but I can't seem to get anything in R.

I've checked a few places, including these threads: How to invoke script that uses scan() on Windows? How to include interactive input in script to be run from the command line

I've also found this old thread on the R forum: https://stat.ethz.ch/pipermail/r-help/2005-September/078929.html

These have gotten me this far, but I can't seem to actually get any data into R from the serial port.

At this point I can stream in the data in excel using VBA, but I'd like to do it in R for some nicer live plotting and filtering of the data.

Edit: Thanks for the help so far. I just got it working while writing up this edit, so here's the code:

#
# Reset environment
#
rm(list = ls())         # Remove environemnent variables
graphics.off()          # Close any open graphics

#
# Libraries
#
library(serial)

#
# Script
#

con <- serialConnection(name = "test_con",
                        port = "COM11",
                        mode = "115200,n,8,1",
                        buffering = "none",
                        newline = 1,
                        translation = "cr")

open(con)

stopTime <- Sys.time() + 2
foo <- ""
textSize <- 0
while(Sys.time() < stopTime)
{
    newText <- read.serialConnection(con)
    if(0 < nchar(newText))
    {
        foo <- paste(foo, newText)
    }
}

cat("\r\n", foo, "\r\n")

close(con)

foo ends up being a long string with new lines the way I want them:

3181, -53120, -15296, 2,  
3211, -53088, -15328, 2,  
3241, -53248, -15456, 1,  
3271, -53216, -15424, 2,  
3301, -53184, -15488, 2,  
3331, -53344, -15360, 1,  
3361, -53440, -15264, 1,

enter image description here

Thanks again for all the help!

like image 653
Ryan B Avatar asked Dec 30 '15 03:12

Ryan B


People also ask

How do serial ports send data?

To send data to a serial device, pass data to port. writable. getWriter(). write() .

How to program serial port?

To configure the Serial Port for your device, on your computer go to Control Panel - Device Manager, select “High-Speed USB Serial Port (Com X)”, right click and select Properties. Click the Features tab. This tab is used to change the COM port number and configure the port.


1 Answers

i am working with the serial-package (here) available on CRAN. This was developed to do exactly that what you need. Reading and sending data form and to RS232 etc. connections. I do really recommend this, because "mode.exe" seems not to work for virtual COM-ports. See NPort-Server etc.

like image 196
Seily Avatar answered Oct 12 '22 04:10

Seily