“Por quê?”, “Que bobagem?”, “Perversão!”, “Fu-Fu-Fu” - essas são algumas das muitas declarações que ouvimos quando lançamos o quadro Iskra JS no núcleo Espruino .Porque
Quando o engenheiro eletrônico certo ouve que algo foi feito no Arduino, sua temperatura corporal aumenta cerca de meio grau: “eles pegaram um microcontrolador adequado e, em vez de figak figak e registros, extraem todos os sucos dele, vulgarizam tudo ... não há palavras, uma odeio ".Mas você pode ir ainda mais longe. Pegue o microcontrolador Cortex M4, que é dez vezes mais rico que o que está no mesmo Arduino Uno, empurre o intérprete JavaScript para lá e faça os projetos JavaScript!Penso que, neste momento, aqueles que não estão prontos para tal abuso de microcircuitos sagrados já estouraram. Vou continuar pelo resto.No hobby da eletrônica para a grande maioria dos projetos, o Arduino Uno é suficiente para os olhos. E nem importa se funciona na frequência padrão de 16 MHz ou 4 MHz: se as luzes da cama acendem ou a bomba no país em 1 ms ou 10 ms não importa.O que importa é que o C ++ é complexo e de madeira. Sim, é próximo ao ferro, mas é por isso que requer uma compreensão profunda dessa ciência do ferro e da computação. Adicione a isso a sintaxe com várias nuances, que é a soma dos erros do desenvolvimento de 30 anos da linguagem. Então privamos o que acabou por ser arrays, strings, dicionários e até melhores - em geral, privamos a memória dinâmica. Aqui, finalmente, conseguimos o Arduino.Observando perguntas em nosso fórum, vejo que as pessoas passam um tempo fodendo com o idioma, e não com a essência de seus projetos. Então, por que não reduzir a diferença entre ferro e pessoas? O ferro é barato e está em constante evolução, o tempo das pessoas é caro e não vem de lugar nenhum.Eu assisti a um processo semelhante por muitos anos enquanto trabalhava no desenvolvimento de jogos. Em 2003, era impossível imaginar que o jogo pudesse ser escrito em algo que não fosse C / C ++. Em seguida, o script interno da máquina apareceu nos mecanismos. E então a criação de um produto completo tornou-se possível sem uma única linha em C. Somente Java, C #, Ruby, Python, JavaScript. Isso é lógico, porque o ferro começou a puxar "linguagens lentas" e, devido aos tempos de desenvolvimento mais rápido e de mais programadores disponíveis, tornou-se possível gastar mais recursos na diversão do jogo, e não em encontrar vazamentos de memória.Como é a programação do microcontrolador JavaScript
A programação é como ... JavaScript. Para desenvolvimento para navegador ou Node.js. Aqui está um exemplo:
var sim = require('@amperka/Sim900r').connect();
sim.powerOn();
sim.on('sms', function(sms) {
var rgb = sms.text.split(' ');
var r = +rgb[0];
var g = +rgb[1];
var b = +rgb[2];
if (isNaN(r + g + b)) return;
fadeTo(r, g, b);
});
SPI2.setup({baud:3200000, mosi:B15});
var LED_COUNT = 150;
var colors = new Uint8ClampedArray(LED_COUNT * 3);
function fadeTo(r, g, b) {
var n = 0;
var ivalID = setInterval(function() {
colors[n*3 + 0] = b;
colors[n*3 + 1] = r;
colors[n*3 + 2] = g;
SPI2.send4bit(colors, 0b0001, 0b0011);
if (n++ >= LED_COUNT) {
clearInterval(ivalID);
}
}, 50);
}
Este programa está comprometido em receber o SMS'ki e, dependendo do texto com uma luz de execução, altera a cor da fita RGB conectada. Fizemos esse projeto para a nossa árvore de Ano Novo, mas no clássico Arduino. O código foi 4 vezes mais.Espruino Kernel
Portanto, o computador possui os mecanismos V8 e SpiderMonkey para JavaScript. E os microcontroladores têm um mecanismo Espruino.Grosso modo, o mecanismo Espruino é um firmware (esboço, esboço) para microcontroladores, que por sua vez podem executar o código JavaScript que você transfere para a placa por uma conexão serial, por exemplo, via USB.Espruino é um projeto de código aberto patrocinado por Gordon Williams. A pessoa que sozinha implementou a maior parte do ecossistema inteiro e foi com ela com sucesso no KickStarter.Este ecossistema consiste em várias partes principais:- Espruino Web IDE - um ambiente de programação;
- Firmware Espruino - máquina JavaScript que roda em um microcontrolador;
- Ferro - as próprias placas compatíveis com o Espruino;
- Biblioteca padrão e bibliotecas externas;
- Documentação
Primeiras coisas primeiro.Ambiente de programação
A gravação do código JavaScript, o download no quadro e o monitoramento da saída ocorrem no Espruino Web IDE. Este aplicativo é para o Google Chrome, por isso é colocado em 1 clique e funciona em todos os sistemas operacionais da área de trabalho.Para o usuário, esse ambiente substitui o IDE do Arduino.De acordo com a funcionalidade do Espruino IDE, é claro, é muito mais simples que o Eclipse ou o Visual Studio, mas é mais avançado que o Arduino IDE.Se você olhar rapidamente pela janela do ambiente, verá o editor de código (à direita), o painel do console (à esquerda) e o botão para fazer o download do código na placa.O console é como um monitor serial no IDE do Arduino, mas, diferentemente dele, não é apenas exibido, mas também aceita: você pode chamar uma função diretamente, sem redefinir e carregar um novo programa, ver o valor da variável, interromper o ciclo etc.Depois de ter trabalhado com mais força, você encontrará um depurador (sim, execução passo a passo, pontos de interrupção), dicas do editor, erros intermitentes em tempo real e outros truques interessantes.Além disso, diretamente do IDE, você pode atualizar a versão do Espruino Firmware para a mais recente. O próprio ambiente baixa a versão mais recente disponível e a carrega via USB.Firmware
O coração do sistema é o firmware que gira no microcontrolador. Ele é escrito em C puro, é carregado uma vez em um local separado na memória flash do microcontrolador e está comprometido em executar o código JS do usuário que vem através de uma conexão serial ou está localizado na área de usuário da memória flash.Se representarmos esquematicamente o layout da memória flash para o Iskra JS, obteremos a seguinte imagem:
Carregador de inicialização
Primeiro vem o gerenciador de inicialização, que nunca é atualizado (condicionalmente). Este é um programa pequeno, cuja execução sempre dura a vida do microcontrolador após a ativação ou redefinição.O gerenciador de inicialização faz uma coisa bem simples:- Se o botão do usuário BTN1 não for pressionado, ele transfere imediatamente o controle para o intérprete.
- Se o botão foi pressionado na inicialização, ele se auto-liga e espera até que o botão seja pressionado novamente para sair para o intérprete ou aguarda até que a nova versão do intérprete seja baixada via USB. Nesse caso, o carregador de inicialização substituirá a área de memória flash com o Espruino Firmware e obteremos a versão mais recente do intérprete no quadro.
Intérprete
Portanto, o carregador é seguido por um intérprete, que faz o trabalho principal.Quando é iniciado, ele verifica, verificando o byte mágico, se há algum código JavaScript armazenado na memória flash do usuário. Se houver, é aceito executá-lo.Se não houver código ou se sairmos manualmente do gerenciador de inicialização usando o BTN1, nada será executado na reunião, apenas preparamos uma máquina JS pronta para o trabalho.Memória livre
Após o intérprete, há uma área de memória extraível que você pode usar para armazenamento não volátil de seus dados. Esse é um tipo de substituto para a EEPROM do Arduino, mas com detalhes específicos e dezenas a centenas de vezes mais.Código personalizado
É aqui que o programa JS que o interpretador executa é armazenado. O programa está lá em texto simples, em um briquete, como está.Para que muitas bibliotecas conectadas com suas dependências e seu próprio programa se transformem em um briquete convertido e minificado, ele monitora ao carregar o IDE.Em vez disso, todo o trabalho é feito não pelo IDE, mas por seu componente independente da GUI do EspruinoTools, que possui uma interface de linha de comandos e um ponto de entrada para uso como módulo Node.js. Portanto, se desejar, você pode usar o Vim, Atom, Eclipse ou o que for mais conveniente para você desenvolver.No lugar do código, em vez de um briquete de texto, pode haver uma conversão binária de RAM armazenada, que reflete completamente o estado do intérprete no momento da gravação. Mas esses já são detalhes técnicos, não para uma visão geral rápida.Bibliotecas
As bibliotecas podem ser divididas em 3 tipos: padrão, interno e externo.Biblioteca padrão
A biblioteca padrão é de funções e objetos que podem ser usados. Entre eles, o familiar e o prescrito no idioma padrão `Date`,` JSON`, `Math`,` Object`, `setInterval`,` setTimeout` e outros-outros, bem como funções específicas do Espruino para trabalhar com pinos, interfaces de memória.Entre as funções, você encontrará `pinMode`,` digitalRead`, `digitalWrite`,` analogRead`, `analogWrite`, familiar ao arduino e não tão familiar` setWatch` para observação de pinos de entrada,` digitalPulse` para geração precisa de uma seqüência de pulsos digitais e muito mais coisas diferentes para trabalhar com periféricos.A propósito, apesar do fato de haver uma função `pinMode` na plataforma, por padrão ela funciona sozinha, nos bastidores, portanto, na maioria dos cenários, você não consegue se lembrar (o último engenheiro eletrônico estourou alto neste momento).O que você não encontrará na biblioteca padrão é `delay '. Mamma Mia, como sou grata por isso! É suficiente reorganizar um pouco o pensamento e fica claro que tudo é resolvido através de `setInterval`,` setTimeout` sem nenhum `atraso '.Em gratidão, você obtém uma execução assíncrona: pode piscar vinte LEDs independentemente, cada um com sua própria frequência. E você obtém eficiência energética: o `atraso 'está consumindo o tempo do processador e, sem o' atraso ', o processador pode dormir em paz enquanto não há nada a fazer. No Espruino, enquanto não há trabalho, o processador adormece e consome dezenas de vezes menos corrente.Bibliotecas integradas
As bibliotecas incorporadas são a mesma parte da biblioteca padrão no sentido em que são codificadas no Firmware Espruino, mas o acesso à sua funcionalidade requer conectá-las sintaticamente usando a função `require` familiar aos programadores de JavaScript.Entre essas bibliotecas, você encontrará, por exemplo, `fs` para trabalhar com sistemas de arquivos de cartões SD,` http` para criar uma interface da web para o seu dispositivo, `Waveform` para gravar / reproduzir sinais de áudio e outros.As bibliotecas padrão e internas são implementadas em C puro e o usuário é fornecido apenas com uma interface JavaScript na forma de um conjunto de objetos, funções e módulos. Isso permite que você alcance a máxima eficiência para a implementação de algoritmos complexos, deixando a possibilidade de acessá-los a partir de código de alto nível.Você mesmo pode implementar algo em C que o JavaScript diria "não, obrigado" e trazer apenas algumas caudas necessárias para executar.Bibliotecas externas
Bibliotecas externas são o que moldam a riqueza do ecossistema. Eles são escritos em JavaScript por autores do Espruino, escrevemos, usuários do Espruino escrevem.Eles podem ser armazenados em um disco local, na caixa de proteção do projeto atual, podem estar no repositório da Internet, podem estar no GitHub, podem estar no NPM.As bibliotecas são conectadas, tradicionalmente, usando `require`.Quando o ambiente vê `requere ', ele recursivamente os baixa de uma fonte remota e, ao carregar um esboço, cola seu conteúdo no início do seu programa. Assim, para o microcontrolador, um briquete integral é formado com o código sobre o qual falei acima.Essa abordagem também significa que, ao contrário do Arduino, o usuário não precisa tropeçar no fato de que, para iniciantes, a biblioteca precisa ser encontrada, baixada, colocada onde precisa. Basta apenas bater o esboço que você gosta de algum lugar e o próprio ambiente lidará com as dependências da biblioteca.Ferro
Então chegamos ao componente mais tangível do ecossistema Espruino. Estas são as placas que podem executar o Firmware Espruino.Estes incluem o Espruino Board original , Espruino Pico , bem como o Iskra JS lançado pela Amperka . Tudo já está instalado na fábrica nas placas listadas, elas estão prontas para o trabalho.Você pode tocar o pandeiro várias vezes e colocar o núcleo Espruino no STM32 Discovery, Nucleo e, de repente, no ESP8266.A documentação
Não há nada mais triste do que algo muito legal e poderoso, mas sem documentação.Espruino tem uma documentação muito boa. Em www.espruino.com/Reference, você encontrará muitos artigos de referência e treinamento.Queremos fazer mais e melhor. Portanto, criamos uma seção separada: js.amperka.ru , grave tutoriais em vídeo. O trabalho está em andamento, mas muito já foi coberto.E tradicionalmente para quem gosta de soluções em caixa, criamos um conjunto de " Iodo ". Contém Iskra JS, módulos e um livro de cores.Aqui está uma salsa. O único mistério é se pelo menos um engenheiro eletrônico correto pode ler essa linha?