Skip to main content

用于水链接水下调制解调器的 Python 库

项目描述

wl-95046 用于水链接水下调制解调器的 Python 库

PyPI 版本 构建状态 覆盖状态

用于与 Water Linked 水下调制解调器通信的 Python 库。

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

资源

要求

  • Python 2.7 或 Python 3.6
  • 点子

支持的调制解调器

  • 水联调制解调器-M64

设置

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

快速开始

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

$ python3

>>>  from wlmodem import WlModem
>>>  modem = WlModem("/dev/ttyUSB0")
>>>  modem.connect()
True
>>>  modem.cmd_configure("a", 4)
True
>>>  modem.cmd_queue_packet(b"HelloSea")
True

用法

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

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

from wlmodem import WlModem
modem = WlModem("/dev/ttyUSB0")

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

if not modem.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 上或通过获取诊断数据查看链路状态。

if modem.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)
if pkt:
    print("Got data:", pkt)

UDP 风格的传输

该类WlUDPSocket是更高级别的抽象,它允许传输任意大小的类似 UDP 的数据报。这种传输方式适用于短消息,每个数据报 3 个字节(1 个起始字节、1 个校验和和 1 个结束字节)的开销较低。数据报将被丢弃的任何单个调制解调器数据包损坏(同时仍需要全部时间来传输),这意味着它仅适用于短数据报。Modem-M64 的有效载荷大小为 8 字节,因此在任何数据包丢失的情况下成功的机会和传输的数据包数量由下式给出:

chance_of_success = ((100.0 - chance_of_packet_loss) / 100) ** (number_of_packets_sent) * 100

例如,有 5% 的丢包机会和 77 个字节的数据报(使用 3 个开销字节,这会产生 10 个数据包):

>>> ((100.0 - 5) / 100)**10 * 100
59.87369392383787

IE。有60%的机会成功传播。

如何使用WLUDPSocket类进行数据传输和接收的示例:

from wlmodem import WlModem, WlUDPSocket
modem = 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类可用于模拟与没有物理调制解调器的调制解调器的通信。一旦实例化,该对象的行为将类似于 Water Linked Modem-M64。使用模拟器对象排队的数据包在超时后返回。

>>> from wlmodem import WlModemSimulator
>>> 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

README_maintain.md中描述了有关存储库开发的更多详细信息

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

wlmodem-1.3.0.tar.gz (16.9 kB 查看哈希

已上传 source

内置发行版

wlmodem-1.3.0-py3-none-any.whl (17.9 kB 查看哈希

已上传 py3

wlmodem-1.3.0-py2-none-any.whl (17.9 kB 查看哈希

已上传 py2