用于水下调制解调器的python库

wlmodem的Python项目详细描述


用于水下调制解调器的python库

PyPI versionBuild StatusCoverage Status

用于与水下调制解调器通信的python库。

该库公开了调制解调器的功能:设置配置、获取诊断信息、发送 接收数据包。

资源

要求

  • python 2.7或python 3.6
  • pyserial
  • CRCMOD

支持的调制解调器

  • 水连接调制解调器-M64

设置

$ python3 -m pip install --user wlmodem
or
(venv)$ python3 -m pip install wlmodem

快速启动

连接到调制解调器并配置模式和频道:

$python3>>>fromwlmodemimportWlModem>>>modem=WlModem("/dev/ttyUSB0")>>>modem.connect()True>>>modem.cmd_configure("a",4)True>>>modem.cmd_queue_packet(b"HelloSea")True

用法

WlModem类提供了一个简单的接口,可以使用水链接调制解调器配置、发送和接收数据。 一对调制解调器必须配置在同一信道上,并具有不同的角色,以便在它们之间建立通信。

使用串行设备名称初始化WlModem对象:

fromwlmodemimportWlModemmodem=WlModem("/dev/ttyUSB0")

调用connect()与设备建立通信

ifnotmodem.connect():print("Failed connecting to modem")sys.exit(1)

连接后,我们在一对调制解调器上设置相同的频道和不同的角色:

# On modem 1:success=modem.cmd_configure("a",4)# On modem 2:success=modem.cmd_configure("b",4)

如果调制解调器的尖端彼此靠近(<;5cm),则调制解调器现在将连接起来。 可以在LED上或通过获取诊断数据来查看链路状态。

ifmodem.cmd_get_diagnostic().get("link_up"):print("Link is up")

一旦我们连接好,我们就可以使用cmd_queue_packet函数来排队传输数据。

success=modem.cmd_queue_packet(b"HelloSea")

要获取一个调制解调器从另一个调制解调器接收到的数据,请使用get_data_packet函数。 默认情况下,此函数将等待timeout秒,直到收到数据包,然后返回。 如果timeout为0,它将立即返回一个数据包(如果可用)或None,如果没有收到任何数据包。

pkt=modem.get_data_packet(timeout=0)ifpkt:print("Got data:",pkt)

udp样式传输

WlUDPSocket类是一个更高级别的抽象,它允许传输任意大小的类udp数据报。 这种传输方式适用于短消息,并且每个短消息的开销很低,为3字节 数据报(1个起始字节、1个校验和和和1个结束字节)。 数据报将被丢弃的任何调制解调器数据包损坏(同时仍要花费全部时间进行传输)。 这意味着它只适用于短数据报。 modem-m64的有效负载大小为8字节,因此,如果任何数据包丢失,并且传输的数据包数由以下公式给出,则成功的几率为:

成功率=(100-丢包率)/100^(发送的包数)*100

例如,数据包丢失的概率为5%,数据报为77字节(3个开销字节提供10个数据包):

成功率=(1.0-0.05)**10*100=59.8%

fromwlmodemimportWlModem,WlUDPSocketmodem=WlModem("/dev/ttyUSB0")modem.connect()wl_sock=WlUDPSocket(modem)wl_sock.send(b"There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss")received=wl_sock.receive()

模拟器

可以使用WlModemSimulator类来模拟与没有物理调制解调器的调制解调器的通信。 一旦实例化,对象的行为将类似于水链接调制解调器-m64。 使用模拟器对象排队的数据包在超时后返回。

>>>fromwlmodemimportWlModemSimulator>>>modem=WlModemSimulator()>>>modem.connect()True>>>modem.cmd_queue_packet(b"HelloSim")True>>>modem.get_data_packet()b'HelloSim'

示例

example/文件夹中提供了多个演示如何使用api的示例。

开发

这个存储库中的代码是用pytest进行单元测试的。tox用于在多个python版本上自动测试。

使用以下命令运行单元测试:

pip install tox
tox

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java连接在一个屏幕上成功下载,在第二个屏幕上用几乎相同的代码获得错误   java调用super。超级的方法,跳过超级。方法   使用Web服务连接到sharepoint 2013的Java应用程序   java我无法正确呈现editText   httpurlconnection如何在java中检查url连接状态   java Spring Security可以为同一用户接受多个密码吗?   java如何在PreparedStatement中使用自动生成的@Id?   java每个数组表示一个位模式   java我不确定如何记录鼠标在某个区域被点击的次数   spring如何解决:java。lang.NoSuchMethodError:javax。坚持不懈实体管理器。createStoredProcedureQuery(Ljava/lang/String;)   java如何为blackberry中listfield项内的不同字段触发事件   安卓使用Proguard混淆java代码   java在grails 2中与多个数据源有一个和一个域关联。十、   java在尝试在单击按钮时返回combobox值时一直出错   java我可以在setter中使用@Resource注释而不是字段吗?   java Eclipse调试步进不工作   java比较相同对象的两个表并选择不同的表