Add ESP32 Serial support to SwiftyCar
This commit is contained in:
@@ -64,6 +64,15 @@
|
||||
"version": "1.12.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "Swift2dCar",
|
||||
"repositoryURL": "https://vato.ddns.net/gitlab/vato007/swift2dcar.git",
|
||||
"state": {
|
||||
"branch": "master",
|
||||
"revision": "970aac902531408614db0a37a7300e9373dafb50",
|
||||
"version": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "SwiftRPLidar",
|
||||
"repositoryURL": "https://vato.ddns.net/gitlab/vato007/swiftrplidar.git",
|
||||
@@ -77,8 +86,8 @@
|
||||
"package": "SwiftSerial",
|
||||
"repositoryURL": "https://vato.ddns.net/gitlab/vato007/SwiftSerial.git",
|
||||
"state": {
|
||||
"branch": "dtr_support",
|
||||
"revision": "2cb65bc2ff508acc05c165d1a05381cc681f7591",
|
||||
"branch": "master",
|
||||
"revision": "27a5d92aa00f6e91581389485994364e16bed2c5",
|
||||
"version": null
|
||||
}
|
||||
},
|
||||
|
||||
@@ -14,7 +14,7 @@ let package = Package(
|
||||
.package(url: "https://github.com/grpc/grpc-swift.git", from: "1.0.0-alpha.19"),
|
||||
.package(url: "https://github.com/uraimo/SwiftyGPIO.git", from: "1.0.0"),
|
||||
.package(url: "https://vato.ddns.net/gitlab/vato007/swiftrplidar.git", .branch("master")),
|
||||
.package(url: "https://vato.ddns.net/gitlab/vato007/SwiftSerial.git", .branch("dtr_support")),
|
||||
.package(url: "https://vato.ddns.net/gitlab/vato007/SwiftSerial.git", .branch("master")),
|
||||
.package(url: "https://vato.ddns.net/gitlab/vato007/swift2dcar.git", .branch("master"))
|
||||
],
|
||||
targets: [
|
||||
@@ -22,7 +22,12 @@ let package = Package(
|
||||
// Targets can depend on other targets in this package, and on products in packages which this package depends on.
|
||||
.target(
|
||||
name: "SwiftyCar",
|
||||
dependencies: ["SwiftyGPIO", .product(name: "GRPC", package: "grpc-swift"), "SwiftRPLidar", "SwiftSerial", "Swift2dCar"]),
|
||||
dependencies: [
|
||||
"SwiftyGPIO",
|
||||
.product(name: "GRPC", package: "grpc-swift"),
|
||||
"SwiftRPLidar",
|
||||
"SwiftSerial",
|
||||
"Swift2dCar"]),
|
||||
.testTarget(
|
||||
name: "SwiftyCarTests",
|
||||
dependencies: ["SwiftyCar"]),
|
||||
|
||||
@@ -8,16 +8,31 @@
|
||||
import Foundation
|
||||
import SwiftyGPIO
|
||||
import Swift2dCar
|
||||
import SwiftSerial
|
||||
|
||||
func getVehicle2D() throws -> Vehicle2D {
|
||||
func getVehicle2D() throws -> Vehicle2D? {
|
||||
// TODO: Clean up this factory, or see if we can get dependency injection working.
|
||||
if let value = ProcessInfo.processInfo.environment["CAR_VEHICLE"] {
|
||||
switch value{
|
||||
case "CAR_2D":
|
||||
case "VEHICLE_2D":
|
||||
// Get car for rpi.
|
||||
let pwms = SwiftyGPIO.hardwarePWMs(for:.RaspberryPi3)!
|
||||
|
||||
// Read the feature database.
|
||||
return try RPiVehicle2D(withThrottlePin: PWMHardwareServo(forPin: (pwms[0]?[.P18])!)!, withSteeringPin:PWMHardwareServo(forPin: (pwms[1]?[.P19])!)!)
|
||||
case "VEHICLE_SERIAL":
|
||||
// TODO: Get from environment variable. tty won't work in macos anyway.
|
||||
// We share the serialport object, as cu will block on macOS (required by SwiftSerial), so can't open 2 of the same port.
|
||||
let serialPort = SerialPort(path: "/dev/ttyUSB0")
|
||||
guard let throttlePin = Esp32ServoOutput(forChannel: 1, forPin: 14, onPort: serialPort) else {
|
||||
print("Failed to create throttle pin.")
|
||||
return nil
|
||||
}
|
||||
|
||||
guard let steeringPin = Esp32ServoOutput(forChannel: 2, forPin: 12, onPort: serialPort) else {
|
||||
print("Failed to create steering pin.")
|
||||
return nil
|
||||
}
|
||||
|
||||
return try RPiVehicle2D(withThrottlePin: PWMHardwareServo(forPin: throttlePin)!, withSteeringPin: PWMHardwareServo(forPin: steeringPin)!)
|
||||
default:
|
||||
return MockVehicle()
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ func doServer() throws {
|
||||
return false
|
||||
}
|
||||
// Create a provider using the features we read.
|
||||
let provider = try MotorProvider(vehicle: getVehicle2D())
|
||||
let provider = try MotorProvider(vehicle: getVehicle2D()!)
|
||||
let trackingProvider = LidarProvider(lidar: lidar)
|
||||
|
||||
// Start the server and print its address once it has started.
|
||||
|
||||
Reference in New Issue
Block a user