Programando Aduino com Java

Olá Pessoal.

Venho divulgar um projeto que tenho trabalhado nos últimos meses para permitir a programação orientada a objetos para Arduino usando a linguagem Java. Trata-se de uma plataforma de software criada para permitir a abstração da programação do Arduino através de um protocolo próprio criado para integrar um código escrito em Java com um Sketch especializado colocado no Arduino.

A plataforma está ainda em Prova de Conceito e foi apresentado no meu TCC do curso de MBA, com proposta de trabalhos futuros para conclusão da idéia.

Aos interessados em programação orientada a objetos com Java e sua utilização para programar o Arduino, recomendo a leitura da apresentação do trabalho aqui, bem como o contato com meu e-mail colocado no material para troca de idéias e contribuições aos interessados em sua evolução.

Estou à disposição para avançarmos com a evolução da plataforma criada chamada Java.ino e a consolidação da programação com Java para o hardware do Arduino.

Grato pela atenção e contribuição de vocês.

Aqui fica a minha critica:

  • O slide 4 tem uma mentira... o Arduino é programado em C++... o C não permite coisas como Serial.Print(). Daí em diante, todos os argumentos para justificar a utilização de Java são falsos pois assentam na falsa premissa que o Arduino apenas usa C.

  • Depois o teu código parece usar threads, mas utilizas pausas e while (true) o que não faz sentido pois com Java podes executar e escalonar tarefas em vez de fazeres um loop.

  • O código em Java é bastante mais denso e nem por isso melhor. Tens blocos de try-catch para funções que não vão retornar erros.

