`
magixyu
  • 浏览: 79396 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

用Ruby与串口交互

    博客分类:
  • Ruby
阅读更多
最近在学习串口的一些东西,今天试用了一下Ruby操作串口,向modem发送指令并获得返回。更强大的是这段代码在windows上也可以工作 

rubynroll 写道
仅通过File IO缺乏设置串口通讯参数的能力. 串口通讯建议用ruby-serialport这个gem,功能齐全, Linux/Windows均可工作.


总结一下:
串口模块
ruby: ruby-serialport
  <gem install serial-port, this needs nmake>
perl: Win32::SerialPort
Python: serial


代码如下:
def execute_cmd(chan, cmd)
  print "Executing #{cmd} "
  chan.write("#{cmd}\r")
  begin
    result = chan.readlines
    result = "Command not support\n" if result.include?("ERROR\n")
  rescue
    result = "Writing serial port error\n"
  end
  print result
end

# My modem on serial port 3
File.open('com3:', 'r+') do |file|
  execute_cmd(file, "AT")
  execute_cmd(file, "AT&FE0V1S0=0&C1&D2+MR=2;+DR=1;+ER=1;W2")
  execute_cmd(file, "ATQ0V1E0")
  execute_cmd(file, "AT+GMM")
  execute_cmd(file, "AT+FCLASS")
  execute_cmd(file, "AT#CLS=?")
  execute_cmd(file, "AT+GCI?")
  execute_cmd(file, "AT+GCI=?")
  1.upto(7) do |i|
    execute_cmd(file, "ATI#{i}")
  end
end


用perl:
open FH, '+>', "com3:" ||die "can not open this port";
print FH "AT+GMM\r";
print $s while($s=<FH>);
print FH "ATI1\r";
print $s while($s=<FH>);
close FH;



Python 有个 serial 的模块

分享到:
评论
5 楼 stworthy 2009-05-22  
<div class="quote_title">magixyu 写道</div>
<div class="quote_div">用perl:<br><pre name="code" class="java">open FH, '+&gt;', "com3:" ||die "can not open this port";
print FH "AT+GMM\r";
print $s while($s=&lt;FH&gt;);
print FH "ATI1\r";
print $s while($s=&lt;FH&gt;);
close FH;
</pre>
</div>
<p>用PERL看着确实方便,怀念PERL的年代。</p>
<p> </p>
4 楼 magixyu 2009-05-21  
错位的问题应该和rubynroll提到的“串口通讯参数的能力”有关。
请看下面这个帖子
http://magixyu.iteye.com/blog/325315
3 楼 lytsing 2009-05-19  
楼主,你的脚本在我这里行不通。

# My modem on serial port 6
File.open('com6:', 'r+') do |file|
  execute_cmd(file, "AT")
  execute_cmd(file, "AT+CPBS=?")
  execute_cmd(file, "AT+CPBS?")
  execute_cmd(file, "AT+CIMI?")
  execute_cmd(file, "AT+CSQ?")
  execute_cmd(file, "AT+CREG?")
  execute_cmd(file, "AT+VSPST?")
  execute_cmd(file, "AT+CMGF=?")
end

结果是:

Executing AT
Executing AT+CPBS=?

OK
Executing AT+CPBS?

+CPBS:("ME","SM")

OK
Executing AT+CIMI?

+CPBS:"ME",0,200

OK
Executing AT+CSQ?

460036380892074

OK
Executing AT+CREG?

+CSQ: 0,99

OK
Executing AT+VSPST?

+CREG:2,2,0x0,0x0

OK
Executing AT+CMGF=?

+VSPST:1,1

OK

发现错位,并少了最后一个AT响应,请指教。

2 楼 magixyu 2009-02-07  
rubynroll 写道
仅通过File IO缺乏设置串口通讯参数的能力. 串口通讯建议用ruby-serialport这个gem,功能齐全, Linux/Windows均可工作.

谢了 ^_^
我马上更新一下。
1 楼 rubynroll 2009-02-07  
仅通过File IO缺乏设置串口通讯参数的能力. 串口通讯建议用ruby-serialport这个gem,功能齐全, Linux/Windows均可工作.

相关推荐

    ruby 串口操作 serialport

    serialport-0.6.0-mswin32.gemserialport-0.6.0-mswin32.gemserialport-0.6.0-mswin32.gemserialport-0.6.0-mswin32.gemserialport-0.6.0-mswin32.gemserialport-0.6.0-mswin32.gemserialport-0.6.0-mswin32....

    rubi128k-core:用于Ruby 128k的Arduino Core

    这款核心库提供了与Arduino平台兼容的API,让开发人员能充分利用Ruby 128K的硬件资源,进行各种嵌入式项目开发。 Ruby 128K是一款具有128KB闪存的微控制器,通常用于需要处理能力较强且内存空间较大的IoT(物联网)...

    S3C241X_CE60

    - **库文件**:提供了与硬件交互的API,开发者可以调用这些API进行设备操作。 4. **开发流程**: - 配置Platform Builder:根据硬件选择合适的BSP,配置系统组件和驱动。 - 编译生成OS映像:在Platform Builder...

    dashing-demo:所有的小部件

    5. **小部件事件与交互** Dashing 支持小部件之间的交互,通过监听和触发自定义事件,可以实现更复杂的仪表板逻辑。例如,当点击一个按钮小部件时,可以触发一个事件来更新其他小部件的数据。 6. **实时刷新与推送...

    esp32:ESP32项目

    对于开发者来说,理解BootROM的工作原理和如何与之交互,能够帮助他们更好地进行固件更新和故障排查。 标签“Ruby”可能意味着在这个ESP32项目中,部分代码或者脚本使用了Ruby编程语言。Ruby是一门动态、面向对象的...

    手机自动化测试原理

    测试过程中,PC上的控制端通常使用特定的测试工具,如Appium、Selendroid等,通过串口、USB或无线连接(如Wi-Fi、蓝牙)与手机建立通信。这些工具能够发送请求给手机中的agent,agent扮演着解析和转发命令的角色。它...

    etrobo_sample_mruby

    由于项目与机器人技术相关,它可能包含了控制逻辑、传感器数据处理、运动规划以及与用户交互的命令解析等内容。 在深入研究这个项目之前,我们需要对以下几个关键知识点有所了解: 1. **C语言编程**:作为基础,...

    serialport.cr:libserialport的水晶绑定:用于访问串行端口的跨平台库

    Crystal是一种现代、静态类型的编程语言,它提供了与Ruby相似的语法,但拥有编译时类型检查和性能优势。在本篇中,我们将深入探讨`serialport.cr`,这是一个为Crystal语言设计的libserialport库的绑定,允许开发者...

    背部

    后端开发涉及服务器、应用及数据库之间的交互,主要任务包括处理业务逻辑、数据存储和检索、用户认证与授权等。常见的后端技术有Java(Spring Boot)、Python(Django, Flask)、Node.js(Express)、Ruby on Rails...

    java开源包1

    Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...

    java开源包11

    Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...

    java开源包2

    Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...

    java开源包3

    Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...

    java开源包6

    Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...

    java开源包5

    Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...

    java开源包10

    Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...

    java开源包4

    Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...

    java开源包8

    Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...

    java开源包7

    Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...

    java开源包9

    Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...

Global site tag (gtag.js) - Google Analytics