/
main.go
73 lines (65 loc) · 1.47 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package main
import (
"crypto/tls"
"crypto/x509"
"log"
"os"
"github.com/open-farms/bot/pkg/move"
"github.com/open-farms/bot/pkg/move/controls"
"github.com/open-farms/bot/pkg/pubsub"
"gobot.io/x/gobot"
"gobot.io/x/gobot/platforms/keyboard"
)
func setupTLS(pemfile string) *tls.Config {
caPEM, err := os.ReadFile(pemfile)
if err != nil {
panic(err)
}
roots := x509.NewCertPool()
ok := roots.AppendCertsFromPEM(caPEM)
if !ok {
panic("failed to parse root certificate")
}
return &tls.Config{RootCAs: roots}
}
func main() {
// cert := setupTLS("./config/certs/ca.pem")
client := pubsub.NewClient(pubsub.PUBLIC_BROKER, 1883, nil)
k := controls.NewKeyboard(client)
ctl := move.New(k)
work := func() {
k.On(keyboard.Key, func(data interface{}) {
key := data.(keyboard.KeyEvent)
switch key.Key {
case keyboard.W:
ctl.Move(move.Forward)
case keyboard.ArrowUp:
ctl.Move(move.Forward)
case keyboard.S:
ctl.Move(move.Backward)
case keyboard.ArrowDown:
ctl.Move(move.Backward)
case keyboard.A:
ctl.Move(move.Left)
case keyboard.ArrowLeft:
ctl.Move(move.Left)
case keyboard.D:
ctl.Move(move.Right)
case keyboard.ArrowRight:
ctl.Move(move.Right)
case keyboard.Spacebar:
ctl.Move(move.Stop)
case keyboard.Escape:
ctl.Move(move.Stop)
}
})
}
robot := gobot.NewRobot("keyboard",
[]gobot.Connection{},
[]gobot.Device{k.Driver},
work,
)
if err := robot.Start(); err != nil {
log.Fatal(err)
}
}