我想从串行端口(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) ) }
这将以文本(包括很多NULL)的形式连续吐出数据流。
我想在Shiny App中做类似的事情。尽管这里对R / Shiny和数据流进行了出色的介绍,但我仍未能成功进行此工作:link。下面有一个最小的无效示例。
报告的错误是:参数1(类型“ closure”)无法由已混淆的“ cat”处理。是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)