Java para Arduino

Fala galera, sou novo no fórum e estou trabalhando em um projeto de pesquisa com arduino, porém quero trabalhar com Java para programação. Comecei estudar umas bibliotecas já mas ainda não vi muita gente aplicando na prática. Alguém aqui já usou ?

@contato_angelomendes você quer programar o Arduino usando JAVA ou quer interfacear um programa em JAVA com o Arduino?

A pergunta do @mlemos é pertinente, você não pode escrever o programa que ficará na memória do microcontrolador diretamente em Java, a não ser que você altere a linguagem para compilar seus bytecodes para AVR, mesmo assim, é de se questionar se um microncontrolador com um espaço de memória reduzido vai ter o suficiente para armazenar um bootloader, uma máquina virtual alterada e finalmente o código e sua forma compilada.

Talvez se houvesse mais espaço ou um armazenamento externo seria possível fazer o que Damien George fez com Micropython e a pyboard. Ele criou um dialeto de Python com um interpretador bem diferente e inseriu no MCU, assim as pessoas podem programar diretamente em Micropython e sua API para o MCU utilizado.

Já se você pensa em interfacear o seu projeto com Java, ou seja, criar uma GUI ou mesmo um prompt para enviar ações para a plataforma, você apenas precisa de uma biblioteca para efetuar conexão Serial e nada mais e isso, a maioria das linguagens tem disponíveis.

Na verdade eu quero programar o Arduino em Java mesmo, fiz uma pesquisa rápida e achei esse link http://www.drdobbs.com/jvm/control-an-arduino-from-java/240163864 e alguns mais … Pensei em usar JavaScript também com o NodeJS, porém prioridade para Java, usando um SD para armazenar o maquina virtual Java seria possível trabalhar ? E se armazena-lá em um repositório e fazer download com um shield ethernet ( não pesquisei sobre isso, desconsiderem caso seja besteira).

PS: Desculpa pela demora para responder, estou enrolado na faculdade e não estou recebendo notificações por e-mail.

O que o cara está fazendo aí neste link não é programar o Microcontrolador em Java, o que ele está fazendo é o que foi informado no 3º parágrafo do meu post anterior: Uma conexão serial para controlar um sketch Arduino, ou seja, pelo que entendi da sua resposta, não é o que você quer fazer.

Você quer programar o MCU com Java diretamente e, para isso, você precisa ou reescrever a máquina virtual para que compile os bytecodes de Java para AVR (RISC) - isso se quiser manter a natureza interpretada de Java - ou criar uma linguagem com um dialeto semelhante ao do Java capaz de compilar para AVR (RISC).

Encontrei algumas soluções, como NanoVM, MicroJ e HaikuVM, se procurar, provavelmente encontrará outras.

1 curtida

Andei lendo mais achei esse link aqui também https://github.com/SINTEF-9012/JArduino, com um projeto bem interessante no github. Mas pelo que já li o desempenho do Arduino fica bem reduzido ao usar Java. Talvez para meu projeto ( estação meteorológica) seja mais interessante usar linguagem de baixo nível mesmo pois vamos precisar de comunicação com rede e processamento 24 horas dos dados recebidos pelos sensores. Mesmo assim obrigado pela ajuda, seguirei postando aqui o andamento do projeto junto à futuras dúvidas …
Ps: Estamos no inicio ainda, vamos comprar os sensores este mês e no próximo começamos a programação.

Bom, o desempenho tem que cair mesmo e cair drásticamente, primeiro porque a pequena memória do MCU já está comprometida com um bootloader (se usar mesmo Arduino), você soca ainda uma VM que vai ocupar mais espaço desnecessariamente, além disso, a baixa velocidade de 16MHz com cristal tem que fazer a VM compilar o código para bytecode e, sempre que executar, a mesma VM deve interpretar a versão compilada do código. Imagino como a memória e velocidade de UNO ficam comprometidas com todo esse trabalho apenas para ter Java rodando.

Usar Arduino ou AVRLibc não quer dizer que está programando em baixo nível, programar em baixo nível é usar o Assembly do MCU (baseado em RISC) ou binário direto.

Se você quer mesmo usar Java num MCU AVR como o do UNO, a opção mais sensata seria criar uma linguagem com um dialeto de Java que sua compilação fosse externa, então você apenas enviaria o código já pronto para o MCU que o executaria nativamente.

Entendi, não iria valer a pena mesmo. Vou ter 7 sensores monitorando 24 horas e mandando os dados para um repositório, então não posso perder nada em processamento …