Categorias
Atualizações

Milton #9

Primeira integração: teclado PS/2, conexão bluetooth, sinal VGA e rede wi-fi

Tudo junto pela primeira vez: NodeMCU (sinal VGA e wi-fi), Arduino Nano (teclado PS/2 e bluetooth). Ignorando o ruído gerado pelas protoboards, temos algo que começa a lembrar um computador pessoal e que estaria abaixo dos R$ 30 de custo com peças aliexpressificadas.

Funciona e parece fazer sentido. A foto acima não mostra, mas há espaço para a saída TVOut no esquema com a adição de mais duas conexões. Ainda estou testando programas armazenados na memória do Arduino, sem RTOS ou outra camada de abstração que permita outros usos. Também está ausente do esquema o visor LCD de 1.3 polegadas que estará embutido na carcaça do dispositivo para realizar as configurações iniciais e exibir o estado (rede, bateria etc).

Teste de teclado no aplicativo, via bluetooth

E se o usuário não tiver teclado PS/2 disponível? Comecei a explorar aplicativos para Android que poderiam interagir com Milton via bluetooth (módulos HC-06 e HM-10). O app terá opções de operar como teclado, mouse e joystick (afinal, computador sem jogos é não é computador).

Esboço inicial do aplicativo no AppInventor

Para facilitar, criei o esboço do aplicativo no AppInventor (versão offline) e pretendo mantê-lo assim. Os estudantes poderão modificar os blocos do aplicativo acordo com seus interesses.

Categorias
Atualizações

Milton #8

Arduino Nano recebe o sinal PS/2 e encaminha para NodeMCU via I2C

O Arduino Nano tem muitas portas. Já que o NodeMCU está livre para gerar sinais VGA e wi-fi (não simultaneamente, cabe ressaltar), pensei em expandir possibilidades de comunicação com o dispositivo Milton.

As pessoas podem não encontrar teclados ou lojas que vendam teclados PS/2. O USB host shield para Arduinos é muito caro (no Brasil ou China), inviabilizando ampliar o escopo para teclados USB. NodeMCU tem biblioteca para comunicação USB, mas eu retornaria ao problema de processar outra coisa além do sinal VGA. Usar dois NodeMCUs ainda não é uma opção.

Esquema de conexão do NodeMCU e Arduino Nano V3 via I2C

Categorias
Atualizações

Milton #6

Como nos jogos 8bit e demais programas gráficos oldskool, pensei em aproveitar as imagens desenhadas em milton:p como padrões (tiles) que podem ser combinados em telas mais complexas. Este tipo de estratégia foi utilizada, dentre outras razões, para economizar memória de armazenamento e processamento em computadores e consoles antigos. Com 5 ou 6 padrões modulares (16×16, 32×32 etc.) é possível produzir telas interessantes.

Blue Falcon
Blue Falcon: editor de telas do jogo Contra (Nintendo NES)

O editor milton:u importa imagens desenhadas em milton:p como padrões e permite construir telas. Desenvolvi o segundo editor sobre o primeiro, com duas diferenças:

  1. As cores foram substituídas por “carimbos” das imagens importadas (16×16 pixels);
  2. Os arquivos exportados são compostos das informações sobre a disposição dos padrões e de seus dados. Dessa forma, a importação de uma tela via cabeçalho (.h) ou arquivo texto oferecerá todas as informações necessárias para a exibição da imagem. 
Tela de milton:u com imagens importadas de milton:p

O formato de arquivo é tão simples quanto o que utilizei em milton:p. A identificação MILTONUI seguida do título e quantidade de imagens utilizadas na tela. Em seguida, os índices indicam o número do padrão que deve ser exibido em cada bloco da tela. As informações seguintes referem-se às imagens dos índices.

