【发布时间】:2016-09-12 00:10:00
【问题描述】:
在过去的几周里,我一直在为此烦恼,无法在网上找到有关我应该如何执行此操作的有用信息。
目标:
- 从一个
pi驱动多个伺服/RC 电机无线 到另一个pi。 - 本质上,我想使用
pi构建一个RC遥控器,并在接收器端使用第二个pi。
到目前为止我做了什么:
- 我已经能够使用 串行库 以及两个 Pi 上的 Tx 和 Rx 引脚通过廉价的 433MHz 接收器/发送器成功发送串行数据。但是,我需要同时发送至少六对两位数字(即 12 个数字)。这可以使用
pi/arduino上的串行库来完成,但它会导致主连续程序循环的采样率减慢到 200Hz 以下,这是一个问题。
下一步和问题:
- 由于串行数据传输无法正常工作,我正在考虑将 PWM 信号直接嵌入到 RF 信号中。 (据我所知,这就是爱好 RC 控制器的工作原理)。
-
pi(据我所知)在发送准确的 PWM 信号方面是垃圾,在正确接收它们方面更糟糕。 - 澄清一下,我必须通过射频模块执行此操作,而不是通过网络。
我该怎么做?
也许使用两个 Arduino 来进行传输和接收?
有没有可以买的“盾牌”?
是否有图书馆可以为我做到这一点? (Pi 或 adruino?)
已编辑: Roland 感谢您的回复
我已经添加了当前的串行传输代码。我不认为这是最有效的方法。如果在另一个 PWM 信号之间有一个暂停传输 PWM 信号,则可以发送更多数据而不仅仅是发送位。我不完全确定,但我认为这就是遥控 RC 飞机控制器发送信号的方式。
请注意,我插入的代码是从一个包含多个模块和几百行代码的更大程序的简单摘录。我确实认为下面几行是串行发送器的核心。
import serial
bProgramLoop = True
while (bProgramLoop == True):
#...lots of code...
iThrustPort = int(fThrustPort)
iThrustStrb = int(fThrustStrb)
iThrustTail = int(fThrustTail)
iPortMotorAngle = int(fPortMotorAngle) + 50
iStrbMotorAngle = int(fStrbMotorAngle) + 50
sPortMotorSignal = '{:02d}'.format(iThrustPort)
sStrbMotorSignal = '{:02d}'.format(iThrustStrb)
sTailMotorSignal = '{:02d}'.format(iThrustTail)
sPortAngleSignal = '{:02d}'.format(iPortMotorAngle)
sStrbAngleSignal = '{:02d}'.format(iStrbMotorAngle)
sSignal = sPortMotorSignal + sStrbMotorSignal + sTailMotorSignal + sPortAngleSignal + sStrbAngleSignal
oSer.write(sSignal) #where sSignal = 1234567890 for example or any combination of numbers from 0 to 9
【问题讨论】:
-
请向我们展示您的代码。很难对看不见的东西提出改进建议。
-
只是一个想法。既然你在 pi 中,使用单独的线程进行传输怎么样?线程很酷。但也很容易弄乱。
标签: python arduino raspberry-pi wireless pwm