gobot.io/x/gobot/v2@v2.1.0/examples/ollie_mqtt.go (about) 1 //go:build example 2 // +build example 3 4 // 5 // Do not build by default. 6 7 package main 8 9 import ( 10 "os" 11 "strconv" 12 "time" 13 14 "gobot.io/x/gobot/v2" 15 "gobot.io/x/gobot/v2/platforms/ble" 16 "gobot.io/x/gobot/v2/platforms/mqtt" 17 "gobot.io/x/gobot/v2/platforms/sphero/ollie" 18 ) 19 20 const ( 21 FRENTE = 0 22 DERECHA = 90 23 ATRAS = 180 24 IZQUIERDA = 270 25 ) 26 27 func main() { 28 bleAdaptor := ble.NewClientAdaptor(os.Args[1]) 29 ollie := ollie.NewDriver(bleAdaptor) 30 31 mqttAdaptor := mqtt.NewAdaptor("tcp://iot.eclipse.org:1883", "ollie") 32 33 work := func() { 34 ollie.SetRGB(255, 0, 255) 35 36 mqttAdaptor.On("sensores/dial", func(msg mqtt.Message) { 37 val, _ := strconv.Atoi(string(msg.Payload())) 38 39 if val > 2000 { 40 ollie.SetRGB(0, 255, 0) 41 return 42 } 43 if val > 1000 { 44 ollie.SetRGB(255, 255, 0) 45 return 46 } 47 ollie.SetRGB(255, 0, 0) 48 }) 49 50 mqttAdaptor.On("rover/frente", func(msg mqtt.Message) { 51 ollie.Roll(40, FRENTE) 52 gobot.After(1*time.Second, func() { 53 ollie.Stop() 54 }) 55 }) 56 57 mqttAdaptor.On("rover/derecha", func(msg mqtt.Message) { 58 ollie.Roll(40, DERECHA) 59 gobot.After(1*time.Second, func() { 60 ollie.Stop() 61 }) 62 }) 63 64 mqttAdaptor.On("rover/atras", func(msg mqtt.Message) { 65 ollie.Roll(40, ATRAS) 66 gobot.After(1*time.Second, func() { 67 ollie.Stop() 68 }) 69 }) 70 71 mqttAdaptor.On("rover/izquierda", func(msg mqtt.Message) { 72 ollie.Roll(40, IZQUIERDA) 73 gobot.After(1*time.Second, func() { 74 ollie.Stop() 75 }) 76 }) 77 } 78 79 robot := gobot.NewRobot("ollieBot", 80 []gobot.Connection{bleAdaptor, mqttAdaptor}, 81 []gobot.Device{ollie}, 82 work, 83 ) 84 85 robot.Start() 86 }