MILTONUI uiteste 2
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
2,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,2
2,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,2
2,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,2
2,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,2
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
MILTONPIX 16 16 pincel 0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,15,15,15,15,15,15,15,15,15,15,15,15,15,15,0
0,15,15,14,14,14,14,14,14,14,14,14,14,15,15,0
0,15,14,14,14,14,14,14,14,14,12,14,14,14,15,0
0,15,14,14,14,14,14,14,14,12,4,4,14,14,15,0
0,15,14,14,14,14,14,14,12,4,4,4,3,14,15,0
0,15,14,14,14,14,14,12,4,4,4,3,14,14,15,0
0,15,14,14,14,14,12,4,4,4,3,14,14,14,15,0
0,15,14,14,14,12,4,4,4,3,14,14,14,14,15,0
0,15,14,14,6,4,4,4,3,14,14,14,14,14,15,0
0,15,14,6,7,7,4,3,14,14,14,14,14,14,15,0
0,15,14,6,7,7,7,14,14,14,14,14,14,14,15,0
0,15,14,3,3,3,3,3,3,3,3,3,3,3,15,0
0,15,15,14,14,14,14,14,14,14,14,14,14,15,15,0
0,15,15,15,15,15,15,15,15,15,15,15,15,15,15,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
MILTONPIX 16 16 borracha 0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,15,15,15,15,15,15,15,15,15,15,15,15,15,15,0
0,15,15,14,14,14,14,14,14,14,14,14,14,15,15,0
0,15,14,14,14,14,14,14,14,4,14,14,14,14,15,0
0,15,14,14,14,14,14,14,4,4,4,14,14,14,15,0
0,15,14,14,14,14,14,4,4,4,4,4,14,14,15,0
0,15,14,14,14,14,4,4,4,4,4,4,3,14,15,0
0,15,14,14,14,1,4,4,4,4,4,3,14,14,15,0
0,15,14,14,6,6,1,4,4,4,3,14,14,14,15,0
0,15,14,6,6,6,6,1,4,3,14,14,14,14,15,0
0,15,14,1,6,6,6,6,1,14,14,14,14,14,15,0
0,15,14,14,1,6,6,1,14,14,14,14,14,14,15,0
0,15,14,14,14,1,1,14,14,14,14,14,14,14,15,0
0,15,15,14,14,14,14,14,14,14,14,14,14,15,15,0
0,15,15,15,15,15,15,15,15,15,15,15,15,15,15,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

Outra vantagem do editor de telas é a possibilidade de controlar a quantidade de memória disponível para construir aplicações. Planejei empregar memórias externas EEPROM para armazenar elementos básicos da interface gráfica, deixando os arquivos criados por usuários no cartão microSD. Este caminho permitiria atualizações do “firmware” de Milton sem comprometer os documentos dos usuários.

Servido web do dispositivo (NodeMCU).

As duas ferramentas rodam satisfatoriamente no servidor web do dispositivo, ocupando pouco mais de 600kb.

Categorias
Atualizações

Milton #3

A biblioteca ESPVGAx de Sandro Maffiodo é um feito. Com conexões muito simples e alguns resistores é possível gerar sinal VGA em duas cores. A plataforma destino é a Esp8266, que tenho na encarnação NodeMCU, com programação direto na IDE do Arduino.

Conexões para saída VGA (1bit)
Conexões para saída VGA (1bit)

O número reduzido de cores tornaria a plataforma menos atraente e o próprio Sandro Maffiodo produziu outra versão com até 16 cores. Nos testes não foi possível explorar os limites de processamento do Esp8266 na geração do sinal, especialmente quando outras rotinas estão em execução. Segundo o autor do projeto, não é possível acessar o Wi-fi ou realizar comunicação serial durante o redesenho do vídeo.

Geração de sinal branco (fundo azul)
Geração de sinal VGA – primeiro plano branco, fundo azul

Manipular literalmente bits para gerar o sinal VGA é uma arte. Tem gente que constrói placas de vídeo caseiras bitbangueando as cores. E há pessoas geniais, como Ben Eater.

Por enquanto ficarei na versão light da solução 🙂