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: %s\n", msg.Topic())
		fmt.Printf("MSG: %s\n", 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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AWS IoT是一种完全托管的云服务,用于将物联网IoT)设备连接到Amazon云平台,实现设备的管理和数据通信。而EC2(Elastic Compute Cloud)是亚马逊AWS云计算服务的一部分,为用户提供可伸缩的虚拟服务器环境。 要实现AWS IoT MQTT设备接入EC2,首先需要将MQTT设备注册到AWS IoT平台。在AWS IoT中,我们可以创建设备证书和密钥,然后将其下载到设备上。设备使用这些证书和密钥来与AWS IoT平台建立安全的连接。 然后,在EC2中,我们需要设置一个运行MQTT Broker的服务器。可以选择使用Mosquitto等开源软件或AWS IoT Core来搭建MQTT Broker。根据实际需求,我们可以选择搭建独立的MQTT Broker服务器,或者在现有的EC2实例中运行。 接下来,我们需要为EC2实例配置安全组规则,以允许设备通过MQTT协议与EC2进行通信。可以为设备定义入站和出站规则,以确保连接的安全性。 完成这些配置后,设备就可以使用其证书和密钥通过MQTT协议与EC2建立连接了。设备可以发布数据到指定的主题(topic),或订阅感兴趣的主题,接收其他设备或EC2发布的消息。 通过AWS IoT MQTT设备接入EC2,可以实现设备和云端之间的实时数据传输和通信。设备可以将传感器数据、状态信息等上传到EC2进行处理和分析,也可以接收来自EC2的指令和控制信息。 总之,AWS IoT MQTT设备接入EC2是一种有效的方式,将物联网设备连接到云计算环境中,实现设备管理和数据交换。同时,它还提供了强大的安全性和灵活性,满足不同场景下的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值