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  }