Sming, um novo jeito de programar para ESP8266

Sming (ESP8266)
Sming (ESP8266)

Sming

Quem não gosta de novidades certamente deveria escolher uma área mais amena. Sério, se gosta de coisas complexas mas não gosta de mudanças, faça matemática, física ou algo do tipo. Se quer moleza, não faça nada. E, se você é do tipo que ama evolução, vamos falar um pouquinho de uma joia nova que apareceu – o Sming – um framework para ESP8266 que lhe dá uma interface em C++ e um sistema de arquivos. Tem muito mais novidade, recomendo que leia a introdução (muito bem elaborada) feita pelo Pedro Minatel em seu blog. Foi por esse post que tomei ciência da existência dessa belezinha. E olhe só; esse framwork reage a eventos invés de trabalhar no conceito setup()/loop() do Arduino. Isto é, você terá que criar apenas um init() e o resto mostro mais adiante. Nesse artigo trato de implementar um código em uma situação real, que é o controle de duas lâmpadas da minha sala. Isso faz parte da implementação prévia com MQTT broker e client utilizando um Raspberry que nesse momento está monitorando abertura e fechamento da porta (física), assim como abertura do trinco e status de abertura do trinco. Além disso, estou acendendo a lâmpada da minha bancada e ligando/desligando o monitor do Raspberry.

Para essa implementação, dedicarei um ESP-01, que possui apenas 2 pinos de I/O, sendo justamente os que preciso para acionar os 2 relés de um módulo que irá embutido na parede junto com o ESP-01 e a fonte de alimentação, na caixa do interruptor. Como? – Mostro logo mais.

Primeiros passos

Vamos experimentar juntos? Bem, juntos não dá, mas é como se fosse juntos para mim, que estou escrevendo. Isso porque a cada passo que dou, vou adicionando a experiência nesse post e se você seguir o que está aqui, atingirá os mesmos objetivos.

Ambiente

Para começar, devo preceder dizendo que uso Linux e não tenho como orientá-lo em outra plataforma. Assim sendo, tenha instalado o git (você pode clicar em ‘Download Zip’ invés de clonar o git do projeto, mas…) e também uma sacola de dependências. Conforme a orientação do próprio projeto, você deve sanar todas as pendências instalando esse conjunto que segue (a libtool-bin está aí, mas eu não instalei):

SDK pronto




Se você não quiser uma aventura recomendada ou se for tão ancioso que  não aguenta compilar seu próprio SDK do ESP8266, você pode baixar um pronto. Eu peguei um, caso minha compilação não evolua (porque não quero deixar de experimentar de forma alguma), mas eu já tenho um SDK que utilizei para outras compilações como a do MicroPython e a do FreeRTOS. Eis o link para o SDK de 64 bits.

Preparando a estrutura de compilação

Dependendo do espaço em disco e do objetivo, eu costumo criar em lugares diferentes meus SDK. Esse estou criando no meu home, mas uma boa opção é criar em /opt, que é o lugar certo dentro dos padrões. Se quiser seguir meus passos, use minhas pegadas. Lembre-se que estou fazendo realmente do zero, baixando mais uma vez o SDK do ESP8266 para exemplificar para você como fazer, portanto, pule aquilo que achar devido, mas recomendo o passo-a-passo para seu aprendizado ou apenas diversão.

Nesse momento você pode ter outras dependências não previstas, apenas supra as necessidades instalando-as. Meu Linux é baseado em Debian, portanto instalo tudo com “apt-get”.

Nunca esqueça de exportar as variáveis de ambiente

Mensagem final da compilação
Mensagem final da compilação

Exportar as variáveis de ambiente é uma maneira de colocar o compilador da arquitetura no path do sistema; isto é, criar um caminho transparente para a compilação do firmware. As duas linhas extras são importantes? –  Não sei, mas está na wiki do projeto, vou colocar e depois analiso. Tendo transpassado qualquer barreira ou concluindo serenamente os passos anteriores, faça então os exports:

Você concluiu a primeira parte, parabéns! Agora pode seguir para a preparação e compilação do Sming e seus periféricos.

Proceda como nos comandos a seguir.

Fim da compilação do core
Fim da compilação do core

Esse foi o núcleo, mas ainda não é tudo. Você já está no diretório Sming/Sming se nada foi executado além do passo anterior. Conclua com o comando:

Compilação rápida!
Compilação rápida!

Se tiver saido do diretório, apenas retorne a ele antes do comando supracitado.

É bastante provável que esse não seja seu primeiro contato com ESP8266, senão esse post não deveria lhe despertar interesse e portanto, é provável também que você já tenha o esptool.py instalado, mas não posso deixar de passar o processo na ocasionalidade de sua ausência:

esptool2 e esptool.py

O famigerado esptool.py você já acompanhou o processo logo aí acima. Agora o esptool2 é fundamental também, senão a compilação não vai rolar:

Faltou o esptool2
Faltou o esptool2

No blog do Pedro ele cita claramente essa necessidade, eu simplesmente ignorei pra ver onde ele seria necessário (é um atalho preguiçoso pra provocar o sintoma). Isso é bem simples:

 

Hello World!




De todo o contruido, o que você utilizará será sempre o diretório Sming, o SDK é para fazer a compilação. Se você seguiu adequadamente todos os passos anteriores, agora já pode compilar um exemplo.

Esse comando compila e sobe a imagem para o ESP8266 usando a ttyUSB0. Se quiser apenas compilar, elimine o parâmetro ‘flash’, executando apenas ‘make’. Para habilitar o suporte a spiff,  passe o argumento para o make. De qualquer modo, o resultado deve ser parecido com isso:

Compilando o firmware
Compilando o firmware

Esse procedimento pode ser todo conferido na wiki do projeto, também fonte desse processo que vos descrevo e até aqui foi onde o Pedro Minatel abordou por seus meios, exemplificando a diferença entre o blink do Arduino e o blink do Sming. Executando ‘cat’ sobre o cpp do blink, o código visto é exatamente esse:

Como você pode notar, o timer executa uma interrupção no estouro do tempo, por isso que não há necessidade de loop(). Também não há necessidade de setup()  porque você pode incluir o que quiser em init(), uma vez que a repetição ou chamada de uma função se dará por interrupção.

Para testar, subi o firmware no meu rato de laboratório – o Wemos D1, cuja board foi utilizada também para o teste do MicroPython e FreeRTOS.

Não dará pra colocar tudo o pretendido em um só post outra vez, como os controles do Raspberry que dividi em 2 ou 3 artigos, mas antes de finalizar, gostaria de citar também que bibliotecas que não usam recursos periféricos do hardware do Arduino em muitas vezes, 100% compatíveis. Já algumas bibliotecas contidas nesse “bolo de chocolate”:

Bibliotecas default
Bibliotecas default

Já no próximo post vou mostrar algumas das delicias oferecidas por esse framework e com esse próprio código de exemplo já implementarei o controle das lâmpadas da sala com o ESP-01. Não pude deixar de fazer esse artigo porque como tenho exemplificado outros firmwares diferentes, nao podia faltar no meu acervo, apesar de mais uma vez eu reforçar, a novidade veio através do Pedro Minatel. Mas prometo que o diferencial virá em seguida para não ficar parecendo uma kibada!

Inscreva-se no nosso newsletter, alí em cima à direita e receba novos posts por email.

Siga-nos no Do bit Ao Byte no Facebook.

Prefere twitter? @DobitAoByte.

Inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.

Próximo post a caminho!

Comments

comments

Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.

Um comentário em “Sming, um novo jeito de programar para ESP8266

Deixe uma resposta