rpi-rf_send 脚本 + python raspberry pi 中的硬编码射频代码

Posted

技术标签:

【中文标题】rpi-rf_send 脚本 + python raspberry pi 中的硬编码射频代码【英文标题】:Hardcode RF Codes in rpi-rf_send script + python raspberry pi 【发布时间】:2021-10-09 17:50:38 【问题描述】:

我想在 rpi-rf_send.py 发送脚本中硬编码 RF 代码,这样我就可以自动重复激活同一设备。

我查看了所有文档,但找不到任何明确的方法。

文档:

https://pypi.org/project/rpi-rf/

https://github.com/milaq/rpi-rf

以这种格式直接从终端传递参数时效果很好:

python3 send.py -p 174 -t 1 123456

但我需要做的是将这些 arg 变量硬编码到脚本中,我找不到任何关于如何做到这一点的方向。

代码如下:

import argparse
import logging

from rpi_rf import RFDevice

logging.basicConfig(level=logging.INFO, datefmt='%Y-%m-%d %H:%M:%S',
                    format='%(asctime)-15s - [%(levelname)s] %(module)s: %(message)s',)

parser = argparse.ArgumentParser(description='Sends a decimal code via a 433/315MHz GPIO device')
parser.add_argument('code', metavar='CODE', type=int,
                    help="Decimal code to send")
parser.add_argument('-g', dest='gpio', type=int, default=17,
                    help="GPIO pin (Default: 17)")
parser.add_argument('-p', dest='pulselength', type=int, default=None,
                    help="Pulselength (Default: 350)")
parser.add_argument('-t', dest='protocol', type=int, default=None,
                    help="Protocol (Default: 1)")
parser.add_argument('-l', dest='length', type=int, default=None,
                    help="Codelength (Default: 24)")
parser.add_argument('-r', dest='repeat', type=int, default=10,
                    help="Repeat cycles (Default: 10)")
args = parser.parse_args()

rfdevice = RFDevice(args.gpio)
rfdevice.enable_tx()
rfdevice.tx_repeat = args.repeat

if args.protocol:
    protocol = args.protocol
else:
    protocol = "default"
if args.pulselength:
    pulselength = args.pulselength
else:
    pulselength = "default"
if args.length:
    length = args.length
else:
    length = "default"

logging.info(str(args.code) +
             " [protocol: " + str(protocol) +
             ", pulselength: " + str(pulselength) +
             ", length: " + str(length) +
             ", repeat: " + str(rfdevice.tx_repeat) + "]")

rfdevice.tx_code(args.code, args.protocol, args.pulselength, args.length)
rfdevice.cleanup()

我尝试通过直接传递参数来试验 rfdevice.tx_code 中的变量,但仍然会出错。我试过了:

rfdevice.tx_codes(123456, 1, 174)

跟踪返回这个:

usage:send.py [-h] [-g GPIO] [-p PULSELENGTH] [-t PROTOCOL] C
send.py: error: the following arguments the following are required: C 

其次:

rfdevice.tx_code(123456.code, 1.protocol, 174.pulselength)

返回“无效语法”错误...

各位好心人知道我需要编辑哪个变量来硬编码 RF 代码以复制“python3 send.py -p 174 -t 1 123456”吗?

提前致谢。

【问题讨论】:

【参考方案1】:

好的,想通了...至少可以解决。您可以使用 subprocess 库在需要时执行脚本并将参数传递给它,而不是尝试更改 send.py 脚本中的变量。

只需添加:

import subprocess 

subprocess.Popen(['python','send.py','-p','174','-t','1','123456'])

【讨论】:

以上是关于rpi-rf_send 脚本 + python raspberry pi 中的硬编码射频代码的主要内容,如果未能解决你的问题,请参考以下文章

在一个python脚本中调用另一个python脚本中的函数

在 Python 中运行程序 (R) 以执行操作(执行脚本)的问题

在 R 中运行的 Python 脚本导入错误 [关闭]

python脚本 字符串前加r u是什么意思

env: python\r: 没有这样的文件或目录

分析脚本搭建docker环境:python, R