Add ESP32 Serial support to SwiftyCar
This commit is contained in:
@@ -64,6 +64,15 @@
|
|||||||
"version": "1.12.0"
|
"version": "1.12.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"package": "Swift2dCar",
|
||||||
|
"repositoryURL": "https://vato.ddns.net/gitlab/vato007/swift2dcar.git",
|
||||||
|
"state": {
|
||||||
|
"branch": "master",
|
||||||
|
"revision": "970aac902531408614db0a37a7300e9373dafb50",
|
||||||
|
"version": null
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"package": "SwiftRPLidar",
|
"package": "SwiftRPLidar",
|
||||||
"repositoryURL": "https://vato.ddns.net/gitlab/vato007/swiftrplidar.git",
|
"repositoryURL": "https://vato.ddns.net/gitlab/vato007/swiftrplidar.git",
|
||||||
@@ -77,8 +86,8 @@
|
|||||||
"package": "SwiftSerial",
|
"package": "SwiftSerial",
|
||||||
"repositoryURL": "https://vato.ddns.net/gitlab/vato007/SwiftSerial.git",
|
"repositoryURL": "https://vato.ddns.net/gitlab/vato007/SwiftSerial.git",
|
||||||
"state": {
|
"state": {
|
||||||
"branch": "dtr_support",
|
"branch": "master",
|
||||||
"revision": "2cb65bc2ff508acc05c165d1a05381cc681f7591",
|
"revision": "27a5d92aa00f6e91581389485994364e16bed2c5",
|
||||||
"version": null
|
"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/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://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/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"))
|
.package(url: "https://vato.ddns.net/gitlab/vato007/swift2dcar.git", .branch("master"))
|
||||||
],
|
],
|
||||||
targets: [
|
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.
|
// Targets can depend on other targets in this package, and on products in packages which this package depends on.
|
||||||
.target(
|
.target(
|
||||||
name: "SwiftyCar",
|
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(
|
.testTarget(
|
||||||
name: "SwiftyCarTests",
|
name: "SwiftyCarTests",
|
||||||
dependencies: ["SwiftyCar"]),
|
dependencies: ["SwiftyCar"]),
|
||||||
|
|||||||
@@ -8,16 +8,31 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import SwiftyGPIO
|
import SwiftyGPIO
|
||||||
import Swift2dCar
|
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"] {
|
if let value = ProcessInfo.processInfo.environment["CAR_VEHICLE"] {
|
||||||
switch value{
|
switch value{
|
||||||
case "CAR_2D":
|
case "VEHICLE_2D":
|
||||||
// Get car for rpi.
|
// Get car for rpi.
|
||||||
let pwms = SwiftyGPIO.hardwarePWMs(for:.RaspberryPi3)!
|
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])!)!)
|
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:
|
default:
|
||||||
return MockVehicle()
|
return MockVehicle()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ func doServer() throws {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
// Create a provider using the features we read.
|
// 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)
|
let trackingProvider = LidarProvider(lidar: lidar)
|
||||||
|
|
||||||
// Start the server and print its address once it has started.
|
// Start the server and print its address once it has started.
|
||||||
|
|||||||
Reference in New Issue
Block a user