首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Raspberry Pi 4创建自定义协议

用Raspberry Pi 4创建自定义协议
EN

Stack Overflow用户
提问于 2022-11-17 09:58:17
回答 1查看 58关注 0票数 2

你好,谢谢你的阅读。作为一个业余项目,我认为尝试创建自己的通信协议会很有趣。我正在尝试使用GPIO引脚在我的覆盆子Pi 4发送数字信号。使用Raspberry Pi的原因是因为我想将它连接到我想在Pi上运行的网页。我使用Python和RPi.GPIO库来控制引脚。我非常在这个项目的开始,但我已经遇到了一个问题。

当我的信号发送脉冲,我得到一个奇怪的偏移时,去更高的速度。见下面的代码:

代码语言:javascript
复制
import RPi.GPIO as GPIO
import time

pin = 18                        # select pin
pulse_time = 1/100              # set lenght of pulse

GPIO.setmode(GPIO.BOARD)
GPIO.setup(pin, GPIO.OUT)

GPIO.output(pin, GPIO.HIGH)     # set pin high
time.sleep(pulse_time)          # wait
GPIO.output(pin, GPIO.LOW)      # set pin low
time.sleep(pulse_time)
GPIO.output(pin, GPIO.HIGH)
time.sleep(pulse_time)

GPIO.cleanup()

在变量"pulse_time“中,我设置了脉冲的等待时间。在这种情况下,我试图以每秒100位的速度发送比特。每10毫秒就有1位。关于数据信号,请看下面的图片(很抱歉,我的示波器没有USB接口来截图)。

在上面的图像中,您可以看到我用Python代码发送的2个脉冲。第一个脉冲正好有10毫秒长,和我想的一样,但是第二个脉冲已经有了轻微的偏移。当将bps改为1000而不是100时,偏移量会变得更糟。对于我的项目,我打算使用2400 bps的比特率。

我还尝试使用C++而不是Python来做同样的事情,因为C++在控制硬件方面通常更快/更好。遗憾的是,C++的GPIO库‘C++’被删除了,我找不到其他方法来使用C++来控制GPIO引脚。

现在我已经解释了情况,我有以下几个问题:

  1. 我是否可以在Python中设置时钟速度,以便以设定的速度控制引脚?如果是的话,我能达到的最大速率是多少?
  2. 是否有一种新的方法来使用C++而不是Python来控制GPIO引脚?
  3. 我是一个白痴,因为我试图在树莓Pi上这样做,我应该使用其他的东西吗?

如有任何建议,将不胜感激。提前感谢您抽出时间回答我的任何问题。

EN

回答 1

Stack Overflow用户

发布于 2022-11-17 10:35:03

我认为这种抵消可能来自运行GPIO.output(pin, GPIO.HIGH)所需的时间。

您可以通过测量这个执行时间并在time.sleep(...)中对其进行调整来改进这一点。(例如time.sleep(pulse_time - some_gpio_time) )

看看时差,用实验测量时间,或者你可以试著去测量它,然后在连续的睡眠中考虑它。

但是请记住,像这样的应用程序并不是为了满足硬实时需求,您总是会遇到一些错误。为了获得更好的计时,您需要将其实现为linux内核模块,但对于业余项目来说,这可能有点过头了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74473437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档