我是靠谱客的博主 朴实巨人,最近开发中收集的这篇文章主要介绍aws篇3 go语言如何publish message 到iot的MQTT,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

既然前面一篇文章说python 可以连接 MQTT 并 publish与subsribe成功。
那么go语言也可以,只是比较麻烦或者说有很多细节要注意。
1、python采用的是官方的库 aws-iot-device-sdk-python 连接到的MQTT
go语言采用的是 是这个包  github.com/eclipse/paho.mqtt.golang
2、新建一个go项目库,在项目文件夹下新建 .aws文件夹
再新建两个文件congfig和credentials。
config文件内容如下:
[default]
region = cn-north-1
output = json
credentials文件里面内容如下【点击aws控制台,右上角→我的安全凭证→访问密钥 ID 新建一个或默认你的用户名这个,生成一个密钥,填写如下格式】:
[default]
aws_access_key_id = xxxx
aws_secret_access_key = xxxx

3、直接上测试代码

package main

import (
	"crypto/tls"
	"fmt"
	MQTT "github.com/eclipse/paho.mqtt.golang"
	"log"
	"time"
)

func main() {
	cer, err := tls.LoadX509KeyPair("python07.cert.pem", "python07.private.key")
	//fmt.Println("cer==", cer)
	check(err)

	cid := "basicPubSub"
	host := "xxx.ats.iot.cn-north-1.amazonaws.com.cn"
	port := 8883

	// AutoReconnect option is true by default
	// CleanSession option is true by default
	// KeepAlive option is 30 seconds by default
	connOpts := MQTT.NewClientOptions()
	// This line is different, we use the constructor function instead of creating the instance ourselves.
	connOpts.SetClientID(cid)
	connOpts.SetMaxReconnectInterval(1 * time.Second)
	connOpts.SetTLSConfig(&tls.Config{Certificates: []tls.Certificate{cer}})

	//path := "/mqtt"

	brokerURL := fmt.Sprintf("tcps://%s:%d", host, port)
	connOpts.AddBroker(brokerURL)

	mqttClient := MQTT.NewClient(connOpts)
	if token := mqttClient.Connect(); token.Wait() && token.Error() != nil {
		panic(token.Error())
	}
	log.Println("[MQTT] Connected")
	payload := `{
    "state": {
        "desired" : {
            "color" : { "r" : 11 },
            "engine" : "ON"
        }
    }
}`
	fmt.Println("Sending payload.", payload)
	//
	for {
		if token := mqttClient.Publish("sdk/test/Python", 0, false, payload); token.Wait() && token.Error() != nil {
			log.Fatalf("failed to send update: %v", token.Error())
		}
		fmt.Println(payload)
		fmt.Println("Sending Successfully.")
		time.Sleep(1 * time.Second)
	}
	

}

func check(err error) {
	if err != nil {
		panic(err)
	}
}

注意事项:

①tls.LoadX509KeyPair("python07.cert.pem", "python07.private.key")

从上一篇文章里面的那个文件夹里面拷贝出来,放到go语言项目文件夹下。

②客户端id   cid := "basicPubSub" 和  topic主题  sdk/test/Python

要aws-iot策略里面允许。要保持一致,要一样。

点击 物品 →证书→策略→编辑json格式查看与修改。【这里是最重要的,理解】

允许客户端idbasicPubSub 连接。允许publish与subsribe 主题 sdk/test/Python

如果要subsribe 主题,如下代码

	var callback MQTT.MessageHandler = func(client MQTT.Client, msg MQTT.Message) {
		fmt.Printf("TOPIC: %sn", msg.Topic())
		fmt.Printf("MSG: %sn", msg.Payload())
	}

	if token := mqttClient.Subscribe("sdk/test/Python", 0, callback); token.Wait() && token.Error() != nil {
		log.Fatalf("failed to send update: %v", token.Error())
	}
	time.Sleep(10 * time.Second)

最后

以上就是朴实巨人为你收集整理的aws篇3 go语言如何publish message 到iot的MQTT的全部内容,希望文章能够帮你解决aws篇3 go语言如何publish message 到iot的MQTT所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部