Go 언어 × AWSIoT × Raspberrypi 해 보았습니다.
10974 단어 5awsIoTmqttRaspberryPi
그 때, 그 밖에도 통신을 하는 방법 있을까라고 찾아 보았는데, Go에서도 할 수 있을 것이었기 때문에 시험해 보기로 했습니다.
기사 자체는 환경 구축 포함한 메모 정도에.
참고 페이지
다음 페이지를 참고로 하고 있습니다.
golang+MQTT로 AWS IoT에 Pubslish
Raspberry Pi에 Go 언어 설치
AWS IoT × Raspberrypi에서 한 일 메모
Raspberrypi 측에서 Go 개발 환경 설정
Go를 설치. (모든 버전에서)
$ wget https://storage.googleapis.com/golang/go1.9.linux-armv6l.tar.gz
$ sudo tar -C /usr/local -xzf go1.9.linux-armv6l.tar.gz
설치 확인과 버전 확인을 실시한다.
$ ls -l /usr/local/go
$ cat /usr/local/go/VERSION
경로 추가.
~/.bashrc 파일 끝에 다음을 추가합니다.
export PATH=$PATH:/usr/local/go/bin
설정한 경로 확인
$ source .bashrc
$ echo $PATH
$ which go
필수 라이브러리 설치
$ go get github.com/eclipse/paho.mqtt.golang
$ go get golang.org/x/net/websocket
$ go get golang.org/x/net/proxy
소스 코드
이번은 시험이므로, 참조 사이트의 것을 그대로 사용.
GoPath 등의 설정은 임의로 설정해 주십시오.
(이번은 알기 쉽도록 home 바로 아래에 모든 파일을 넣은 글을 쓰고 있습니다)
main.go
package main
import (
"crypto/tls"
"crypto/x509"
"fmt"
"io/ioutil"
MQTT "github.com/eclipse/paho.mqtt.golang"
)
func NewTLSConfig() *tls.Config {
// CA証明書を設定
certpool := x509.NewCertPool()
pemCerts, err := ioutil.ReadFile("xxxxxxxxx.pem")
if err == nil {
certpool.AppendCertsFromPEM(pemCerts)
}
// クライアント証明書とキーペアを設定
cert, err := tls.LoadX509KeyPair("xxxxxxxxx-certificate.pem.crt", "xxxxxxxxx-private.pem.key")
if err != nil {
panic(err)
}
cert.Leaf, err = x509.ParseCertificate(cert.Certificate[0])
if err != nil {
panic(err)
}
// config設定
return &tls.Config{
RootCAs: certpool,
ClientAuth: tls.NoClientCert,
ClientCAs: nil,
InsecureSkipVerify: true,
Certificates: []tls.Certificate{cert},
}
}
var f MQTT.MessageHandler = func(client MQTT.Client, msg MQTT.Message) {
fmt.Printf("TOPIC: %s\n", msg.Topic())
fmt.Printf("MSG: %s\n", msg.Payload())
}
func main() {
tlsconfig := NewTLSConfig()
opts := MQTT.NewClientOptions()
opts.AddBroker("ssl://xxxxxxxxxxxxxxxxxxx.amazonaws.com:8883")
opts.SetClientID("ssl-sample").SetTLSConfig(tlsconfig)
opts.SetDefaultPublishHandler(f)
// 接続をする
c := MQTT.NewClient(opts)
if token := c.Connect(); token.Wait() && token.Error() != nil {
panic(token.Error())
}
fmt.Println("AWS IoT Connect Success")
if token := c.Publish("$aws/things/ESP32/shadow/update", 0, false,
`{"state":{"reported":{"welcome":"I am gopher!!!"}}}`); token.Wait() && token.Error() != nil {
panic(token.Error())
}
fmt.Println("Message Publish Success")
// 切断
c.Disconnect(250)
}
실행 결과
이런 느낌으로 통신 할 수 있었던 것 같습니다.
Go는 환경 구축 편이므로 살아납니다.
Reference
이 문제에 관하여(Go 언어 × AWSIoT × Raspberrypi 해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ikeponsu/items/f27c641cd39ed943044d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Go를 설치. (모든 버전에서)
$ wget https://storage.googleapis.com/golang/go1.9.linux-armv6l.tar.gz
$ sudo tar -C /usr/local -xzf go1.9.linux-armv6l.tar.gz
설치 확인과 버전 확인을 실시한다.
$ ls -l /usr/local/go
$ cat /usr/local/go/VERSION
경로 추가.
~/.bashrc 파일 끝에 다음을 추가합니다.
export PATH=$PATH:/usr/local/go/bin
설정한 경로 확인
$ source .bashrc
$ echo $PATH
$ which go
필수 라이브러리 설치
$ go get github.com/eclipse/paho.mqtt.golang
$ go get golang.org/x/net/websocket
$ go get golang.org/x/net/proxy
소스 코드
이번은 시험이므로, 참조 사이트의 것을 그대로 사용.
GoPath 등의 설정은 임의로 설정해 주십시오.
(이번은 알기 쉽도록 home 바로 아래에 모든 파일을 넣은 글을 쓰고 있습니다)
main.go
package main
import (
"crypto/tls"
"crypto/x509"
"fmt"
"io/ioutil"
MQTT "github.com/eclipse/paho.mqtt.golang"
)
func NewTLSConfig() *tls.Config {
// CA証明書を設定
certpool := x509.NewCertPool()
pemCerts, err := ioutil.ReadFile("xxxxxxxxx.pem")
if err == nil {
certpool.AppendCertsFromPEM(pemCerts)
}
// クライアント証明書とキーペアを設定
cert, err := tls.LoadX509KeyPair("xxxxxxxxx-certificate.pem.crt", "xxxxxxxxx-private.pem.key")
if err != nil {
panic(err)
}
cert.Leaf, err = x509.ParseCertificate(cert.Certificate[0])
if err != nil {
panic(err)
}
// config設定
return &tls.Config{
RootCAs: certpool,
ClientAuth: tls.NoClientCert,
ClientCAs: nil,
InsecureSkipVerify: true,
Certificates: []tls.Certificate{cert},
}
}
var f MQTT.MessageHandler = func(client MQTT.Client, msg MQTT.Message) {
fmt.Printf("TOPIC: %s\n", msg.Topic())
fmt.Printf("MSG: %s\n", msg.Payload())
}
func main() {
tlsconfig := NewTLSConfig()
opts := MQTT.NewClientOptions()
opts.AddBroker("ssl://xxxxxxxxxxxxxxxxxxx.amazonaws.com:8883")
opts.SetClientID("ssl-sample").SetTLSConfig(tlsconfig)
opts.SetDefaultPublishHandler(f)
// 接続をする
c := MQTT.NewClient(opts)
if token := c.Connect(); token.Wait() && token.Error() != nil {
panic(token.Error())
}
fmt.Println("AWS IoT Connect Success")
if token := c.Publish("$aws/things/ESP32/shadow/update", 0, false,
`{"state":{"reported":{"welcome":"I am gopher!!!"}}}`); token.Wait() && token.Error() != nil {
panic(token.Error())
}
fmt.Println("Message Publish Success")
// 切断
c.Disconnect(250)
}
실행 결과
이런 느낌으로 통신 할 수 있었던 것 같습니다.
Go는 환경 구축 편이므로 살아납니다.
Reference
이 문제에 관하여(Go 언어 × AWSIoT × Raspberrypi 해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ikeponsu/items/f27c641cd39ed943044d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ go get github.com/eclipse/paho.mqtt.golang
$ go get golang.org/x/net/websocket
$ go get golang.org/x/net/proxy
이번은 시험이므로, 참조 사이트의 것을 그대로 사용.
GoPath 등의 설정은 임의로 설정해 주십시오.
(이번은 알기 쉽도록 home 바로 아래에 모든 파일을 넣은 글을 쓰고 있습니다)
main.go
package main
import (
"crypto/tls"
"crypto/x509"
"fmt"
"io/ioutil"
MQTT "github.com/eclipse/paho.mqtt.golang"
)
func NewTLSConfig() *tls.Config {
// CA証明書を設定
certpool := x509.NewCertPool()
pemCerts, err := ioutil.ReadFile("xxxxxxxxx.pem")
if err == nil {
certpool.AppendCertsFromPEM(pemCerts)
}
// クライアント証明書とキーペアを設定
cert, err := tls.LoadX509KeyPair("xxxxxxxxx-certificate.pem.crt", "xxxxxxxxx-private.pem.key")
if err != nil {
panic(err)
}
cert.Leaf, err = x509.ParseCertificate(cert.Certificate[0])
if err != nil {
panic(err)
}
// config設定
return &tls.Config{
RootCAs: certpool,
ClientAuth: tls.NoClientCert,
ClientCAs: nil,
InsecureSkipVerify: true,
Certificates: []tls.Certificate{cert},
}
}
var f MQTT.MessageHandler = func(client MQTT.Client, msg MQTT.Message) {
fmt.Printf("TOPIC: %s\n", msg.Topic())
fmt.Printf("MSG: %s\n", msg.Payload())
}
func main() {
tlsconfig := NewTLSConfig()
opts := MQTT.NewClientOptions()
opts.AddBroker("ssl://xxxxxxxxxxxxxxxxxxx.amazonaws.com:8883")
opts.SetClientID("ssl-sample").SetTLSConfig(tlsconfig)
opts.SetDefaultPublishHandler(f)
// 接続をする
c := MQTT.NewClient(opts)
if token := c.Connect(); token.Wait() && token.Error() != nil {
panic(token.Error())
}
fmt.Println("AWS IoT Connect Success")
if token := c.Publish("$aws/things/ESP32/shadow/update", 0, false,
`{"state":{"reported":{"welcome":"I am gopher!!!"}}}`); token.Wait() && token.Error() != nil {
panic(token.Error())
}
fmt.Println("Message Publish Success")
// 切断
c.Disconnect(250)
}
실행 결과
이런 느낌으로 통신 할 수 있었던 것 같습니다.
Go는 환경 구축 편이므로 살아납니다.
Reference
이 문제에 관하여(Go 언어 × AWSIoT × Raspberrypi 해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ikeponsu/items/f27c641cd39ed943044d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Go 언어 × AWSIoT × Raspberrypi 해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ikeponsu/items/f27c641cd39ed943044d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)