O Sistema Operacional open source, Mongoose OS é voltado para sistemas embarcados, suportando as arquiteturas ESP32, ESP8266, CC3220, CC3200, entre outras. Com a promessa de um desenvolvimento IoT (Internet das coisas) facilitado, ele nos permite programar tanto em JavaScript quanto em C.
O bacana é que com ele não precisamos perder tempo implementando protocolos, como: MQTT, HTTP, WebSocket, SNTP, entre outros. Já está tudo pronto. Além da atualização Over-The-Air (OTA) da biblioteca ARM mbedTLS e do microChip (ATECC508A).
O sistema também traz uma integração com a AWS IoT, Google IoT Core, Microsoft Azure, Samsung Artik, Adafruit IO, além do próprio dashboard, onde podemos registrar dois dispositivos na versão gratuita.
Primeiros passos
Download
Para começar, faça o download e instalação do mos tool.
Ambientes
O Mongoose OS permite desenvolver em vários ambientes, inclusive em seu próprio ambiente web. Caso não queria usar o Web UI fornecido é possível criar uma pasta com os arquivos necessários para a criação de seu firmware.
Estrutura
Para a criação do projeto, você pode seguir alguns apps de exemplos já fornecidos. Em um projeto simples só será necessário a criação de dois arquivos, o arquivo contendo a lógica de seu firmware e o arquivo com as configurações de build (mos.yml).
Uma recomendação dos desenvolvedores é de nunca colocar o arquivo de configuração final em seu firmware, caso deseje utilizar a atualização OTA.
Build
Existem duas maneiras de realizar o build. Na forma remota, é feito o upload de seu código para a build machine do Mongoose OS ou caso o Docker esteja instalado em sua máquina, é possível realizar o build local passando a flag –local.
Flash
Para realizar o flash de seu firmware, basta ter realizado o build ou direcionar o flash para o zip de seu firmware, passando a arquitetura usada.
Debug
Para as informações de log no Mongoose OS basta habilitar o debug.level no seu arquivo de configuração com as informações que melhor se encaixam em seu ambiente. Por padrão, o debug.level vem com o nível 2, exibindo informações de erros, avisos e informações. É possível enviar estas informações de debug em um tópico MQTT caso este esteja configurado.
Configuração
O Mongoose OS usa o sistema de configuração multicamada, havendo duas partes, o tempo de compilação que define as configurações e o tempo de execução que faz uso das configurações definidas. Os arquivos de configurações são usados para executar a lógica interna do próprio Mongoose OS, estando entre elas: configuração de rede, dos protocolos, entre outras.
As camadas de configuração são: conf0.json configurações padrão do sistema, conf1.json ao conf8.json camadas seguidas executando as configurações setadas, e por último o conf9.json contendo as configurações de execução do firmware. Se você precisa definir seus próprios parâmetros de configuração, adicione uma seção chamada config_schema no arquivo mos.yml. Para mais informações sobre configurações, acesse o link.
Vantagens
- Código já implementado: Existe muita coisa já pronta, é bem provável que não haja necessidade de codificação.
- Ajuda da comunidade: A comunidade é extremamente ativa, podendo tirar dúvidas pelo chat, pelo fórum ou abrindo issues no Github.
- JavaScript: Para você que está acostumado com JavaScript, não terá uma curva de aprendizagem muito grande.
- Chamada de métodos remotamente: É possível fazer uso da biblioteca RPC Remote Procedure Calls, com chamadas remotas de métodos em seu firmware.
Desvantagens
- Documentação em Inglês: Caso tenha problemas com documentação em inglês, já vai se acostumando.
- Algumas Limitações: Apesar de ser nomeado como um sistema operacional, vá com calma, pois não tem a mesma liberdade que um SO normal teria, lembrando que é um sistema para microcontroladores.
Observações
- JavaScript: Para você que está acostumado a programar em nodejs, talvez sinta uma diferença programando em JS no Mongoose, por isso dê uma olhada na documentação do mjs.
- Encriptação do flash: Tome cuidado ao realizar esta encriptação. Você corre o risco de não conseguir mais flashar em seu dispositivo, por isso, esteja atento às especificações dessa funcionalidade.
Conclusão
É um sistema bem construído, possui ótimas integrações e uma implementação facilitada. Em minha experiência com o Mongoose OS pude perceber que ele realmente faz o que promete, facilita o desenvolvimento.
Referências
- https://www.youtube.com/watch?v=UnUQxAQoavs
- https://mongoose-os.com/software.html
- https://github.com/mongoose-os-apps
- https://mongoose-os.com/docs/book/build.html#mos-yml-file-format-reference
- https://mongoose-os.com/dashboard/login.html
- https://gitter.im/cesanta/mongoose-os
- https://forum.mongoose-os.com/
- https://github.com/cesanta/mjs
- https://mongoose-os.com/docs/book/security.html#esp32-flash-encryption
- https://mongoose-os.com/docs/book/debug.html
- https://mongoose-os.com/docs/book/configuration.html