mqtt(9):gobot 开发IOT系统,使用arduino Raspberry ESP8266 等进行设备控制

前言


关于 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

博主地址是:http://blog.csdn.net/freewebsys

发布了624 篇原创文章 · 获赞 259 · 访问量 208万+

猜你喜欢

转载自blog.csdn.net/freewebsys/article/details/89212557