1 de dezembro de 2018

Gravar arquivo .hex no Arduino - Proteger Sketch

Uma forma de proteger seu código fonte é compartilhar o arquivo compilado.


Após desenvolver o programa, é possível compilar gerando um arquivo com a extensão .hex e gravá-lo no Arduino.
Para projetos profissionais é uma maneira de manter seu código fonte seguro, podendo enviar para gravação nas placas sem compartilhar o desenvolvimento da lógica de programação.

Gerar o arquivo compilado:
Na barra de menus da IDE Arduino, em Sketch \ Exportar Binário compilado, ou com as teclas de atalho Ctrl + Alt + S.


Serão gerados dois arquivos .hex no mesmo diretório do arquivo .ino.


Um possui somente código fonte, o outro possui o bootloader compilado junto.

Quando o microcontrolador é energizado, o primeiro programa a ser executado é o bootloader, e após a sua finalização que é executado a função setup() e depois loop() e as demais.

A vantagem de gravar no microcontrolador o arquivo sem o bootloader é que o programa inicializará no ato que o circuito for energizado. A diferença é de alguns segundos mas, dependendo do projeto, isso pode ser um diferencial.

Gravar o arquivo compilado no Arduino:
Para efetuar o upload do arquivo .hex no microcontrolador encontrei algumas - poucas - opções, baseadas em um front para simplificar a utilização do AVRDUDE.

Fiz minha própria versão e deixo aqui para compartilhar com vocês.


É possível efetuar o upload do arquivo .hex para as versões de Arduino Uno, Nano, Pro Mini, Mega e Gemma (Attiny85).
Ao selecionar o modelo da placa, os demais campos já serão preenchidos automaticamente.

O download do HexArduino pode ser feito através dos links:
https://www.4shared.com/zip/KVBTCuuVea/HexArduino.html
https://mega.nz/file/7Z1xmQpQ#9LQLCqNcOMIbB111AFgHW9pJbV2bUwt2oht_93sdPtk

Para mim é útil e, espero que possa ser útil para outras pessoas também!
Abraços!

22 comentários:

  1. Respostas
    1. Bom dia!
      Por segurança o anti-vírus costuma bloquear qualquer arquivo executável. Basta selecionar a opção para liberar a execução.
      Abraços!

      Excluir
  2. Olá. Qual o software que vc usou para fazer o frontend? Aqui ele funcionou belezinha.

    ResponderExcluir
    Respostas
    1. Boa tarde!
      Visual Basic .NET
      Ótimo que funcionou!
      Abraços!

      Excluir
  3. obrigado pelo front , se funcionar com o mega vai ser uma mão na roda pra atualizar o arduino de impressora 3D com o notebook fraquinho ... só levar o hex compilado e mandar flashear sem ter que ficar recompilando , show !

    ResponderExcluir
    Respostas
    1. Bom dia! Espero que tenha funcionado e ajudado!
      Abraços!

      Excluir
  4. Olá, sabe me dizer se funciona para o arduíno Pro Micro?

    ResponderExcluir
    Respostas
    1. Boa tarde! Nessa versão, somente para Arduino Uno, Nano, Pro Mini, Mega e Gemma (Attiny85).
      Abraços!

      Excluir
    2. Tem algum que funcione com o arduino pro micro para me indicar? Ou teria a possibilidade de andicionar essa opção ao seu front end?

      Excluir
  5. LUCIANO FERNANDES DO NASCIMENTO21 de junho de 2021 23:03

    Valeu mesmo cara, estava procurando um proraminha desses e vc salvou bacana... Obrigado mesmo

    ResponderExcluir
  6. Tentei usar o frontend para gravar o .hex num arduino nano (old bootloader), não deu certo e agora quando tento gravar pelo modo tradicional (ide do arduino) retorna os seguintes erros:

    Ocorreu um erro enquanto o sketch era carregado
    avrdude: verification error, first mismatch at byte 0x00c4
    0x7d != 0x09
    avrdude: verification error; content mismatch

    O que será que aconteceu? Tem como reverter? O duro é que é um dispositivo que está lá no cliente e ele não pode me esperar que eu faça outro pra ele.

    ResponderExcluir
    Respostas
    1. Bom dia, Ismael!
      A IDE Arduino utiliza o programa AVRDUDE para enviar o arquivo compilado para o microcontrolador. O front que deixei disponível, utiliza o mesmo programa que a IDE Arduino, apenas com uma tela amigável que executa o AVRDUDE com as linhas de comando para envio ao microcontrolador.

      Alguns problemas que podem estar ocorrendo:
      - Dispositivo USB no Windows não foi reconhecido corretamente. Tente utilizando outra porta USB, ou remova o dispositivo através do 'gerenciador de dispositivos do Windows' e adicione novamente.
      - Cabo USB com algum mal contato. Durante a transmissão ocorre falha acarretando no erro. Verificar com outro cabo.
      - O conversor USB/TTL da placa Nano pode estar queimado. O fonte no microcontrolador segue rodando normalmente (Arduino funciona), mas o circuito da comunicação serial queimou. Nesse caso, é possível utilizar os pinos ICSP para novo upload e seguir utilizando o mesmo arduino no projeto.
      - Verificar se realmente é Old Bootloader que está gravado ou se é o Bootloader mais novo. Tentar realizar o upload tanto com novo quanto com antigo.

      São algumas das possibilidades que podem estar ocorrendo.
      Lembro que o front disponibilizado apenas faz a chamada de execução do AVRDUDE, assim como a IDE Arduino.
      Abraços!

      Excluir
  7. Olá, bom dia! Possuo uma dúvida... Há possibilidade de modificar os fuses através do seu software? Pois você informou que "o outro possui o bootloader compilado junto.", selecionei esse arquivo, porém não foi com as configurações que deixei no bootloader...

    ResponderExcluir
    Respostas
    1. Bom dia!
      No software não há a possibilidade de alterações nos fuses.
      Me recordo que ao exportar o arquivo hex, o software Arduino utiliza o bootloader padrão que possui salvo em seu diretório.

      Excluir
  8. Ah entendi! Alterei no arquivo "Boards" os fuses... No caso o caminho seria: Hardware - Arduíno - avr - boards. Seria esse o padrão de bootloader? Ou teria outro meio de alterar os fuses no diretório do arduíno e depois exportar e utilizar seu software?

    ResponderExcluir
    Respostas
    1. O caminho acho que seria dessa forma mesmo. Ir no diretório que citou e alterar por lá.
      Abraços!

      Excluir
  9. ola amigo muito show seu programa parabens deixa te perguntar teria como adicionar tbem para ele gravar junto o arquivo epron obrigado abraços.

    ResponderExcluir
  10. seu programa consigo enviar usando o modulo cp2102 porem so envia o hex precisaria que enciasse os dois arquivos no USBasp usaria esse comando.. veja se pode me ajudar obrigado..

    REM Writing Flash + EEPROM + Fuses (L=F7, H=D9, E=FC)
    avrdude -c USBasp -P usb -p m328p -e -U flash:w:"master.hex":a -U eeprom:w:"master.eep":a -U lfuse:w:0xF7:m -U hfuse:w:0xD9:m -U efuse:w:0xFC:m

    ResponderExcluir