Como fazer bridge do Mosiquitto MQTT Broker para o AWS IoT com placas Arduino

Gateways estão presentes na maioria das discussões de arquitetura, tanto em ambientes de industrial IoT quanto em casas conectadas. Hoje, mostraremos como implementar o recurso de Bridge do agente Mosquitto para possibilitar o uso de gateways por meio de mensagens MQTT, configurando a troca de dados bidirecional com o AWS IoT Core. Isso permitirá que seu dispositivo se comunique localmente com o agente Mosquitto e com o AWS IoT Core para se beneficiar do poder da nuvem AWS.
Neste tutorial, o Wio Terminal será usado como exemplo para mostrar passo a passo como fazer bridge do Mosquitto MQTT Broker para o AWS IoT.
Por que fazer bridge do MQTT Broker para o AWS IoT
Se você tem implantações antigas de IoT, pode já ter dispositivos conectados a um broker MQTT, como o Mosquitto. Nesse caso, seu agente MQTT pode estar muito próximo da localização do sensor implantado (broker MQTT local) ou em um local remoto como a nuvem. Você pode configurar o gateway local para se comunicar com o AWS IoT Core conforme o diagrama a seguir.

Primeiros Passos
Construindo o broker AWS Mosquitto usando Docker
Passo 1: Configurar a conta AWS
Acesse o AWS e configure a conta.
Navegue até User -> My Security Credentials e obtenha o Access Key ID e a Access Key.
Passo 2: Clonar o repositório
Clone este repositório para um local no seu disco.
Passo 3: Instalar e configurar o AWS CLI
Instale o AWS CLI a partir daqui.
Execute aws configure no terminal e digite sua região, seu Access ID e Keys, como a seguir:
aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: eu-central-1
Default output format [None]: json
Passo 3: Criar uma política IAM para a bridge
Execute o seguinte comando para criar a política para a bridge:
aws iot create-policy --policy-name bridge --policy-document '{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": "iot:*","Resource": "*"}]}'
Passo 4: Criar certificados
Entre no diretório aws_mosquitto_broker/config/certs e execute o seguinte para criar certificados:
cd aws_mosquitto_broker/config/certs
sudo aws iot create-keys-and-certificate --set-as-active --certificate-pem-outfile cert.crt --private-key-outfile private.key --public-key-outfile public.key --region eu-central-1
Em seguida, você pode executar aws iot list-certificates para verificar os certificados criados. Copie o ARN no formato arn:aws:iot:eu-central-1:0123456789:cert/xyzxyz:
aws iot list-certificates
Anexe a política ao seu certificado. Substitua {REPLACE_ARN_CERT} pelo ARN copiado arn:aws:iot:eu-central-1:0123456789:cert/xyzxyz:
aws iot attach-principal-policy --policy-name bridge --principal {REPLACE_ARN_CERT}
Adicione permissões de leitura à private key, public key e client cert (dentro da pasta certs):
sudo chmod 644 private.key && sudo chmod 644 public.key && sudo chmod 644 cert.crt
Baixe o certificado raiz Amazon CA também no diretório certs:
sudo curl https://www.websecurity.digicert.com/content/dam/websitesecurity/digitalassets/desktop/pdfs/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem -o rootCA.pem
Passo 5: Editar o arquivo de configuração customizada do mosquitto
Renomeie awsbridge.conf.sample para awsbridge.conf:
mv awsbridge.conf.sample awsbridge.conf
Edite config/conf.d/awsbridge.conf e siga as instruções do awsbridge.conf:
nano config/conf.d/awsbridge.conf
Nota: Execute aws iot describe-endpoint para obter o endpoint do AWS IoT.
Passo 6: Construir o Dockerfile
Volte para o local raiz aws_mosquitto_broker e execute o seguinte:
docker build -t aws_mqtt_broker .
Nota: Certifique-se de ter instalado o Docker no seu PC antes.
Passo 7: Executar a imagem Docker
docker run -ti -p 1883:1883 -p 9001:9001 --name mqtt aws_mqtt_broker
Saída do console / log:
1592301141: mosquitto version 1.4.15 (build date 2018-03-04 15:19:39+0000) starting
1592301141: Config loaded from /mosquitto/config/mosquitto.conf.
1592301141: Opening ipv4 listen socket on port 1883.
1592301141: Opening ipv6 listen socket on port 1883.
1592301141: Bridge local.bridgeawsiot doing local SUBSCRIBE on topic localgateway_to_awsiot
1592301141: Bridge local.bridgeawsiot doing local SUBSCRIBE on topic both_directions
1592301141: Connecting bridge awsiot (aq53tian3vbby.iot.eu-central-1.amazonaws.com:8883)
1592301141: Bridge bridgeawsiot sending CONNECT
1592301144: Received CONNACK on connection local.bridgeawsiot.
1592301144: Bridge local.bridgeawsiot sending SUBSCRIBE (Mid: 1, Topic: awsiot_to_localgateway, QoS: 1)
1592301144: Bridge local.bridgeawsiot sending UNSUBSCRIBE (Mid: 2, Topic: localgateway_to_awsiot)
1592301144: Bridge local.bridgeawsiot sending SUBSCRIBE (Mid: 3, Topic: both_directions, QoS: 1)
1592301144: Received SUBACK from local.bridgeawsiot
1592301144: Received UNSUBACK from local.bridgeawsiot
1592301145: Received SUBACK from local.bridgeawsiot

