O blog da AWS
AWS IoT com Mongoose OS rodando em ESP8266 e ESP32
Por Tim Mattison (Tradução de David Reis). Tim é um Arquiteto de Soluções de Parceiros da AWS que está focado em IoT.
Para acessar o texto original, clique aqui.
Bem-vindo ao primeiro post de uma série sobre a conectividade de microcontroladores com o AWS IoT. O objetivo desta série é mostrar como nossos parceiros de firmware e hardware estão trabalhando juntos para tornar possível iterar e desenvolver projetos de IoT rapidamente sem sacrificar a segurança.
Introdução
O AWS IoT define um nível elevado para segurança. Hoje, requer Transport Layer Security (TLS) versão 1.2 com autenticação mútua. No passado, as exigências computacionais significavam que certos dispositivos poderiam não ter memória ou CPU suficiente para se conectarem diretamente. Esses dispositivos normalmente se conectam ao AWS IoT através de um gateway ou proxy que manipula a segurança e a autenticação em seu nome. Um dispositivo muito popular no Brasil, o Espressif ESP8266, tinha essa limitação por um bom tempo, mas isto mudou recentemente.
O primeiro passo em nossa jornada de IoT é passar do modelo de “segurança por proxy” e realizar a autenticação mútua e criptografia no próprio microcontrolador. Neste post, vamos mostrar-lhe como usar o seu ESP8266 (ou ESP32) para conectá-lo diretamente ao AWS IoT usando o Mongoose OS. Mongoose OS é um sistema operacional de código aberto para microcontroladores que enfatiza a conectividade em nuvem. Ele foi desenvolvido pela Cesanta, uma empresa de software embarcado baseada em Dublin e um Parceiro de Tecnologia Avançado da APN.
Objetivos
Quando você concluir as etapas deste artigo, você terá:
- Certificados para o seu ESP8266 que serão registrados no AWS IoT e armazenados em seu computador local
- Uma imagem de firmware para o ESP8266 que pode se conectar diretamente ao AWS IoT e pode ser configurada com o seu endpoint do AWS IoT,
- Wi-Fi SSID e senha Wi-Fi sem fazer reflash
- Um ambiente de compilação que você pode usar para desenvolver um novo firmware
Pré-requisitos
Para este tutorial, você precisará:
- A AWS CLI configurada com credenciais válidas na conta AWS que você pretende usar
- Uma placa NodeMCU baseada em ESP8266 (você também pode usar um ESP32, consulte a seção “Suporte ao ESP32”)
- Um cabo USB para conectar a placa NodeMCU ao computador
- mos – a ferramenta de flash do Mongoose OS
- Uma cópia do repositório do Mongoose OS hospedado no GitHub, que você pode obter com o comando
git clone https://github.com/cesanta/mongoose-os
Algumas notas antes de começar
Você deve executar todos os comandos nestas instruções no mesmo shell de linha de comando.
Assumimos que a aplicação mos
está no path do seu computador. Se não estiver, você precisará referenciá-lo diretamente ou adicioná-lo ao seu path.
O aplicativo mos
irá criar uma política AWS IoT na sua conta chamada mos-default
. Esta é uma política aberta apenas para fins de desenvolvimento. Não use essa política em uma implantação de produção ou em uma conta que manipula dados de produção. Se você preferir criar sua própria política, consulte Políticas de Exemplo (Example Policies) na documentação do AWS IoT para saber mais.
Se o aplicativo mos
não detectar sua porta serial, leia a seção “Solução de problemas – Instalando Drivers Seriais” na última parte do tutorial.
Etapa 1 – Construa e abra o Mongoose OS
1. Navegue até o repositório git no seu shell.
2. Navegue até o diretório de exemplo do firmware c_mqtt:
$ cd fw/examples/c_mqtt
3. Criar o firmware:
$ mos build --arch esp8266
Connecting to http://mongoose.cloud, user test
Uploading sources (3007 bytes)
Success, built c_mqtt/esp8266 version 1.0 (20170315-154447/???).
Firmware saved to build/fw.zip
4. Faça o flash do firmware:
$ mos flash
Loaded temp/esp8266 version 1.0 (20170313-194120/???)
Using port /dev/cu.SLAB_USBtoUART
Opening /dev/cu.SLAB_USBtoUART...
Connecting to ESP8266 ROM, attempt 1 of 10...
Connected
Running flasher @ 460800...
Flasher is running
Flash size: 4194304, params: 0x0240
Deduping...
2544 @ 0x0 -> 0
553248 @ 0x11000 -> 483616
131072 @ 0xdb000 -> 20480
128 @ 0x3fc000 -> 0
Writing...
4096 @ 0x1000
77824 @ 0x11000
12288 @ 0x25000
98304 @ 0x29000
4096 @ 0x44000
12288 @ 0x4a000
61440 @ 0x4e000
20480 @ 0x5f000
4096 @ 0x65000
12288 @ 0x67000
24576 @ 0x6b000
159744 @ 0x72000
20480 @ 0xdb000
4096 @ 0xfb000
Wrote 516096 bytes in 12.76 seconds (316.02 KBit/sec)
Verifying...
2544 @ 0x0
5. Configure o Wi-Fi substituindo SEU_WIFI_SSID
e SUA_SENHA_WIFI
pelos valores apropriados para o seu ambiente:
$ mos wifi SEU_WIFI_SSID SUA_SENHA_WIFI
Using port /dev/cu.SLAB_USBtoUART
Getting configuration...
Setting new configuration...
Saving and rebooting...
6. Gere os certificados, envie-os para a placa NodeMCU e configure os parâmetros MQTT substituindo REGIAO (ex: us-east-1) pelo nome da região que você deseja usar com AWS IoT:
$ mos aws-iot-setup --aws-region REGIAO --aws-iot-policy mos-default
Using port /dev/cu.SLAB_USBtoUART
AWS region: us-east-1
Connecting to the device...
Current MQTT confit: {
"clean_session": true,
"keep_alive": 60,
"pass": "",
"pub": "/response",
"reconnect_timeout_max": 60,
"reconnect_timeout_min": 10,
"server": "axxxxxxxxxxxxz.iot.us-east-1.amazonaws.com:8883",
"ssl_ca_cert": "ca-verisign-ecc-g2.crt.pem",
"ssl_cert": "aws-iot-exxxxxxxxf.crt.pem",
"ssl_cipher_suites": "",
"ssl_key": "aws-iot-exxxxxxxxf.key.pem",
"ssl_psk_identity": "",
"ssl_psk_key": "",
"sub": "/request",
"user": "",
"will_message": "",
"will_topic": ""
}
Generating certificate request, CN: mos-M3SRGEJDINMOPB12
Generating private key locally
Asking AWS for a certificate...
Certificate ID: bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx8
Certificate ARN: arn:aws:iot:us-east-1:0xxxxxxxxxx8:cert/ bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx8
Wrote private key to aws-iot-bxxxxxxxc.key.pem
Wrote certificate to aws-iot-bxxxxxxxc.crt.pem
Attaching policy "Mongoose" to the certificate...
Uploading certificate...
Uploading key...
Uploading CA certificate...
New config: {
"clean_session": true,
"keep_alive": 60,
"pass": "",
"pub": "/response",
"reconnect_timeout_max": 60,
"reconnect_timeout_min": 10,
"server": "axxxxxxxxxxxxz.iot.us-east-1.amazonaws.com:8883",
"ssl_ca_cert": "ca-verisign-ecc-g2.crt.pem",
"ssl_cert": "aws-iot-bxxxxxxxc.crt.pem",
"ssl_cipher_suites": "",
"ssl_key": "aws-iot-bxxxxxxxc.key.pem",
"ssl_psk_identity": "",
"ssl_psk_key": "",
"sub": "/request",
"user": "",
"will_message": "",
"will_topic": ""
}
Setting new configuration...
Saving and rebooting...
7. Abra um console serial para monitorar o dispositivo:
$ mos console
Etapa 2 – Interagir com o dispositivo
1. Efetue o login no console AWS IoT e, em seguida, escolha Test para acessar o cliente MQTT.
2. Na seção Publish, defina o tópico como /request .
3. Na área de texto abaixo do tópico, escreva:
{
gpio: {
pin: 2,
state: 0
}
}
4. Escolha o botão Publish to topic.
Neste ponto, o LED azul existente na placa NodeMCU será ligado.
O LED azul está conectado a GPIO2, porém a lógica está invertida, isto é, configurando-a para o estado 0 o LED azul será ligado.
5. Na área de texto abaixo do tipo de tópico:
{
gpio: {
pin: 2,
state: 1
}
}
6. Selecione Publish to topic novamente. O LED irá desligar.
Suporte ao ESP32
O Mongoose OS suporta várias arquiteturas. Tudo o que mostramos até agora irá funcionar em placas Espressif ESP32 também. A única coisa que você precisará alterar é o flag -arch e o nome do dispositivo serial. Para o ESP32, crie o firmware com este comando:
mos build --arch esp32
Solução de problemas – instalação dos drivers serial
Se sua porta serial não foi detectada automaticamente, talvez seja necessário instalar um driver de porta serial. Olhe para a placa NodeMCU e identifique seu chip serial. Os dois chips mais comuns são o CP2102 eo CH340. O CP2102 tem esta aparência:
Se você tiver o CP2102, você precisa baixar os drivers seriais da Silicon Labs.
Se você tiver o CH340, baixe o driver apropriado para seu sistema operacional. Drivers para Windows e driver para MacOS são fornecidos atualmente para este chip.