Toit:无法导入' hc_sr04 '

  • 本文关键字:hc sr04 导入 Toit toit
  • 更新时间 :
  • 英文 :


我无法在Toit代码中导入hc_sr04。我得到错误:Package for prefix 'rmt' not found。如何解决rmt导入问题?

我已经安装了hc_sr04包。

$ toit pkg install github.com/lask/toit-hc-sr04@2.0.0

我尝试在我的代码中导入它:main.toit

import hc_sr04

main:
print "Start"

当我运行它时,我得到错误:Package for prefix 'rmt' not found

$ toit run --device <UUID> main.toit
<pkg:toit-hc-sr04>/driver.toit:1:8: error: Package for prefix 'rmt' not found
import rmt
^~~
<pkg:toit-hc-sr04>/driver.toit:41:14: error: Unresolved type: 'Channel'
echo_ /rmt.Channel
^~~~~~~
<pkg:toit-hc-sr04>/driver.toit:42:17: error: Unresolved type: 'Channel'
trigger_ /rmt.Channel
^~~~~~~
<pkg:toit-hc-sr04>/driver.toit:45:21: error: Unresolved type: 'Signals'
rmt_signals_ /rmt.Signals
^~~~~~~
<pkg:toit-hc-sr04>/driver.toit:56:20: error: Unresolved identifier: 'Channel'
trigger_ = rmt.Channel trigger --output --idle_level=0
^~~~~~~
<pkg:toit-hc-sr04>/driver.toit:57:17: error: Unresolved identifier: 'Channel'
echo_ = rmt.Channel echo --input
^~~~~~~
<pkg:toit-hc-sr04>/driver.toit:62:24: error: Unresolved identifier: 'Signals'
rmt_signals_ = rmt.Signals 1
^~~~~~~
Compilation failed.

$ toit version
+---------+------------+
| VERSION |    DATE    |
+---------+------------+
| v1.20.1 | 2022-05-03 |
+---------+------------+
  • package.yaml
dependencies:
hc_sr04:
url: github.com/lask/toit-hc-sr04
version: ^2.0.0

这似乎是包管理器中的一个错误。

hc-sr04包依赖于sdk环境^2.0.0-alpha.1。但是,您使用的是v1.20.1

理论上,包管理器不应该给你那个包,而应该给你一个没有这个环境要求的旧版本。也就是说,看起来旧的hc-sr04软件包也需要RMT (ESP32的远程控制外设)。

如何修复:

  • 切换到已经有RMT的开源版本(https://github.com/toitlang/jaguar),或者
  • 自己实现hc-sr04驱动程序,而不使用RMT。

我最近做了一个练习:

// Distributed under BSD0. (see my profile).
import gpio
TRIGGER ::= 21  // Change to your trigger pin.
ECHO ::= 22  // Change to your echo pin.
measure_distance trigger echo:
trigger_start := Time.monotonic_us
trigger.set 1
while Time.monotonic_us < trigger_start + 10:
// Do nothing while waiting for the 10us.
trigger.set 0
while echo.get != 1: null
echo_start := Time.monotonic_us
while echo.get == 1: null
echo_end := Time.monotonic_us
diff := echo_end - echo_start
return diff / 58
main:
trigger := gpio.Pin TRIGGER --output
echo := gpio.Pin ECHO --input
while true:
print "measured $(measure_distance trigger echo)cm"
sleep --ms=50

这段代码不如基于RMT的代码精确,但也不错。

最新更新