问题标签 [ruby-serialport]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
414 浏览

ruby - ruby 串行端口流控制不起作用

我正在使用serialport迄今为止对我来说做得很好的宝石。但现在我意识到 flow_control 根本不起作用。首先,我认为这是我的 USB rs232 适配器的问题,但事实并非如此。我用板载的 rs232 接口试了一下,也失败了。我使用的是最新版本的 debian 和 ruby​​ 1.9.3。

我像这样初始化串行端口:

它的初始化没有任何错误,但是当我尝试发送一些数据时,我没有得到任何答案,也没有完成握手。我在做某事吗?发牢骚?

// 当我发送命令时,设备会回答:

所以数据位、停止位和波特率都可以,但答案似乎是“要求”我更改一些设置?!

0 投票
1 回答
161 浏览

ruby - Ruby Datamapper 不会插入串行数据

我创建了一个获取串行数据的 Ruby 脚本,如果它以某些字符开头,则打印字符串(SMS),将字符串插入文件,解析字符串,然后将解析的数据插入 MySql 数据库。如果我用一个示例测试字符串代替串行数据,那么包括循环在内的一切都可以正常工作(包括在测试中插入数据库后的十秒延迟)当我使用串行数据时,打印和文件附加工作正常,但是没有插入任何内容进入数据库。数据库表创建成功。我的生产代码如下:

0 投票
1 回答
467 浏览

ruby - 无法将串口数据转换为十六进制,数据来自 RFID 阅读器

我正在尝试从连接到串行端口的 RFID 阅读器获取数据。数据以混乱的字符形式出现,我必须将其转换为十六进制。当我这样做时,尝试将其转换为十六进制时出现错误:

puts "%02X" % key

我收到此错误:'%':Integer() 的无效值:“\xE2\x10......”等

它几乎可以正确转换它,因为 "\xE2\x10..." 等接近它应该输出的内容,它应该是 00 00 E2 00 10... 等等。我不确定是否有另一种方法要将其转换为十六进制,我也尝试过:

key.to_i.to_s(16)

key.hex

但是两者都产生 0 作为输出,这是不正确的。当我尝试将其转换为整数时,它会将其转换为 0,我不知道为什么。

如果有帮助,这是完整的代码,其中大部分来自网络上的示例:

0 投票
1 回答
3014 浏览

ruby - 识别 /dev/ 是连接到的 USB 设备

我想为 OSX 编写一个 Ruby 程序,通过 USB 与我的 Arduino 进行通信。我将为此目的使用serialport gem。

我找到了一个示例代码,上面写着:

如何扫描并找到 Arduino,并知道我应该自动连接到哪个端口?(我有 OSX)谢谢!

0 投票
1 回答
1310 浏览

ruby - 连接到串口时权限被拒绝?

我想使用 Ruby 和串口 gem 连接到 3G 调制解调器。

我的红宝石代码:

启动脚本后出现此错误:

IDE 在管理员下运行,COM 端口可从 Putty 获得并且工作正常。(我在运行脚本之前关闭了 Putty。)

0 投票
1 回答
762 浏览

ruby - ruby-serialport 仅在串行监视器打开或 IRB 保持打开时发送数据

我正面临一个似乎很奇怪的问题。为了隔离问题,我已经非常简化了我的草图和 Ruby 代码。

Ruby 版本是 2.0.0,ruby-serialport 版本是 2.3.0。我在 Mac OS X 10.9 (Mavericks) 上。

这是我的草图。如您所见,如果它接收到任何串行数据,它只会点亮引脚 13 500 毫秒。

串行测试.ino

这是我的 Ruby 代码。

串行测试.rb

此代码如果单独运行,则不起作用。没有显示任何异常或警告,但引脚 13 上的 LED 不亮(即使 Arduino 上的 RX 灯确实短暂闪烁)。但是,serialtest.rb在以下条件下运行有效:

  1. 如果我打开 IRB 并运行SerialPort.new('/dev/tty.usbmodem411', 115200)保持 IRB open。然而,在我关闭 IRB 的那一刻,运行serialtest.rb不再使引脚 13 亮起。

  2. 如果我打开 Arduino 的串行监视器并保持打开状态。一旦我关闭它,灯 13 在运行时再次停止亮起serialtest.rb

  3. 如果我将整个内容输入 IRB。但它必须是逐行的。如果我复制并粘贴它,引脚 13 不会亮起(在这种情况下,我不必运行serialtest.rb)。

这很奇怪。我认为这个问题会解决这个问题,但它没有(如您所见,我已将其放在sp.flush文件的末尾。我也尝试将其放在文件的开头,以及介于两者之间的任何地方。我也有尝试sp.sync = true打开连接后立即设置,但这也不起作用)。call 也没有sp.syswrite,它应该是无缓冲的。唯一有效的似乎是让另一个进程打开串行连接。

似乎串行端口无法从文件中实际建立连接,必须在外部完成(将SerialPort.new(...)代码复制到内部Thread.new也不起作用)。

任何帮助将不胜感激。

编辑:问题似乎源于每次 Ruby 尝试建立串行连接时 Arduino 都被重置(而 IRB 和串行监视器保持连接打开,导致SerialPort.new调用serialtest.rb被忽略)。最终,我的解决方案是在 Arduino 上的 RESET 和 GND 之间放置一个 10uF 电容器。

0 投票
1 回答
445 浏览

ruby - 如何通过 ruby​​ 串口在串口线上发送“ctrl+c”cmd

我通过serailport向设备发送“top”,然后读取top info
之后,我不知道如何停止“top”!