前言
关于 mqtt 相关文章分类:https://blog.csdn.net/freewebsys/article/category/8677221
本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/89212557
未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys
1,关于gobot
Gobot 是为机器人和物理计算所设计的一组 Go 语言库,提供在同一时间合并多个不同设备的简单且强大的解决方案。
官网网址
https://gobot.io/
github 项目地址:
https://github.com/hybridgroup/gobot
支持的硬件平台:
Arduino <=> Package
Audio <=> Package
Beaglebone Black <=> Package
Beaglebone PocketBeagle <=> Package
Bluetooth LE <=> Package
C.H.I.P <=> Package
C.H.I.P Pro <=> Package
Digispark <=> Package
DJI Tello <=> Package
DragonBoard <=> Package
ESP8266 <=> Package
GoPiGo 3 <=> Package
Intel Curie <=> Package
Intel Edison <=> Package
Intel Joule <=> Package
Joystick <=> Package
Keyboard <=> Package
Leap Motion <=> Package
MavLink <=> Package
MegaPi <=> Package
Microbit <=> Package
MQTT <=> Package
NATS <=> Package
Neurosky <=> Package
OpenCV <=> Package
Particle <=> Package
Parrot ARDrone 2.0 <=> Package
Parrot Bebop <=> Package
Parrot Minidrone <=> Package
Pebble <=> Package
Raspberry Pi <=> Package
Sphero <=> Package
Sphero BB-8 <=> Package
Sphero Ollie <=> Package
Sphero SPRK+ <=> Package
Tinker Board <=> Package
UP2 <=> Package
还支持 gpio aio i2c spi
2,安装视频中的使用
视频介绍,资料比较少。
http://www.elecfans.com/d/769169.html
https://software.intel.com/en-us/videos/high-performance-iot-using-go-and-gobot?language=es
视频中的代码:(在demos) 文件夹下面:
https://github.com/deadprogram/fosdem2017
要搭建环境需要安装 gobot
go get -v -u gobot.io/x/gobot
3,第一个arduno 亮灯hello world
package main
import (
"time"
"gobot.io/x/gobot"
"gobot.io/x/gobot/drivers/gpio"
"gobot.io/x/gobot/platforms/firmata"
)
func main() {
a := firmata.NewAdaptor("/dev/ttyACM0")//连接 USB虚拟的串行口 USB Communication Device Class - Abstract Control Model
led := gpio.NewLedDriver(a, "13")// gpio 13
work := func() {
gobot.Every(1*time.Second, func() { // 每次间隔 1秒执行
led.Toggle() //开关变化
})
}
robot := gobot.NewRobot("blinkBot",
[]gobot.Connection{a},
[]gobot.Device{led},
work,
)
robot.Start()
}
4, arduno button led 开关控制led灯
使用 button 开关按钮 控制 led 设备。
package main
import (
"gobot.io/x/gobot"
"gobot.io/x/gobot/drivers/gpio"
"gobot.io/x/gobot/platforms/firmata"
)
func main() {
firmataAdaptor := firmata.NewAdaptor("/dev/ttyACM0")
led := gpio.NewLedDriver(firmataAdaptor, "2")
button := gpio.NewButtonDriver(firmataAdaptor, "3")
work := func() {
button.On(gpio.ButtonPush, func(data interface{}) {
led.Toggle()
})
}
robot := gobot.NewRobot("buttonBot",
[]gobot.Connection{firmataAdaptor},
[]gobot.Device{led, button},
work,
)
robot.Start()
}
5,使用 intel edison 开发板用 mqtt 收集 sensors 数据
使用 mqtt 收集 传感器数据。
// How to run:
// ./sensors <MQTT SERVER>
package main
import (
"bytes"
"encoding/binary"
"fmt"
"os"
"sync/atomic"
"time"
"gobot.io/x/gobot"
"gobot.io/x/gobot/drivers/aio"
"gobot.io/x/gobot/drivers/i2c"
"gobot.io/x/gobot/platforms/intel-iot/edison"
"gobot.io/x/gobot/platforms/mqtt"
)
var light atomic.Value
//var light int = 0
func main() {
a := edison.NewAdaptor()
lux := aio.NewAnalogSensorDriver(a, "0")
screen := i2c.NewGroveLcdDriver(a)
server := mqtt.NewAdaptor(os.Args[1], "sensors")
light.Store(int(0))
work := func() {
lux.On(aio.Data, func(data interface{}) {
lvl := data.(int)
light.Store(lvl)
})
gobot.Every(500*time.Millisecond, func() {
buf := new(bytes.Buffer)
val := light.Load().(int)
binary.Write(buf, binary.LittleEndian, uint16(val))
server.Publish("miniluminado/sensors/light", buf.Bytes())
})
gobot.Every(250*time.Millisecond, func() {
lvl := light.Load().(int)
screen.Clear()
screen.Home()
msg := fmt.Sprintf("%d", lvl)
screen.Write(msg)
switch {
case lvl > 200:
screen.SetRGB(0, 255, 0) // green
case lvl > 100:
screen.SetRGB(0, 0, 255) // blue
default:
screen.SetRGB(255, 0, 0) // red
}
})
}
robot := gobot.NewRobot("sensors",
[]gobot.Connection{a, server},
[]gobot.Device{lux, screen},
work,
)
robot.Start()
}
6,总结
非常棒的项目,golang 是比较简单高效的语言,通过这个程序可以进行 智能设备的开发了。
同时golang 还可以进行打包。可以静态部署。一个 几MB 的文件就能实现功能了。超级的好。
未来说不定有又是一个方向呢。
gobot 是个不错的项目,同时 k3s 也是针对小型设备开发的。
都非常不错。官方上面的设备驱动都已经开发好了。
本文的原文连接是:
https://blog.csdn.net/freewebsys/article/details/89212557