Go语言编写MQTT客户端,连接百度云IOT物接入

MQTT是物联网常用的协议,服务器一般用云平台(自建也可以),而客户端一边是物联网的设备,另一边是为设备服务的“客户端”(服务器),为设备服务的客户端一般用Java Python等编写,并不多见Go语言,因此写一个示例

Go语言我也不太熟练

安装

go env -w GOPROXY=https://goproxy.cn,direct
go env -w GO111MODULE=on
go get github.com/eclipse/paho.mqtt.golang
go get github.com/gorilla/websocket
go get golang.org/x/net/proxy

在这里插入图片描述

编写源代码

在gopath下src创建一个自己的包,创建一个main.go

package main

import (
	"fmt"
	"sync"
	"time"

	mqtt "github.com/eclipse/paho.mqtt.golang"
)

const broker = "tcp://你的服务器.mqtt.iot.gz.baidubce.com:1883"
const username = "你的服务器/client"
const password = "UJq**密码**msq"
const ClientID = "随意"

//message的回调
var onMessage mqtt.MessageHandler = func(client mqtt.Client, msg mqtt.Message) {
	fmt.Printf("[%s] -> %s\n", msg.Topic(), msg.Payload())
}

var wg sync.WaitGroup
var client mqtt.Client

func main() {
	//连接MQTT服务器
	mqttConnect()
	defer client.Disconnect(250) //注册销毁

	wg.Add(1)
	go mqttSubScribe("test1")
	wg.Add(1)
	go testPublish()
	wg.Wait()
}
func mqttConnect() {
	//配置
	clinetOptions := mqtt.NewClientOptions().AddBroker(broker).SetUsername(username).SetPassword(password)
	clinetOptions.SetClientID(ClientID)
	clinetOptions.SetConnectTimeout(time.Duration(60) * time.Second)
	//连接
	client = mqtt.NewClient(clinetOptions)
	//客户端连接判断
	if token := client.Connect(); token.WaitTimeout(time.Duration(60)*time.Second) && token.Wait() && token.Error() != nil {
		panic(token.Error())
	}
}

func mqttSubScribe(topic string) {
	defer wg.Done()
	for {
		token := client.Subscribe(topic, 1, onMessage)
		token.Wait()
	}
}

//测试 3秒发送一次,然后自己接收
func testPublish() {
	defer wg.Done()
	for {
		client.Publish("test1", 1, false, "TEST")
		time.Sleep(time.Duration(3) * time.Second)
	}
}

用命令行,需要要整一下gomod

go mod init
go mod tidy (-v)
go mod verify
go mod vendor (-v)

Goland的Modules使用方式

在这里插入图片描述
添加一个go build的配置,直接运行就会自动安装包
在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值