概述
既然前面一篇文章说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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复