这个基于 SwiftIO
的 MadDrivers
库提供了一种简单的方式来使用各种设备。您可以直接使用相关的类来读取或写入数据,而无需担心通信细节。
注意:此库旨在简化您对所有设备的编程方式,因此一些不常见的错误或罕见情况没有被考虑。如果发生故障,SwiftIO
库可以提供有关通信的信息以及发生哪个错误。如果您需要更详细的结果以确保安全性,请随时下载并根据您的需要修改代码。
下表列出了现有的驱动,并将随着时间的推移进行更新。
类型 | 设备 | 通信方式 |
---|---|---|
加速度计 | ADXL345 | I2C/SPI |
LIS3DH | I2C/SPI | |
颜色 | AS7341 | I2C |
TCS34725 | I2C | |
VEML6040 | I2C | |
DAC (数模转换器) | MCP4725 | I2C |
显示 |
IS31FL3731 | I2C |
LCD1602 | I2C | |
ST7789 | SPI | |
距离 |
HCSR04 | GPIO |
VL53L0x | I2C | |
气体 |
BME680 | I2C/SPI |
SGP30 | I2C | |
手势 | APDS9960 | I2C |
陀螺仪 | BMI160 | I2C/SPI |
MPU6050 | I2C | |
触摸 | MPR121 | I2C |
光照 | BH1750 | I2C |
LTR390 | I2C | |
TSL2591 | I2C | |
VEML7700 | I2C | |
磁力计 | MAG3110 | I2C |
MLX90393 | I2C/SPI | |
压力 | BMP280 | I2C/SPI |
MPL3115A2 | I2C | |
MS5611 | I2C/SPI | |
RTC (实时时钟) | DS3231 | I2C |
PCF8523 | I2C | |
PCF8563 | I2C | |
温度 & 湿度 | AHTx0 | I2C |
ADT7410 | I2C | |
DHTxx | GPIO | |
HTU21D | I2C | |
MAX6675 | SPI | |
MCP9808 | I2C | |
SHT3x | I2C | |
TMP102 | I2C | |
热感 | AMG88xx | I2C |
紫外线 | VEML6070 | I2C |
Wi-Fi | ESP32 | UART |
我们将不断添加更多的驱动。欢迎您贡献!
让我们从尝试 Examples 文件夹中的演示项目开始。
在 Examples
文件夹中,有针对不同设备的文件夹。每个文件夹可能包含一个或多个项目,以帮助您开始使用每个设备。
├── Examples
│ ├── ADXL345
│ │ ├── ReadXYZ
│ ├── DS3232
│ │ ├── Alarm
│ │ ├── ReadTime
│ │ ├── Timer
│ ├── IS31FL3731
│ ├── ├── BreathingLED
│ ├── ├── DrawPixels
│ ├── ├── Frame
│ ├── ├── ScrollingText
│ ├── ...
下载整个文件夹后,这里 有一个关于在您的板子上运行代码的教程。
以库 SHT3x
为例
创建 一个可执行项目 ReadSHT3x
。
打开项目并打开文件 Package.swift
。
默认情况下,MadDrivers
已经添加到依赖项中,因此您可以使用其中的所有驱动。但是,最好指定一个特定的库以减少项目的构建时间。因此,将语句 .product(name: "MadDrivers", package: "MadDrivers")
更改为 .product(name: "SHT3x", package: "MadDrivers")
,如下所示。
// swift-tools-version: 5.9
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "ReadSHT3x",
dependencies: [
// Dependencies declare other packages that this package depends on.
.package(url: "https://github.com/madmachineio/SwiftIO.git", branch: "main"),
.package(url: "https://github.com/madmachineio/MadBoards.git", branch: "main"),
.package(url: "https://github.com/madmachineio/MadDrivers.git", branch: "main"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.executableTarget(
name: "ReadSHT3x",
dependencies: [
"SwiftIO",
"MadBoards",
// use specific library would speed up the compile procedure
.product(name: "SHT3x", package: "MadDrivers")
]),
.testTarget(
name: "ReadSHT3xTests",
dependencies: ["ReadSHT3x"]),
]
)
main.swift
中,导入 SHT3x
,然后您可以使用其中的所有内容与传感器进行通信。import SwiftIO
import MadBoard
import SHT3x
let i2c = I2C(Id.I2C0)
let sensor = SHT3x(i2c)
while true {
let temperature = sensor.readCelsius()
let humidity = sensor.readHumidity()
print(temperature)
print(humidity)
sleep(ms: 1000)
}
首先,非常感谢您抽出时间做出贡献🥰! 欢迎任何更正、增强和补充!
如果您想使用 MadDrivers
中未包含的某些传感器,您可以 提出问题 或从您自己的分支 创建拉取请求。
通过单击此页面右上角的“Fork”按钮,将 MadDrivers 存储库 Fork 到您的 GitHub 帐户。
将存储库 克隆 (Clone) 到您的本地计算机。
git clone https://github.com/YOUR-USERNAME/MadDrivers.git
cd MadDrivers
feature/add_sht3x
以进行更改。git checkout -b feature/add_sht3x
开始处理您的驱动程序并使用传感器测试您的代码。查看 驱动程序指南 以获取一些额外信息。
实现驱动程序后,将您的更改 推送 (Push) 到您的存储库。
git push --set-upstream origin feature/add_sht3x
转到您的 Forked 存储库,然后单击按钮 Compare & pull request 以将您的更改提议到上游存储库。
点击按钮 Create pull request。
发送您的请求后,CI 将自动检查您的 PR。 如果没有发生错误并且不需要修改,您的请求将被审查并合并到 main
分支中。
如果您想创建一个新的驱动程序,以下是我们的传感器待办事项清单,供您参考。 欢迎提出更多传感器。
类型 | 传感器 | 通信方式 |
---|---|---|
温度/湿度 | HTS221 | I2C/SPI |
温度/湿度 | SI7021 | I2C |
压力/温度 | MPL115A2 | I2C |
温度/湿度/压力 | BME280 | I2C/SPI |
压力 | BMP085/BMP180 | I2C |
压力 | BMP388 | I2C/SPI |
空气质量 | CCS811 | I2C |
CO2 | SCD4X | I2C |
红外热像仪 | MLX90640 | I2C |
紫外线/红外线/环境光 | SI1145 | I2C |
电流/功率监视器 | INA260 | I2C |
射频收发器 | NRF24L01 | SPI |
绝对方向 | BNO055 | I2C/UART |
GPS | MT3339 | I2C/SPI/UART |
磁性 | HMC5883 | I2C |
陀螺仪 | L3GD20 | I2C/SPI |
磁力计 | LIS2MDL | I2C/SPI |
加速度计/磁力计 | LSM303 | I2C |
加速度计/陀螺仪 | LSM6DS | I2C/SPI |
加速度计/磁力计/陀螺仪 | LSM9DS | I2C/SPI |
4 位 7 段显示器 | TM1637 | 数字 |
本部分将指导您向此库添加新的驱动程序。以 SHT3x 为例。
首先,让我们概述一下主存储库的源树。 MadDrivers
是一个 Swift 包。 您会找到所有驱动程序的源代码、示例项目、清单文件和其他文件。
Sources
:设备驱动程序代码。Examples
:每个设备的简单演示,可帮助您入门。Tests
:设备驱动程序的测试。Package.swift
:包名称及其内容。Package.mmp
:MadMachine 项目文件。├── MadDrivers
│ ├── Sources
│ │ ├── SHT3x
│ │ │ ├── SHT3x.swift
│ ├── Examples
│ │ ├── SHT3x
│ │ │ ├── ReadValues
│ ├── Tests
│ │ ├── SHT3xTests
│ ├── Package.swift
│ ├── Package.mmp
│ ├── ...
要添加您的驱动程序,您将
Sources
中创建一个新文件夹 SHT3x
。 其中的每个文件夹都与一个设备匹配。SHT3x
中创建一个名为 SHT3x.swift
的 swift 文件。 此文件存储用于配置传感器的代码。Package.swift
,如下所示。// swift-tools-version: 5.9
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "MadDrivers",
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "MadDrivers",
targets: [
"SGP30",
"SHT3x",
"ST7789"
]),
.library(name: "SGP30", targets: ["SGP30"]),
.library(name: "SHT3x", targets: ["SHT3x"]),
.library(name: "ST7789", targets: ["ST7789"]),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
.package(url: "https://github.com/madmachineio/SwiftIO.git", branch: "main"),
.package(url: "https://github.com/apple/swift-numerics", from: "1.0.0")
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "SGP30",
dependencies: ["SwiftIO",
.product(name: "RealModule", package: "swift-numerics")]),
.target(
name: "SHT3x",
dependencies: ["SwiftIO"]),
.target(
name: "ST7789",
dependencies: ["SwiftIO"]),
]
)
根据传感器的数据表编写传感器的代码。 同时,您可以找到制造商或其他人员创建的许多驱动程序作为参考。
在文件夹 Examples
中,创建一个新文件夹 SHT3x
以存储演示项目。
信息:顺便说一句,我们在编写代码时为每个传感器添加了测试,这将防止我们出现一些拼写错误和明显的错误。 您也可以跳过它。 如果您想尝试一下,需要注意的一件事是用于测试的 SwiftIO
库来自分支 mock
。 在进行测试时,您需要更改其版本。 至于如何编写测试,您可以参考 SHT3xTests。 它在于假设来自传感器的值并计算您的方法应该产生的结果。