首页 > 解决方案 > 需要一个简单的解决方案来使用 python IR(NEC) 和 RF(433.3kHz) 库发送十六进制代码

问题描述

我想将我已经工作的项目从 C++ 转换为 python 项目。我的项目包含两个组件,IR-Transmitter 和 RF-Transmitter 正在使用(https://github.com/crankyoldgit/IRremoteESP8266https://github.com/adafruit/Adafruit_AMRadio)。所以我已经有了我想要模仿的遥控器的所有十六进制代码。现在我找不到一个简单的解决方案,如何使用 python 库将这些代码发送到连接到 PINS 的发射器。我想在安装了 ubuntu 服务器 v18.04.2 操作系统的 RaspberryPi3 上运行此代码。如果有人对此有一个好的和简单的解决方案,那就太好了。

我试图这样做https://pypi.org/project/python-lirc/但它比我想象的要复杂得多,我不想再次输入我所有的远程按钮。我搜索了大约 5 小时,但没有找到适合我的解决方案。

#include <RCSwitch.h>
#include <IRsend.h>
#include <IRremoteESP8266.h>

const int SEND_SAMSUNG_PIN = D5;
# ... some more IR sender
const int RESEIVER = D8;

IRsend irsendSamsung = IRsend(SEND_SAMSUNG_PIN);
RCSwitch rfSender = RCSwitch();
...

const char TYPE[][10] = {"SAMSUNG", "TEAC", "SWITCH", "LED"};

void initializePins() {
  irsendSamsung.begin();
  ...
  rfSender.enableTransmit(SEND_SWITCH_PIN);
}

# My Codes always look like 0x000000
void sendHexCode(const char* type, uint32_t code){
  if (strstr(type, TYPE[0]) != 0) {
    irsendSamsung.sendNEC(code, 32);
    Serial.println("SAMSUNG");
  }
  ...
  else if (strstr(type, TYPE[2]) != 0) {
    rfSender.send(code, 24);
    Serial.println("SWITCH");
  }
}

这是我想要转换的 c++ Arduino 代码的一小段

标签: pythonraspberry-pi3ubuntu-18.04arduino-esp8266infrared

解决方案


树莓派上的 Python 应该已经RPi.GPIO预装了这个库。这使您能够打开和关闭 GPIO 引脚,或在引脚上输出脉冲宽度调制信号。

如果您需要使用 Python 通过 I2C 或 SPI 与外围设备通信,则需要为此安装额外的库。

理想情况下,您需要RCSwitchIRSend库的 Python 端口。如果这些不存在,您将有几个选择。

  • 查看他们的代码并将所需的功能“移植”到 Python。
  • 如果库有 C 接口,请尝试使用 Python 中的原始库,使用ctypes. (如果它只提供 C++ 接口,则不应这样做。)
  • 使用 .为 C++ 库编写 Python 包装器boost.Python

推荐阅读