Passo 8: Testando o broker local
Publicar a partir do console AWS IoT
1.- No AWS Management Console, vá para AWS IoT Services -> Test
2.- Inscreva-se nos tópicos mencionados em nosso arquivo de configuração: awsiot_to_localgateway, localgateway_to_awsiot e both_directions.
3.- Publique no tópico awsiot_to_localgateway (hello world).
4.- Revise o log ou a saída do console em nosso broker local em busca de algo como isto:
1493564128: Received PUBLISH from local.bridgeawsiot (d0, q0, r0, m0, 'awsiot_to_localgateway', ... (45 bytes))
Nota: Certifique-se de que a região eu-central-1 esteja selecionada.
Publicar a partir do host
Fluxo de trabalho: Local Broker(Host PC) -> Docker Gateway -> AWS IoT.
Execute o seguinte no terminal para publicar do host para o AWS IoT:
mosquitto_pub -h localhost -p 1883 -q 1 -d -t localgateway_to_awsiot -i clientid1 -m "{\"key\": \"helloFromLocalGateway\"}"
Certifique-se de que você tenha o mosquitto instalado no seu PC.
Publicando mensagens a partir do Wio Terminal
Agora podemos usar o Wio Terminal como um dos dispositivos finais para publicar ou assinar tópicos!
Instalando as bibliotecas dependentes
Este demo depende do núcleo Wi-Fi do Wio Terminal, siga primeiro este tutorial.
PASSO.1 Instalar a biblioteca Pubsubclient
-
Visite o repositório pubsubclient e baixe todo o repositório para o seu disco local.
-
Agora, a biblioteca FS pode ser instalada na IDE Arduino. Abra a IDE Arduino e clique em
sketch->Include Library->Add .ZIP Library, e escolha o arquivopubsubclientque você acabou de baixar.

PASSO.2 Instalar a biblioteca ArduinoJson
-
Visite o repositório ArduinoJson e baixe todo o repositório para o seu disco local.
-
Agora, a biblioteca ArduinoJson pode ser instalada na IDE Arduino. Abra a IDE Arduino e clique em
sketch->Include Library->Add .ZIP Library, e escolha o arquivoArduinoJsonque você acabou de baixar.
Fazer upload do sketch Arduino
Baixe o sketch Arduino a partir daqui.
- Configure as definições de Wi-Fi
ssidepassword. - Altere o
mqttserverpara o endereço IP do seu MQTT Broker (endereço IP do seu PC).
Envie o código e abra o Serial Monitor para conferir! Agora, se você pressionar o botão no Wio Terminal, ele publicará uma mensagem no AWS IoT e você também poderá ver as mensagens recebidas no console do AWS IoT.

Certifique-se de que o broker local em Docker esteja ativo e em execução o tempo todo.
Recursos
Suporte Técnico e Discussão de Produtos
Obrigado por escolher nossos produtos! Estamos aqui para oferecer diferentes tipos de suporte e garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.