Sming, um framework para ESP8266

Desde o surgimento do ESP8266 no final de 2014, programá-lo tem ficado mais fácil a cada dia. No seu lançamento, a única forma de utilizar o módulo eram com os famosos comandos AT, o que incluíam severas limitações e muitas vezes com a necessidade de um micro controlador adicional.

Com a liberação do SDK para a programação nativa, foram surgindo os frameworks, como o nodeMCU e Arduino, os mais conhecidos na comunidade, o que facilitou a adoção do ESP8266 por makers e entusiastas, que não tinham conhecimento avançado em programação.

Cerca de um ano atrás, começa o projeto Sming, que viria a ser mais um framework no universo ESP.

Sming

O Sming é um framework para ESP8266, que utiliza uma como linguagem de programação nativa o C++, e tem uma alta eficiência no uso de memoria e performance.

Características e Funcionalidades

Ao contrario do que se pode pensar, o framework não foi pensado em ser igual ao Arduino, mas sim em reaproveitar a vasta gama de bibliotecas que o Arduino dispõe. A estrutura do framework é mais próxima ao desenvolvimento nativo, o que traz como maior beneficio a velocidade e o acesso aos recursos de hardware por meios de API.

Dentre as principais características do Sming, podemos destacar:

  • Controle das GPIOs ao estilo do Arduino

  • Compatível com as bibliotecas do Arduino

  • Sistema de arquivos spiffs

  • Biblioteca JSON

  • Biblioteca MQTT (libemqtt)

  • Suporte HTTP, AJAX e WebSockets

  • Pilha TCP/IP baseada na lwIP

  • Atualização de firmware OTA (over the air)

 

A licença é do Sming é LGPL (GNU Lesser General Public License).

Sming vs Arduino

Mesmo as bibliotecas do Arduino, serem na grande maioria, compatíveis com o Sming, o Sming não é 100% compatível com o Arduino, isso significa que um projeto feito para o Arduino não irá funcionar no Sming e vice-versa.

Diante da estrutura de código, um dos grandes diferenciais do framework Sming é o fato do Sming ser baseado em eventos, ao contrario do Arduino que é baseado em um loop.

No Arduino, o código é dividido em duas partes principais, o setup() e o loop(), já no Sming, como a estrutura é baseada em eventos, existe somente o init().

Abaixo, seguem dois exemplos de blink, um com Arduino e outro com o Sming, assim as diferemças podem serem notadas.

Arduino

Sming

Montando o ambiente

O ambiente do Sming é multiplataforma e pode ser construído em Windows, Mac e Linux.

Para este artigo, vamos considerar a plataforma Linux, baseado no Ubuntu 14.10.

Existe também um passo a passo no próprio gitHub do projeto, que pode ser acessado aqui.

A criação do ambiente é bem similar ao que já conhecemos no post de como instalar o ambiente do ESP.

Uma diferença é que para o sistema de build pelos Makefiles funcionarem, é preciso do esptool2, que não tem nada com o esptool.py. Para instalar no sistema, basta compilar e alterar o path no arquivo Makefile-project.mk na opção abaixo.

# esptool2 path
ESPTOOL2 ?= esptool2

Primeiros passos

O Sming não dispõe de uma IDE padrão, como acontece com o Arduino, porém te dá a flexibilidade de utilizar diferentes IDEs, que vão desde VIM até Eclipse, Sublime ou qualquer outro editor de texto. O processo de build e flash é por meio do Makefile.

A documentação completa do projeto, pode ser encontrada aqui.

Exemplos

No gitHub do projeto, existem diversos exemplos interessantes, e são facilmente adaptáveis para as mais diversas aplicações.

Para utilizar os exemplos, basta executar o comando make e make flash, da mesma forma que já é utilizada no desenvolvimento com o SDK nativo.

Conclusão

O Sming é uma forma de desenvolvimento mais próxima do que se faz em C nativo, com uma flexibilidade maior que no Arduino. Na minha opinião, se você busca uma forma alternativa ao Arduino, porém com uma experiencia de uso um nível acima do SDK nativo, o Sming é uma excelente opção.