Acabei por não perceber exactamente como isto é feito ou o que foi feito. Ou seja:

  • Escreves o código Java que depois é compilado para funções do Arduino? Efectivamente criaste um compilador Java para Arduino.
  • O código Java corre dentro duma JVM instalada no Arduino? Isto é impossível.
  • O código Java corre no computador e apenas dá as ordens ao Arduino para executar (como escrever nos LED's, etc??), isto é inútil. A única coisa de valor é mesmo o protocolo de comunicação que qualquer engenheiro electrotécnico ou informático consegue definir numa tarde.

Mas talvez seja eu que não percebo e como tal gostaria que explicasses melhor o conceito. Nota que estou a tentar ser construtivo, mas os slides não transmitem muita informação acerca do que foi feito.

E esqueceste-te de referir a performance desta solução relativamente a resposta em tempo real do software com a implementação em Java...

Olá, agradeço demais suas contribuições críticas e o tempo que tenha dedicado à análise, pois serão bastante válidas para o aprimoramento do trabalho, especialmente nas que eu possa considerar aplicáveis e viáveis ao Projeto.

ELABORO ENTÃO NA SEQUÊNCIA, AS RESPOSTAS PARA OS ITENS APONTADOS EM SEU COMENTÁRIO CRÍTICO.

Agradeço e fico à disposição de todos que queiram e possam fazer um "test-drive" da Plataforma Java.ino, e quem sabe contribuir mais ainda na implementção e melhoria de sua aplicação. A PoC foi aceita e aprovada pelos professores avaliadores do Projeto.

Estou ainda à disposição dos interessados em evoluir ou utilizar a pesquisa aqui realizada, no desenvolvimento de novos projetos acadêmicos (TCC, artigos, monografias, etc.)

Fico à disposição para contatos.

Primeiro- Concordo plenamente na afirmação do Arduino ser programado em C++, porém vale esclarecer que a linguagem C++ é oriunda diretamente da linguagem C, em todas as suas estruturas básicas, porém incorporando ajustes de sintaxe para contemplar o paradigma de POO (programação orientada a objetos), deixando assim sua estrutura flexível para alternar ou variar sua implementação com POO e Estruturada (de sua origem), tornando sua aplicabilidade, de certa forma, confusa ou imprecisa em relação à característica de ortogonalidade de uma Linguagem de Programação.

E ainda, a estrutura básica de programação do Arduino define as funções setup() e loop() de forma Procedural, e não POO, o que leva aos iniciantes em programação com o Arduino a ser levado para utilizar um código estruturado/procedural da linguagem C++, "um desvio de finalidade", com um conjunto de funções em bibliotecas que foge completamente aos princípios da POO, embora utilizando "objetos" (como o Serial.print()) pré-definidos na biblioteca de alguns componentes para o Arduino. Por isso, a programação no Arduino pode ser considerado um modelo estruturado, "em sua essência" e baseado na linguagem C (procedural). Não pretendo assim, convencê-lo ou mudar sua opinião em relação à argumentação do trabalho, mas apresentar de forma clara e objetiva as considerações técnicas e metodológicas realizadas na pesquisa feita, e não como argumentação mentirosa ou argumentos falsos.

Vale ressaltar ainda que a linguagem Java é puramente orientada a Objetos, com aplicação ortogonal dos princípios que norteiam a POO (encapsulamento, herança e polimorfismo), desde sua origem e criação. Isso torna um modelo de programação mais puro em relação a este paradigma, não que seja melhor ou pior que C/C++, mas que possui esta diferenciação para análise de seus usuários (programadores). Cada uma destas linguagens possui sua aplicabilidade, que neste trabalho não tem a menor intenção ou pretensão de fazer a comparação ou avaliação destas linguagens.

Alguns links para complementar minhas colocações:

Segundo- A utilização de Threads no código Java não traz nenhuma relação direta com o Projeto Java.ino, e sim uma forma de implementar um Sinal de Trânsito, com loop e pausas. Esta característica de implementação não diz respeito à forma como a comunicação do código é realizada pelo protocolo de comunicação (JIP) e o Arduino. Escalonar tarefas com threads é uma característica intríseca da linguagem Java e pode ser utilizado independentemente do que se pretende aplicar no Aduino através do Projeto Java.ino.

Terceiro- Na comparação do código escrito em Java e o Sketch correspondente para piscar um Led no Arduino, concordo que o código Java possui maior verbosidade (mais denso) neste caso específico, mas pretendemos ganhar em escalabilidade do projeto, pois trabalhando com POO e encapsulamento de objetos de componentes, a escalabilidade do código é facilmente comprovada. O bloco try-catch utilizado no exemplo de aplicação do Java.ino é também uma característica da implementação feita neste caso, e não uma implementação do Java.ino, pois o método sleep exige a verificação em código de uma Exceção Verificada do tipo InterruptedException.

Quarto-
Escreves o código Java que depois é compilado para funções do Arduino? (NÃO)
Efectivamente criaste um compilador Java para Arduino. (NÃO)
O código Java corre dentro duma JVM instalada no Arduino? (NÃO) Isto é impossível. (CONCORDO)
O código Java corre no computador e apenas dá as ordens ao Arduino para executar (como escrever nos LED's, etc??), (CONCORDO PARCIALMENTE SIM)
isto é inútil. (DISCORDO COMPLETAMENTE) - JAVA NÃO RODA SÓ EM "COMPUTADOR", ALÉM DE QUE A INUTILIDADE É SUBJETIVA E RELATIVA EM RELAÇÃO A UM PROJETO ESPECÍFICO, DIFICILMENTE AVALIADA DE FORMA GENÉRICA.

Na verdade o projeto não faz o código Java rodar no Arduino, e sim implementar uma aplicação em Java ou qualquer linguagem desejada (desde que implemente o Protocolo JIP) comandar um Dispositivo (projeto físico) implementado no Arduino, que estará preparado para receber comandos do protocolo através de um Sketch (SKPn) que também possui comunicação variada por Serial, Ethernet, Bluetooth, ou qualquer formato possível, dependendo de sua implementação.

Quinto- O protocolo de comunicação, chamando JIP, foi pensado para ser bastante simples e objetivo em sua finalidade, além de facilmente implementado por qualquer profissional (engenheiro electrotécnico ou informático), estudante, hobbista ou curioso, desde que tenha em suas habilidades o potencial de escrever códigos de software em uma linguagem de programação, porém não tenho certeza se "numa tarde".

Sexto-
O projeto está em fase de construção e avaliação técnica, porém temos como propostas futuras a avaliação de testes de performance, que também serão realizadas no tempo apropriado, porém já temos resultados que não está com a performance igual em relação à resposta em tempo real do código sendo executado diretamente no Arduino e implementado de forma específica para o dispositivo.

Assim, temos na aposta do projeto o benchmarking de vários fatores ou variáveis necesárias para a viabilidade técnica e operacional de um projeto embarcado, considerando suas aplicações e interfaces externas com outros dispositivos e componentes, como por exemplo, a aplicação da Internet das Coisas (IoT).

Mais uma vez, agradeço a todos pela contribuição e colaboração no que for possível.

:wink:

Obrigado pelas respostas.

O facto do Arduino ter escolhido a implementação através dum método procedural prende-se com a simplicidade que é exigida do projecto. Ou seja, eles podiam ter-se ficado pelo C apenas (como a maioria das pessoas que desenvolve com microcontroladores) ou só com C++, mas nenhuma delas por si só é mais simples de como é com ambas.

Outro pormenor que é esquecido pela linguagem Java é a importância dos apontadores em sistemas pequenos devido à flexibilidade que permite. Como implementarias funções como pinMode() ou digitalWrite sem apontadores em Java? Eu sei, não é o propósito do projecto mas é uma limitação séria para o uso da mesma em todos os contextos de computação.

Talvez devesse ter explicado melhor o meu comentário "de uma tarde". Eu referia-me à definição dum protocolo de comunicação, ou seja como é o formato das tramas a ser enviadas de parte a parte. A programação do mesmo demora mais ou menos tempo dependendo da experiência prévia. A mim, ambas estas partes demoraria uma tarde. Nota que eu não defini o meio de comunicação, apenas o protocolo. Mas como o Arduino tem uma interface com meios de comunicação consistente entre dispositivos, isto não é propriamente um desafio.
Nota também que nos posts aqui no fórum uma boa parte dos meus tem a ver com protocolos de comunicação.

Gostaria de conhecer um engenheiro electrotécnico que pensa de forma diferente da minha acerca de resolver um problema que pode ser resolvido com um microcontrolador com um microcontrolador e computador... Já para um engenheiro informático, suponho que não seja tão esquisito.

Então se bem entendi, tu definiste um protocolo, implementaste o protocolo no Arduino para ser possível de usar com vários interfaces e criaste um programa Java que basicamente lê entradas e escreve saídas do Arduino? Estou 100% correcto agora?
Ou melhor, criaste apenas uma maneira de alguém com um programa Java ligar/desligar LED's ou relés e ler entradas analógicas? Ou seja, fizeste do Arduino um módulo de entradas/saídas remoto.

Já tinhas visto o protocolo Firmata? Ou o Processing?

Já agora, não comentaste acerca do comportamento da tua solução em relação a aspectos real-time...

Não leves a mal... o que fizeste é um trabalho que demonstrará capacidades e conhecimento em Java e protocolos (se correctamente definidos), mas não é nada de extremamente excitante ou que vá revolucionar o mundo.

Agradeço também os comentários.

Aumentastes consideravelmente o entendimento do Projeto, mesmo assim sem alcance de sua plenitude, e acrescento ainda que o propósito nunca foi a revolução do mundo de desenvolvimento, seja em Java, C/C++ ou no Arduino, mas considerar numa pesquisa de trabalho científico, a possibilidade de ampliar cada vez mais a penetração da plataforma Arduino em projetos de sistemas embarcados, especialmente com o uso da linguagem Java, que possui uma grande comunidade de desenvolvedores em ação atualmente.

Ou seja, o principal resultado demonstrado neste trabalho foi o poder da abstração quando aplicamos os conceitos e princípios da orientação a objetos na programação de soluções de componentes de software. A plataforma proposta viabilizou integrar as plataformas estudadas utilizando a abstração de objetos através da metodologia OO. Definiu ainda, para o desenvolvimento de programas para a plataforma Arduino, uma nova alternativa para desenvolver projetos de dispositivos embarcados que sejam prototipados através do uso desta plataforma, utilizando especialmente a linguagem de programação Java, em contraposição ao tradicional modelo de programação C/Serial/RxTx/Java.

Esta alternativa de programação orientada a objetos para o Arduino demonstrou a possibilidade de programar através de uma abstração completa da estrutura de hardware existente no Arduino, utilizando um modelo de classes e componentes. Esta nova forma de programar o Arduino com a perspectiva de objetos permitiu criar operações do microcontrolador e o controle das portas de comunicação utilizadas para a conexão de sensores e/ou atuadores através de objetos instanciados, e definir o comportamento de tais objetos utilizando os conceitos da POO.

Por fim, esclareço que a evolução desta proposta, ainda em Prova de Conceito - PoC, possui escalabilidade para abranger a Abstração de qualquer circuito projetado no Arduino, através de classes/objetos implementados em Java e interagindo diretamente com o Arduio através do protocolo de comunicação, bastante flexível para ampliação de suas funcionalidades por intermédio da arquitetura da plataforma Java.ino.

Este foi então nosso propósito na pesquisa deste trabalho, e quem sabe consigamos engajar mais ainda a comunidade Java nos projetos Arduino, através da metodologia OO, de forma natural com a programação de objetos.

Explica-me então qual o alcance do projecto na sua plenitude...

Eu não sou o teu professor a quem tens de convencer que fizeste uma grande coisa. Sou um engenheiro electrotécnico que vê que tu desenvolveste um protocolo de rede de campo para usar Arduinos como nós de entrada e saída.
O facto de programares em Java não é nada de especial a não ser, dentro de certos parâmetros a possibilidade de correr em multi-plataforma.

Depois o teu conceito de dispositivos embarcados está fundamentalmente errado. Um dispositivo embarcado é colocares o Arduino (dispositivo embarcado) a executar uma função sem o apoio de outro processador. No teu caso, o Arduino é um dispositivo "burro" e o processamento tem de ser feito num equipamento a correr uma JVM...

Ou seja, o que seria resolvido por uma placa de 5 dólares do chinês agora necessita dum computador de 400 dólares para fazer qualquer que seja a funcionalidade desejada.

Isso não me parece interessante de forma alguma, principalmente nos dias de hoje em que podes comprar uma Raspberry Pi Zero por uns 10 ou 15 dólares e teres tudo num pacote... e muito possivelmente programado em Java também. E com bastantes mais soluções a vários preços como a Raspberry Pi como as BeagleBone indo até a SBC's industriais como a gama CX da Beckhoff.

Isto é um projecto para quê? Engenharia informática?

Muito bem. Minha intenção não é o convencimento meu caro colega, mas esclarecer aos participantes deste fórum, as questões por você aqui colocadas. Acho que a discussão está muito boa e rica de detalhes técnicos. Acho ainda que o espaço é bastante amplo para atingir um público interessado em hardware e software, especialmente no uso do Arduino como plataforma de prototipação e desenvolvimento.

Acho que estamos próximos do entendimento, ao passo que sou Engenheiro de Software e pesquisador em ambientes de desenvovlimento e Linguagens de Programação em âmbito científico e empresarial. Uma proposta de desenvolvimento de uma alternativa experimental para desenvolvimento de software de controle do Arduino em ambientes heterogêneos, é considerado fator de importância nas pesquisas de Internet das Coisas (IoT) para o desenvolvimento de objetos inteligentes.

Acredito que o teu entendimento de dispositivo embarcado está limitando sua aplicação em ambientes heterogêneos de interação que extrapola o uso de objetos inteligentes da IoT.

Sommerville (Engenharia de Software, 2011) define sistemas de software embutido (também chamado embarcado) como computadores que interagem diretamente com dispositivos eletrônicos, e seu software deve reagir a eventos gerados pelo hardware, além de emitir sinais de controle em resposta a tais eventos. Nestes sistemas, o software é embutido no hardware, normalmente respondendo em tempo real a eventos detectados no ambiente externo.

JVM roda em diversos dispositivos e o processamento é realizado de forma colaborativa entre estes dispositivos interligados no Sistema, incuindo componentes desenvolvidos na plataforma Arduino. E ainda, o custo necessário para implementação de um projeto está diretamente relacionado ao objetivo e propósito de sua aplicabilidade e funcionalidades, muitas vezes não limitando-se a apenas uma placa de 5 a 15 dólares, e sim em sua viabilidade financeira, técnica e operacional.

Os resultados e propósitos do projeto foram escritos em post anterior, venham ou não a te convencer, servirá de pesquisa experimental para evolução (não revolução) do processo de desenvolvimento de sistemas embarcados em meio acadêmico/científico, e se no futuro se tornar viável técnica e operacionalmente, poderá ser aplicado em projetos reais de produtos inteligentes.

newtongomes:
Acho ainda que o espaço é bastante amplo para atingir um público interessado em hardware e software, especialmente no uso do Arduino como plataforma de prototipação e desenvolvimento.

Mas tu nao estas interessado em aumentar o uso do Arduino... apenas fazer com que as pessoas possam programar algo em Java que acende luzinhas e reles.

Uma proposta de desenvolvimento de uma alternativa experimental para desenvolvimento de software de controle do Arduino em ambientes heterogêneos, é considerado fator de importância nas pesquisas de Internet das Coisas (IoT) para o desenvolvimento de objetos inteligentes.

Mas o teu projecto e o preciso oposto de coisas inteligentes... um computador a correr Java ligado a um Arduino nao e a definicao de coisas inteligentes.

Acredito que o teu entendimento de dispositivo embarcado está limitando sua aplicação em ambientes heterogêneos de interação que extrapola o uso de objetos inteligentes da IoT.

Eu nao sou importante o suficiente para definir o que e um dispositivo embarcado... o que referi la em cima e precisamente o que toda a gente define como dispositivo embarcado.
Mais uma vez, o teu projecto nao criou nada de inteligente... apenas reduziu a aplicabilidade dum Arduino como dispositivo embarcado pois necessita dum computador de atrelado.

Sommerville (Engenharia de Software, 2011) define sistemas de software embutido (também chamado embarcado) como computadores que interagem diretamente com dispositivos eletrônicos, e seu software deve reagir a eventos gerados pelo hardware, além de emitir sinais de controle em resposta a tais eventos. Nestes sistemas, o software é embutido no hardware, normalmente respondendo em tempo real a eventos detectados no ambiente externo.

E onde e que diz aqui para atrelar um computador a correr Java para fazer a parte inteligente em vez de correr a parte inteligente no dispositivo embutido?

JVM roda em diversos dispositivos e o processamento é realizado de forma colaborativa entre estes dispositivos interligados no Sistema, incuindo componentes desenvolvidos na plataforma Arduino. E ainda, o custo necessário para implementação de um projeto está diretamente relacionado ao objetivo e propósito de sua aplicabilidade e funcionalidades, muitas vezes não limitando-se a apenas uma placa de 5 a 15 dólares, e sim em sua viabilidade financeira, técnica e operacional.

No teu exemplo, o processamento nao e executado de forma colaborativa. O arduino nao processa nada, apenas responde a comandos.
O custo do projecto e a parte mais importante sempre. Desde que cumpra o proposito, o projecto sera sempre regido pelo custo. E inocencia a mais pensar o contrario. No entanto, e falando do exemplo em questao um computador SBC como os referidos sao uma solucao melhor e mais barata do que atrelar um computador a um Arduino e chamar a isso tudo o que estas a chamar.

Os resultados e propósitos do projeto foram escritos em post anterior, venham ou não a te convencer, servirá de pesquisa experimental para evolução (não revolução) do processo de desenvolvimento de sistemas embarcados em meio acadêmico/científico, e se no futuro se tornar viável técnica e operacionalmente, poderá ser aplicado em projetos reais de produtos inteligentes.

Os resultados do projecto nao foram apresentados em lado algum.

Qual e o delay que eu posso esperar desde dar um comando para ligar um LED e o led efectivamente ligar? Qual e a variacao nesse tempo de resposta?
Qual e a influencia do Sistema Operativo nessa resposta?

Onde respondeste a estas questoes? E como podes falar de sistemas embebidos sem sequer pensares em algo deste genero?

Mas tu nao estas interessado em aumentar o uso do Arduino... apenas fazer com que as pessoas possam programar algo em Java que acende luzinhas e reles.

R-> É claro que o objetivo do projeto está voltado ao uso do Arduino, pois sua implementação envolve em toda parte a plataforma Arduino com aplicações e funcionalidades. Isto está claro na definição do projeto.

Mas o teu projecto e o preciso oposto de coisas inteligentes... um computador a correr Java ligado a um Arduino nao e a definicao de coisas inteligentes.

R-> Para rodar java não é necessário um Computador obrigatoriamente. Android roda Java, SmartTV roda java, Raspberry roda Java, Browser/Internet roda Java, entre muitos outros dispositivos disponíveis que possui JVM.

Eu não sou importante o suficiente para definir o que e um dispositivo embarcado... o que referi la em cima e precisamente o que toda a gente define como dispositivo embarcado.
Mais uma vez, o teu projecto nao criou nada de inteligente... apenas reduziu a aplicabilidade dum Arduino como dispositivo embarcado pois necessita dum computador de atrelado.

R-> A questão aqui não envolve importância, mas leitura de fontes de referência e profundidade no assunto. O Projeto não necessita necessariamente de um computador, mas uma conexão (Ethernet, Serial, Bluetooth, etc.) com um dispositivo que rode JVM. Se não houver necessidade deste requisito, não será aplicável a proposta aqui apresentada. Não é nosso propósito substituir toda aplicação do Arduino por esta proposta (isso você precisa entender), e sim determinados projetos com requisitos específicos, especialmente a codificação Java para comandar o Arduino.

E onde e que diz aqui para atrelar um computador a correr Java para fazer a parte inteligente em vez de correr a parte inteligente no dispositivo embutido?

R-> Java faz parte do Sistema na configuração proposta. Não significa um computador apenas. Mesmo que seja, o computador faria a interface externa com o circuito implementado no Arduino. A internet poderia ser usada como interação lógica do objeto inteligente implementado no Arduino.

No teu exemplo, o processamento nao e executado de forma colaborativa. O arduino nao processa nada, apenas responde a comandos.
O custo do projecto e a parte mais importante sempre. Desde que cumpra o proposito, o projecto sera sempre regido pelo custo. E inocencia a mais pensar o contrario. No entanto, e falando do exemplo em questao um computador SBC como os referidos sao uma solucao melhor e mais barata do que atrelar um computador a um Arduino e chamar a isso tudo o que estas a chamar.

R-> O arduino processa as informações recebidas pelos sensores e pode realizar operações nos atuadores, seja de forma autônoma ou sob comando da camada de lógica externa do Sistema. Estes sinais recebidos são transferidos para a interface externa que possui a abstração necessária para realizar o processamento requerido no dispositivo desejado, ou até no próprio arduino de forma comandada.

Os resultados do projecto nao foram apresentados em lado algum.

R-> Podes comprovar nos posts anteriores

Qual e o delay que eu posso esperar desde dar um comando para ligar um LED e o led efectivamente ligar? Qual e a variacao nesse tempo de resposta?

R-> O delay irá depender do meio de transferência utilizado. Por exemplo, em testes realizados na interface Serial, o delay foi mínimo e os comando processados quase instantaneamente, com possibilidades de otimização de comandos para melhorias do projeto. Ao receber o comando na Serial, o arduino processa e executa a operação imediatamente, que pode ser o acionamento de uma porta (Digital ou Analógica) ou uma operação complexa como realizar operações em impressoras 3D, comandar robôs, realizar operações em domótica, ou qualquer operação que esteja disponível no protocolo de comunicação.

Qual e a influencia do Sistema Operativo nessa resposta?

R-> Nenhuma. O meio de comunicação é único fator relevante na troca de mensagens.

Onde respondeste a estas questoes? E como podes falar de sistemas embebidos sem sequer pensares em algo deste genero?

R-> Estamos em prospecção tecnológica.

Espero ter contribuído com o melhor entendimento. Não propomos substituir todos os programas e projetos de Arduino pela proposta aqui apresentada, mas apenas programar o Arduino com a linguagem Java e a programação orientada a objetos, quando isso for requisito.

Como exemplo, citamos a utilização deste projeto para ensino de abstração e programação, onde o plataforma Arduino poderia ser um componente pedagógico no ensino da programação de componentes eletrônicos e abstração de objetos em Java.

Outro exemplo pode ser aplicado em laboratórios de protótipos de circuitos eletrônicos comandados em Java.

Logo, encerro com o seguinte questionamento ao leitor interessado:
Queres programar o Arduino com Java ? Podes encontrar uma alternativa no Projeto Java.ino

Valeu. Desejo um bom trabalho a todos.

Android roda Java, SmartTV roda java, Raspberry roda Java, Browser/Internet roda Java, entre muitos outros dispositivos disponíveis que possui JVM.

Voltamos ao mesmo... para resolver algo com Java temos de ter um Arduino mais outro dispositivo.

O delay irá depender do meio de transferência utilizado. Por exemplo, em testes realizados na interface Serial, o delay foi mínimo e os comando processados quase instantaneamente, com possibilidades de otimização de comandos para melhorias do projeto.

Quase instantaneamente para um humano é uma eternidade para um microcontrolador. Ou tens números ou não tens nada.

Nenhuma. O meio de comunicação é único fator relevante na troca de mensagens.

Não acredito... mais uma vez faltam números. Se tens um computador apenas a correr o código Java (negando assim um dos benefícios do projecto), é óbvio que não vai haver uma diferença brutal (dependendo do driver serial que tens em Java). Mas e se estiveres a correr uma base de dados e servidor web ao mesmo tempo?

Também não indicas o tráfego com que testaste... se vais testar apenas para ligar e desligar um LED, então não serve de exercício para ver qual é o limite a partir do qual a solução apresenta problemas.

O que tu tens de entender é que o que foi desenvolvido foi um protocolo de comunicação e um driver para utilizar funcionalidades do Arduino através de Java. Nada mais nada menos.
Mas tu és incapaz de assumir que efectivamente foi isso que foi desenvolvido... e mais, nem sequer apresentas resultados palpáveis para justificar o projecto e robustez do dito protocolo.

Se eu tiver de escolher este protocolo ou outro qualquer, é essa informação que me vai fazer decidir se é bom ou não... ou se é bom ou não para a aplicação em questão. Mas tu és incapaz de ver as coisas por esse lado e queres fazer disto mais do que é na realidade.

Boa sorte com o projecto

Sei que é um tópico já antigo, mas comecei recentemente a utilizar arduino e a me enveredar nas questões ligadas à programação. Estou desenvolvendo um projeto usando arduino Leonardo, no qual o arduino deverá interagir com uma página web que utiliza Java. estou com dúvidas quanto a mandar os comandos de navegação da página para que o arduíno "clique" em botões, sem ter que usar a biblioteca mouse disponível no Leonardo, pois nem sempre o cursor estará na mesma posição em relação ao botão alvo. Não encontrei em lugar algum alguma lista de códigos para mandar os comandos do tipo... btnLocalizar".click" ou ".activate" (para acionar um botão na página) ou coisa que o valha. Uma lista com esses comandos seria de uma ajuda imensa já.

Hello! I know the topic is old, but I would like to include an incredible curiosity.

You said that a JVM on Arduino was impossible. But there is a project called NanoVM, it is literally an 8 Kb JVM, it can run in an Atmel AVR ATmega8. It is obviously not a complete JVM, it is quite limited, but it has everything you need to program an arduino without using C/C++.

Native NanoVM classes include:

  • java/lang/Object (object handling)
  • java/lang/System (IO handling)
  • java/io/PrintStream (console output)
  • java/lang/StringBuffer (string processing)
  • asuro (asuro control)
  • Native support for LCDs, AVR io, etc.

If you are wondering what "asuro" is, it was the first robot made with this project, in fact the reason why NanoVM was created.

You can visit the NanoVM website here:

http://www.harbaum.org/till/nanovm/index.shtml

As if that were not enough, after this project came a similar one, HaikuVM, which also works with atmega8, but has already been used to program lego robots!

You can enter the HaikuVM website here:

Speaking of Lego, there is a Java project made specifically to program lego robots, called leJOS, "Java for Lego Mindstorms", works the same way as the other JVMs mentioned above.

You can enter the leJOS website here:

http://www.lejos.org

There is also a more ambitious project also for Lego, that instead of just having a JVM it has EV3Dev, which is an operating system based on Linux Debian that runs on various platforms compatible with Lego Mindstorms, the great advantage of having linux under the JVM is being able to use the new features of Java, which the older projects mentioned above do not have, with ev3dev-lang-java you can use OpenJDK 11, or OpenJDK 14.

You can enter the ev3dev-lang-java Github page here:

bubulindo:
Voltamos ao mesmo... para resolver algo com Java temos de ter um Arduino mais outro dispositivo.

Parece que ninguém nunca ouviu falar da plataforma Java Embedded, a melhor explicação que posso dar é a seguinte imagem: