BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Artigos Programando microcontroladores com JavaScript. Um bate papo com Peter Hoddie e Lizzie Prader

Programando microcontroladores com JavaScript. Um bate papo com Peter Hoddie e Lizzie Prader

Favoritos

Pontos Principais

  • Os mecanismos otimizados do JavaScript agora podem ser executados em dispositivos embarcados com low-specs de apenas 32 KB de RAM;

  • Os desenvolvedores podem ser mais produtivos com uma linguagem de script como JavaScript, que cuida de detalhes de baixo nível, como gerenciamento de memória, uma fonte comum de bugs. Além disso, o JavaScript tem uma grande base de desenvolvedores, o que facilita o recrutamento e treinamento de desenvolvedores de IoT;

  • Um comitê dedicado, Ecma TC53, se esforça para estabelecer APIs de software padrão para sistemas embarcados. Tanto os criadores de produtos de hardware quanto os desenvolvedores se beneficiam de APIs padrão que fazem a ponte entre os diversos hardware usados em sistemas embarcados;

  • A TC53 está definindo as APIs padrões para áreas que incluem entrada/saída, sensores, rede, comunicação, gerenciamento de energia e displays;

  • A Moddable se esforça para criar ferramentas para que os desenvolvedores criem produtos IoT open sources usando JavaScript padrão em microcontroladores de baixo custo.

Dispositivos IoT conectados e integrados são amplamente usados para resolver problemas reais. Arquitetos e desenvolvedores de software estão cada vez mais cientes que construir uma solução IoT proficiente envolve uma combinação inteligente de hardware, firmware e software. Nos últimos anos, os microcontroladores se tornaram poderosos o suficiente para executar a linguagem JavaScript. Por outro lado, os mecanismos otimizados do JS agora podem ser executados em dispositivos embarcados de low-spec (32 KB de RAM). Embora a programação nativa de um dispositivo (por exemplo em C) seja frequentemente a opção de melhor desempenho, em muitas situações, produtividade e facilidade de manutenção superam a velocidade.

Robbert Gurdeep Singh e Christophe Scholliers da Ghent University na Belgica explicam isso no artigo:

"É extremamente difícil e demorado fazer programas corretos e eficientes para microcontroladores. [...] Microcontroladores programados em linguagens de baixo nível como C [podem ser] difíceis de depurar e de manter".

O InfoQ entrevistou Peter Hoddie e Lizzie Prader da Moddable sobre as oportunidades e desafios do JavaScript para a programação nos microcontroladores. A Moddable se esforça para criar ferramentas para que os desenvolvedores criem produtos IoT abertos usando JavaScript padrão em microcontroladores de baixo custo.

InfoQ: O que é a Moddable? O InfoQ fez uma reportagem sobre o XS JavaScript, mas entendo que deva ser mais do que isso.

Peter Hoddie: Somos mais conhecidos pelo XS, o único mecanismo JavaScript moderno projetado e otimizado para microcontroladores. Mas o XS é apenas o começo. Um mecanismo precisa de um runtime para ser útil. No SDK Moddable, criamos um runtime em que cada componente, de gráficos a rede e segurança, é otimizado para microcontroladores. O resultado é uma maneira realmente ótima de criar software para produtos IoT.

InfoQ: Qual é a visão da Moddable? O site da Moddable menciona produtos IoT abertos de microcontroladores de baixo custo. O que levou a escolha de se concentrar na camada de baixo nível dos microcontroladores? O que querem dizer com "abertos" e por que isso é importante?

Hoddie: Tudo o que fazemos começa com o proprietário do produto IoT, o que pode parecer estranho, dado todo esforço que colocamos em ferramentas para os desenvolvedores.

Nosso foco em microcontroladores de baixo nível é um exemplo desse foco no proprietário do produto. Queremos ver um ótimo software, que é seguro, confiável e fácil de usar, em todos os dispositivos. Isso não vai acontecer se o produto exigir cem dólares em hardware para rodar um software.

"Aberto" é um termo bastante usado em nossa indústria. Deixe-me explicar. Acreditamos nos fundamentos da transparência. Publicamos o Moddable SDK sob licenças FOSS (software gratuito e open source). Implementamos padrões abertos sempre que possível. Por meio do Ecma TC39 e TC53, também contribuímos para novos padrões abertos. Tudo isso é bom para o proprietário do produto, pois produtos desenvolvidos com base em padrões são mais confiáveis, seguros e com melhor interoperabilidade.

Mas, a visão da Moddable vai além disso. Acreditamos que os produtos IoT podem ser abertos para os softwares de terceiros, para aplicativos, assim como computadores, telefones e servidores. Se isso fosse possível, os usuários poderiam facilmente alterar os recursos e comportamentos dos produtos que possuem. Podem alterar o serviço da nuvem ao qual se conecta ou optar por operá-lo inteiramente fora da Internet. Existem muitos desafios técnicos para fazer isso acontecer. O JavaScript resolve muitos deles, afinal, é uma linguagem padrão aberta que milhões de desenvolvedores podem trabalhar. E, devido à sua história na web, também é extremamente portátil, de modo que pode ser executada em uma lâmpada, geladeira, fechadura ou relógio. Dar aos usuários mais opções e mais controle sobre os produtos IoT por meio de aplicativos instaláveis será uma virada de jogo para a IoT.

InfoQ: Poderia citar alguns exemplos de produtos desenvolvidos com a Moddable?

Lizzie Prader: Se visitou a seção de eletrodomésticos de uma Best Buy ou Home Depot recentemente, provavelmente já viu alguns produtos Moddable sem perceber. Existem máquinas de lavar, secadoras, geladeiras, fornos e muitos outros produtos desenvolvidos com nosso software, alimentando a interface do usuário no display, a lógica para configurar e controlar os ciclos e a comunicação com a nuvem.

Outro produto que trabalhamos recentemente é um sistema de esterilização para ambulâncias. Ele usa seis sensores para determinar quando o interior da ambulância deve ser esterilizado e, quando a ambulância está vazia, ativa automaticamente as luzes ultravioleta para esterilizá-la. Nosso software controla todo o sistema, incluindo os sensores e a comunicação com a nuvem.

Também estamos trabalhando em um painel de controle de um monitor para equipamentos de manufatura. É o primeiro projeto que envolve um produto IoT industrial e por isso é bastante interessante para nós. Estamos construindo uma interface de usuário com tela touch screen colorida que substitui um conjunto de telas de 7 segmentos e vários botões e mostradores. Esse tipo de interface é muito mais familiar para os usuário, tornando o sistema mais fácil configurar e operar.

InfoQ: C ou C++ são escolhas comuns na programação de sistemas embarcados, em parte, por motivos de desempenho. Por que construiu a Moddable em torno do JavaScript?

Hoddie: Por experiência própria, sabemos que construir projetos complexos, e quando falo isso estou dizendo produtos IoT, é mais fácil usar uma linguagem de script. A linguagem cuida de vários detalhes para o programador. Tivemos que escolher uma para dar enfase, porque um runtime eficiente tende a estar intimamente conectado à linguagem de programação. Escolhemos o JavaScript porque muitos desenvolvedores o conhecem e porque o padrão é muito preciso e tem bastante suporte por suítes de teste. Quando construímos um projeto, usamos JavaScript tanto quanto possível.

Existem circunstâncias, o desempenho é uma delas, como foi mencionado em que o C é necessário. Temos uma API chamada "XS em C" que liga de forma eficiente o JavaScript com a linguagem C. Os aplicativos que o usuário instala são JavaScript puro para portabilidade e segurança, mas os objetos fornecidos pelo fabricante do dispositivo podem ser em C, para fornecer serviços de alto desempenho para os aplicativos. É exatamente como um navegador web, que possui muitos serviços nativos integrados que são usados pelos scripts em uma página web.

InfoQ: A Segurança é ponto fundamental para usuários de produtos IoT. Segurança significa que o uso do produto não terá resultados prejudiciais para o usuário ou para o ambiente. Como a Moddable ajuda os desenvolvedores a lidar com os riscos derivados do tratamento de dispositivos de low-specs? Estou pensando em um programa em execução que supera as restrições dos dispositivos (memória, duração da bateria, dentre outros). Também estou falando em programas sendo interrompidos por causa da famosa mensagem de erro "undefined is not a function".

Hoddie: Embora possa parecer contraditório, os sistemas restritos podem ser inerentemente mais seguros do que os maiores. Isso ocorre porque os sistemas menores são geralmente sistemas mais simples que tendem a ser mais robustos. Há menos coisas para dar errado e os desenvolvedores estão cientes de tudo o que está acontecendo.

O JavaScript também ajuda. Muitos erros de programação comuns em C, como esquecer de liberar memória ou escrever além do limite de um buffer, não acontecem no JavaScript. O modelo de execução single-threaded da linguagem também ajuda a eliminar código multi-threaded propenso a erros e de difícil depuração (e sim, o SDK Moddable ainda pode tirar vantagem de SoCs multicore como o ESP32 usando Web Workers).

Também temos uma visão muito conservadora em relação ao tratamento de exceções, como o erro "undefined is not a function" que mencionou. Eles podem deixar a máquina em um estado inconsistente, semelhante ao de um zumbi. O Moddable SDK está configurado para reiniciar o dispositivo quando ocorre um erro inesperado: Sem memória, estouro de pilha, dentre outros. Isso coloca o dispositivo de volta em um estado seguro em alguns milissegundos (o Moddable SDK é otimizado para começar a executar JavaScript quase imediatamente após inicialização). O dispositivo pode então se recuperar de maneira apropriada.

Para ajudar a detectar problemas de esgotamento de recursos, como falta de memória e estouro de pilha, o depurador xsbug mostra gráficos em tempo real do uso dos recursos para que os desenvolvedores possam visualizar o comportamento dos produtos durante o desenvolvimento e detectar tendências de problemas antes que ocorram.

InfoQ: Segurança é outro requisito crucial não funcional de alguns produtos IoT. Produtos sem segurança podem, por exemplo, ser controlados, alterados ou incapacitados por agentes mal-intencionados. Como a Moddable oferece suporte para o desenvolvimento de produtos seguros na IoT?

Hoddie: Todo mundo sabe que a segurança é importante. Mas existem tantos aspectos nesse nicho que faz com que o significado de alguns deles não fique exatamente claro.

O SDK Moddable oferece suporte a TLS (Transport Layer Security) para comunicação segura, que quase todo mundo faz. A diferença é que nosso TLS é implementado com JavaScript.

Outro aspecto da segurança é impedir que terceiros adulterem o firmware. Esse recurso pode ter vários nomes, como inicialização segura (boot). É realmente um recurso do microcontrolador e não há muito o que fazer. Se o hardware suportar, então os produtos podem usá-lo.

Funcionalidades como a inicialização segura são projetadas para manter códigos de terceiros fora do produto. Mas lembre-se de que nossa visão é permitir a entrada de códigos de terceiros. Queremos que os usuários tenham a liberdade de instalar os aplicativos que desejam nos produtos IoT. Precisamos de uma maneira de permitir a entrada de código não confiável e, ao mesmo tempo, manter todo o sistema seguro.

Para fazer isso, estamos trazendo uma execução segura para o padrão de linguagem JavaScript por meio da proposta Secure ECMAScript (SES) para TC39. O SES permite que a execução de JavaScript seja colocada em uma sandbox dentro de compartimentos extremamente leves. Isso limita o acesso do aplicativo instalado a apenas alguns recursos do sistema. A parte boa no SES é que o produto define a política de segurança, sendo o SES propriamente apenas uma ferramenta para implementar a política. O XS é o primeiro mecanismo JavaScript a implementar SES e demonstramos que o SES é leve o suficiente para funcionar tranquilamente em uma lâmpada conectada por Wi-Fi.

InfoQ: Conte-nos sobre o comitê TC53. O que é e qual é a razão de ter outro comitê? O que produziram até agora? O que está em andamento?

Hoddie: Quando a Ecma International nos abordou pela primeira vez sobre o TC53, tive uma reação semelhante. A última coisa que o mundo precisa é de mais um padrão IoT.

Mas a maioria dos padrões IoT são sobre protocolos de comunicação. Eles começam e terminam na fronteira física do produto. Adotamos uma abordagem diferente com o TC53. Não estamos inventando outro protocolo do zero. Estamos desenvolvendo APIs padrão que funcionam dentro do produto. Essas APIs podem ser usadas pelo fabricante do produto para implementar o software e por aplicativos que o usuário instala. Essas APIs precisam ser padrão para que os aplicativos possam funcionar em lâmpadas (ou abridores de portas de garagem ou máquinas de lavar) de vários fabricantes, assim como as páginas web funcionam em navegadores de vários fabricantes.

A grande vantagem da abordagem TC53 é que não precisamos nos preocupar com quais protocolos de comunicação passam a dominar a IoT. Como podemos escrever um código portátil que é executado dentro do produto, podemos implementar praticamente qualquer protocolo que seja necessário.

O comitê é formalmente conhecido como ECMAScript Modules for Embedded Systems. Temos um rascunho de especificações que cobre IO, sensores e displays. O IO inclui sockets, que são a base para a implementação de protocolos de rede. Também temos uma implementação de protótipo para o microcontrolador ESP8266 construído em XS que permite construir experimentos. O projeto J5e, Johnny Five for Embedded Systems, é um exemplo muito legal do que é possível ser feito. É uma releitura do popular framework JavaScript de robótica Johnny Five que é implementado inteiramente em JavaScript usando as APIs IO TC53.

InfoQ: Até que ponto é possível escrever programas portáteis embarcados? Ou seja, como minimizam as mudanças no programa relacionadas às mudanças no hardware?

Prader: É muito possível. O JavaScript e as APIs JavaScript no SDK Moddable são completamente independentes de plataforma. Nossa biblioteca gráfica Commodetto, o framework de UI Piu, protocolos de rede, BLE, arquivos e APIs de hardware são todos escritos em JavaScript. Isso significa que se escrever um aplicativo que utilize alguns deles, poderá executá-lo em várias plataformas sem alterar uma única linha de código.

As APIs que estamos definindo na TC53 também são em JavaScript puro. Os fabricantes de hardware podem implementar todo o código dependente do dispositivo para fazer as APIs JavaScript funcionarem, em qualquer linguagem que seja, mas os desenvolvedores não precisam se preocupar com esses detalhes de baixo nível, basta apenas escrever os aplicativos JavaScript utilizando uma API com padrão familiar. Por exemplo, se um desenvolvedor escrever um aplicativo que exibe dados do sensor de temperatura em uma tela, serão capazes de trocar o sensor de temperatura por qualquer outro sensor de temperatura compatível com TC53 ou trocar o display por qualquer outro display compatível com TC53, tudo isso sem alterações, ou com algumas mínimas alterações, exigidas no código.

InfoQ: Cite alguns problemas que impedem um crescimento mais rápido da IoT e, mais especificamente, o uso do JavaScript em um contexto de IoT?

Prader: A IoT tem muitos problemas. A privacidade do usuário não é respeitada, empresas sem produtos, os fabricantes decidem quais produtos são interoperáveis e quais não, a segurança de alguns produtos é uma piada. A lista de problemas é interminável. Para simplificar, a IoT está quebrada. A Moddable e todos os colaboradores do TC53 desejam consertá-la e acreditam que o JavaScript e os padrões podem ajudar.

É um desafio completamente diferente convencer os outros de que o JavaScript para desenvolvimento embarcado é uma boa ideia. Conversei com centenas de pessoas nos últimos anos em eventos, conferências e encontros sobre o assunto, e as reações variam de empolgação a indiferença, passando até mesmo pela hostilidade. Alguns desenvolvedores JavaScript estão entusiasmados porque as habilidades de programação podem ser aplicadas a uma nova plataforma e outros que não têm nenhum desejo de desenvolver aplicativos que rodam fora de um navegador. Existem desenvolvedores embarcados que estão ansiosos para aprender uma nova abordagem para o desenvolvimento embarcado e outros que estão horrorizados com o fato de alguém considerar o uso de uma linguagem como o JavaScript.

Nossa abordagem para o desenvolvimento embarcado é relativamente nova e muito diferente das técnicas clássicas. Não é nenhuma surpresa que nem todos estejam contentes com o que estamos fazendo.

Hoddie: Em uma visão geral, será necessário muitas pessoas trabalhando juntas para consertar a IoT. Nosso trabalho é criar uma maneira para muitas pessoas trabalharem no software de cada produto IoT. A linguagem JavaScript e o padrão emergente TC53 são ferramentas que tornam isso possível, rompendo com APIs proprietárias e com os firmwares fechados.

InfoQ: Quais são os recursos didáticos interessantes para desenvolvedores que desejam entender mais sobre IoT, ou que gostariam de começar a fazer os primeiros programas embarcados ou simplesmente gostariam de ver o que está sendo feito?

Prader: Podem começar a escrever aplicativos embarcados hoje mesmo. O SDK Moddable está disponível no GitHub e inclui mais de 150 aplicativos de exemplo além de uma documentação completa das APIs. Existem muitos exemplos que funcionam com uma variedade de plataformas de hardware. Mas nem precisam de um hardware para iniciar. Existem simuladores de hardware que rodam em Mac, Windows e Linux.

A equipe do Moddable posta informações sobre projetos recentes feitos com o SDK, não apenas por nós, e outras atualizações no blog da Moddable e no Twitter.

Peter e eu acabamos de escrever um livro para desenvolvedores que desejam aprender mais! "IoT Development for ESP32 and ESP8266 with JavaScript" está pronto é já é possível adquirir uma cópia. O livro foi escrito para desenvolvedores embarcados que desejam começar a construir com JavaScript e desenvolvedores Web que desejam trazer as habilidades para produtos embarcados.

E, claro, existem toneladas de recursos de outras fontes. Existem muitos desenvolvedores profissionais e amadores que compartilham seu trabalho no Twitter e em postagens em blogs. Muitas conferências publicam vídeos de palestrantes em sites ou no YouTube. Existem boletins informativos e podcasts por e-mail, um dos meus favoritos é o boletim informativo por e-mail da Stacy Higginbotham. Ela fala sobre todas as coisas da IoT, de chips a produtos de consumo, startups a empresas gigantescas e muito mais.

Sobre os Entrevistados

Peter Hoddie é engenheiro e empresário com ênfase em software cliente. É reconhecido por criar um código compacto e eficiente que amplia os limites da experiência do usuário no hardware do consumidor. O software que ele e suas equipes desenvolveram alimentou produtos de consumo de massa de empresas como Apple, Whirlpool, Palm, Sling, HP e Sony. Peter reconhece que os primeiros usuários de qualquer produto são os desenvolvedores que o criaram e que esses desenvolvedores não podem construir produtos de consumo atraentes em uma base que seja instável, complexa ou confusa. Liderou o desenvolvimento do QuickTime na Apple durante a década de 1990 e contribuiu para o desenvolvimento do padrão de formato de arquivo MPEG-4. É cofundador da Moddable, membro do conselho da ECMA TC39 e presidente da ECMA TC53.

Lizzie Prader é engenheira de software na Moddable, na baía de São Francisco. É cética da IoT trabalhando neste mundo, na esperança de tornar os produtos mais abertos e personalizáveis para o usuário final. É especializada no desenvolvimento de interfaces de usuário com tela touch screen para sistemas embarcados e na criação de recursos para desenvolvedores.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

BT