MadDrivers

build test codecov Discord twitter

这个基于 SwiftIOMadDrivers 库提供了一种简单的方式来使用各种设备。您可以直接使用相关的类来读取或写入数据,而无需担心通信细节。

注意:此库旨在简化您对所有设备的编程方式,因此一些不常见的错误或罕见情况没有被考虑。如果发生故障,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 为例

  1. 创建 一个可执行项目 ReadSHT3x

  2. 打开项目并打开文件 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"]),
    ]
)
  1. 在文件 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)
}
  1. 如果需要更多驱动程序,您可以重复上面的步骤 2 和 3。

贡献

首先,非常感谢您抽出时间做出贡献🥰! 欢迎任何更正、增强和补充!

如果您想使用 MadDrivers 中未包含的某些传感器,您可以 提出问题 或从您自己的分支 创建拉取请求

如何从我自己的分支贡献

  1. 通过单击此页面右上角的“Fork”按钮,将 MadDrivers 存储库 Fork 到您的 GitHub 帐户。

  2. 将存储库 克隆 (Clone) 到您的本地计算机。

git clone https://github.com/YOUR-USERNAME/MadDrivers.git
  1. 进入您刚刚克隆的目录。
cd MadDrivers
  1. 从 main 分支 创建 (Create) 一个新的分支 feature/add_sht3x 以进行更改。
git checkout -b feature/add_sht3x
  1. 开始处理您的驱动程序并使用传感器测试您的代码。查看 驱动程序指南 以获取一些额外信息。

  2. 实现驱动程序后,将您的更改 推送 (Push) 到您的存储库。

git push --set-upstream origin feature/add_sht3x
  1. 转到您的 Forked 存储库,然后单击按钮 Compare & pull request 以将您的更改提议到上游存储库。

  2. 点击按钮 Create pull request

  3. 发送您的请求后,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 包。 您会找到所有驱动程序的源代码、示例项目、清单文件和其他文件。

├── MadDrivers
│   ├── Sources
│   │   ├── SHT3x
│   │   │   ├── SHT3x.swift
│   ├── Examples
│   │   ├── SHT3x
│   │   │   ├── ReadValues
│   ├── Tests
│   │   ├── SHT3xTests
│   ├── Package.swift
│   ├── Package.mmp
│   ├── ...

要添加您的驱动程序,您将

  1. 在文件夹 Sources 中创建一个新文件夹 SHT3x。 其中的每个文件夹都与一个设备匹配。
  2. 在文件夹 SHT3x 中创建一个名为 SHT3x.swift 的 swift 文件。 此文件存储用于配置传感器的代码。
  3. 将新目标 SHT3x 添加到文件 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"]),
    ]
)
  1. 根据传感器的数据表编写传感器的代码。 同时,您可以找到制造商或其他人员创建的许多驱动程序作为参考。

  2. 在文件夹 Examples 中,创建一个新文件夹 SHT3x 以存储演示项目。

信息:顺便说一句,我们在编写代码时为每个传感器添加了测试,这将防止我们出现一些拼写错误和明显的错误。 您也可以跳过它。 如果您想尝试一下,需要注意的一件事是用于测试的 SwiftIO 库来自分支 mock。 在进行测试时,您需要更改其版本。 至于如何编写测试,您可以参考 SHT3xTests。 它在于假设来自传感器的值并计算您的方法应该产生的结果。