用于 MCP3008 10 位 SPI ADC 的 Swift 库
这个简单的库读取由 MCP3008 10 位 SPI 驱动的 ADC 产生的值。 该组件能够将模拟信号(电压范围由 Vref 定义,大多数情况下您会将 Vref 和 Vdd 连接到 5V)转换为介于 0 和 1023 之间的整数值。 模数转换器非常有用,例如对于像 Raspberry Pi 这样没有自己的模拟输入引脚的板子(如 Arduino 或传统的嵌入式板)。
SwiftyGPIO 支持的每个板:Raspberry Pi、BeagleBone、C.H.I.P. 等...
要使用此库,您需要一个运行 Swift 3.x/4.x 的 Linux ARM 板。
下面的示例将使用 Raspberry Pi 2 板,但您可以轻松修改示例以使用其他支持的板之一,Raspberry Pi 2 的完整工作演示项目可在 Examples
目录中找到。
我们需要做的第一件事是从 SwiftyGPIO 获取 SPIInterface
的实例,并使用它来初始化 MCP3008
对象
import SwiftyGPIO
import MCP3008
let spis = SwiftyGPIO.hardwareSPIs(for:.RaspberryPi2)!
let spi = spis[0]
let m = MCP3008(spi)
然后只需使用 readValue
从其中一个模拟输入读取当前转换后的值 (0...1023)
m.readValue(0) //CH0 pin
从未连接的通道(浮动输入)读取值将给出无意义的值,因此,请务必从正确的输入读取。
该库还支持使用位碰撞的虚拟 spi
let gpios = SwiftyGPIO.GPIOs(for:.RaspberryPi2)
var cs = gpios[.P27]!
var mosi = gpios[.P22]!
var miso = gpios[.P4]!
var clk = gpios[.P17]!
var spi = VirtualSPI(mosiGPIO: mosi, misoGPIO: miso, clockGPIO: clk, csGPIO: cs)
let m = MCP3008(spi)
for i in 0...7 {
print("Value for channel ",i,": ",m.readValue(for: i) << 1) //Shift required to obtain the correct value
}
请参考 SwiftyGPIO 的 readme 文件以获取 Swift 安装说明。
一旦您的板子运行 Swift,如果您的版本支持 Swift Package Manager,您可以简单地将此库添加为项目的依赖项,并使用 swift build
进行编译
let package = Package(
name: "MyProject",
dependencies: [
.Package(url: "https://github.com/uraimo/MCP3008.swift.git", majorVersion: 2),
...
]
...
)
Examples
目录包含使用 SPM 的示例项目,编译它并使用 ./.build/debug/TestMCP
运行示例。
如果不支持 SPM,您需要手动下载库及其依赖项
wget https://raw.githubusercontent.com/uraimo/MCP3008.swift/master/Sources/MCP3008.swift https://raw.githubusercontent.com/uraimo/SwiftyGPIO/master/Sources/SwiftyGPIO.swift https://raw.githubusercontent.com/uraimo/SwiftyGPIO/master/Sources/Presets.swift https://raw.githubusercontent.com/uraimo/SwiftyGPIO/master/Sources/SPI.swift https://raw.githubusercontent.com/uraimo/SwiftyGPIO/master/Sources/SunXi.swift
一旦所有文件都已下载,创建一个额外的文件,其中将包含您的应用程序的代码(例如 main.swift)。 当您的代码准备就绪后,使用以下命令编译它
swiftc *.swift
编译器将创建一个名为 main 的可执行文件。