如何将串行数据流读入闪亮的应用程序

Sør*_*ill 5 serial-port r shiny

我想从串行端口(USB 端口)读取数据流。

就我而言,它是来自 Arduino 板的数据,但我认为这个问题很普遍。

这在 R 中很容易完成。例如:

library(serial)
conn <- serialConnection("arduino", port="ttyUSB0", mode="9600,n,8,1") # port may be different on other machines and OS's
open(conn)
while(TRUE) { print(read.serialConnection(conn) ) }
Run Code Online (Sandbox Code Playgroud)

这将不断地将数据流吐出为文本(包括许多 NULL)。

我想在 Shiny App 中做类似的事情。尽管在此处对 R/Shiny 和数据流进行了出色的介绍,但我还没有设法使其正常工作:链接。下面有一个最小的非工作示例。

报告的错误是:argument 1 (type 'closure') cannot be processing by 'cat' which has been changed. 是print() 可以处理而renderText() 不能处理的数据类型问题吗?

library(shiny)
library(serial)

conn <- serialConnection("arduino", port="ttyUSB0", mode="9600,n,8,1")
open(conn)

ui <- fluidPage(
  titlePanel("Shiny Data Serial Stream"),
  fluidRow(
    column(4, 
       hr(),
       textOutput('serial'),
       hr()
      ) 
    )
  )

server <- function(input, output, session) {
  serialRead <- reactive({
    invalidateLater(100, session)
    read.serialConnection(conn)
  })

  output$serial <- renderText({serialRead})
}

# Run the application 
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)