Como compilar, fazer upload e monitorar via linha de comando do Linux?

A interface de um Arduino Uno (upload, etc.) com o IDE do Arduino (usando o pacote Fedora) funciona bem no Fedora 21.

Mas prefiro usar vim + make + vim-quickfix-mode etc.

Como posso fazer isso?

De preferência, por meio das ferramentas disponíveis nos repositórios do Fedora.

Presumo que o IDE chama utilitários de linha de comando externos para o upload, etc.

O equivalente ao monitor serial do IDE é provavelmente conectar um emulador de terminal (por exemplo, screen) para /dev/ttyACM0, certo?

Talvez haja um bom projeto de exemplo que pode ser visto no makefile?

Resposta

Eu sugeriria pesquisar por projetos Makefile. Eu fiz um há um tempo atrás para o programa Blink, basicamente vendo o que foi gerado pelo IDE e replicando isso de uma forma mais geral.

# # Simple Arduino Makefile # # Author: Nick Gammon # Date: 18th March 2015 # where you installed the Arduino app ARDUINO_DIR = C:/Documents and Settings/Nick/Desktop/arduino-1.0.6/ # various programs CC = "$(ARDUINO_DIR)hardware/tools/avr/bin/avr-gcc" CPP = "$(ARDUINO_DIR)hardware/tools/avr/bin/avr-g++" AR = "$(ARDUINO_DIR)hardware/tools/avr/bin/avr-ar" OBJ_COPY = "$(ARDUINO_DIR)hardware/tools/avr/bin/avr-objcopy" MAIN_SKETCH = Blink.cpp # compile flags for g++ and gcc # may need to change these F_CPU = 16000000 MCU = atmega328p # compile flags GENERAL_FLAGS = -c -g -Os -Wall -ffunction-sections -fdata-sections -mmcu=$(MCU) -DF_CPU=$(F_CPU)L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=106 CPP_FLAGS = $(GENERAL_FLAGS) -fno-exceptions CC_FLAGS = $(GENERAL_FLAGS) # location of include files INCLUDE_FILES = "-I$(ARDUINO_DIR)hardware/arduino/cores/arduino" "-I$(ARDUINO_DIR)hardware/arduino/variants/standard" # library sources LIBRARY_DIR = "$(ARDUINO_DIR)hardware/arduino/cores/arduino/" build: $(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(MAIN_SKETCH) -o $(MAIN_SKETCH).o $(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)avr-libc/malloc.c -o malloc.c.o $(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)avr-libc/realloc.c -o realloc.c.o $(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)WInterrupts.c -o WInterrupts.c.o $(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)wiring.c -o wiring.c.o $(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)wiring_analog.c -o wiring_analog.c.o $(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)wiring_digital.c -o wiring_digital.c.o $(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)wiring_pulse.c -o wiring_pulse.c.o $(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)wiring_shift.c -o wiring_shift.c.o $(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)CDC.cpp -o CDC.cpp.o $(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)HardwareSerial.cpp -o HardwareSerial.cpp.o $(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)HID.cpp -o HID.cpp.o $(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)IPAddress.cpp -o IPAddress.cpp.o $(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)main.cpp -o main.cpp.o $(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)new.cpp -o new.cpp.o $(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)Print.cpp -o Print.cpp.o $(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)Stream.cpp -o Stream.cpp.o $(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)Tone.cpp -o Tone.cpp.o $(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)USBCore.cpp -o USBCore.cpp.o $(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)WMath.cpp -o WMath.cpp.o $(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)WString.cpp -o WString.cpp.o rm core.a $(AR) rcs core.a malloc.c.o $(AR) rcs core.a realloc.c.o $(AR) rcs core.a WInterrupts.c.o $(AR) rcs core.a wiring.c.o $(AR) rcs core.a wiring_analog.c.o $(AR) rcs core.a wiring_digital.c.o $(AR) rcs core.a wiring_pulse.c.o $(AR) rcs core.a wiring_shift.c.o $(AR) rcs core.a CDC.cpp.o $(AR) rcs core.a HardwareSerial.cpp.o $(AR) rcs core.a HID.cpp.o $(AR) rcs core.a IPAddress.cpp.o $(AR) rcs core.a main.cpp.o $(AR) rcs core.a new.cpp.o $(AR) rcs core.a Print.cpp.o $(AR) rcs core.a Stream.cpp.o $(AR) rcs core.a Tone.cpp.o $(AR) rcs core.a USBCore.cpp.o $(AR) rcs core.a WMath.cpp.o $(AR) rcs core.a WString.cpp.o $(CC) -Os -Wl,--gc-sections -mmcu=$(MCU) -o $(MAIN_SKETCH).elf $(MAIN_SKETCH).o core.a -lm $(OBJ_COPY) -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 $(MAIN_SKETCH).elf $(MAIN_SKETCH).eep $(OBJ_COPY) -O ihex -R .eeprom $(MAIN_SKETCH).elf $(MAIN_SKETCH).hex 

Você precisaria alterar ARDUINO_DIR pelo menos, para ref aula onde você instalou o IDE. Se você usar outras coisas como a biblioteca Wire, você precisará expandi-la um pouco para compilar bibliotecas adicionais. Novamente, você pode usar o que o IDE gera para orientar suas alterações.

As linhas com os espaços à esquerda acima precisariam da guia caractere em vez de espaços, como é normal para um Makefile.

Comentários

  • Uma seção de upload no arquivo make também seria útil fazer o upload do esboço compilado para o arduino (usando avr-dude).
  • Isso seria definitivamente útil. No entanto, como, até agora, o IDE atendeu às minhas necessidades de compilação e upload, não estou muito motivado para descobrir como fazer isso. 🙂
  • Dê uma olhada na resposta metamórfica para uma solução mais fácil

Resposta

Eu uso a interface de linha de comando para o arduino comando .

Eu o executo como isto:

arduino --upload sketch/sketch.ino --port /dev/ttyUSB* 

Há uma página que descreve outras ferramentas de linha de comando, como inotool. Essa página também tem um exemplo Makefile. Essas alternativas parecem atraentes, mas, aparentemente, até o momento desta escrita, nenhuma delas funcionou. Suponho que isso se deva a algumas mudanças recentes nos arquivos de distribuição do IDE do Arduino dos quais eles dependem.

Executar arduino como acima é um pouco lento, porque tem que carregar Java, eu acho, mas pelo menos funciona. Há também um comando arduino-builder que vem com o Distribuição do IDE do Arduino. No momento em que este livro foi escrito, ele não estava suficientemente bem documentado para que eu pudesse descobrir como usá-lo. Por exemplo, não há linhas de comando de exemplo no README ou em qualquer um dos tutoriais que encontrei, e não consegui descobrir como usá-lo para fazer o upload do código para a placa. No entanto, presumivelmente, ele é capaz de nos fornecer uma compilação mais rápida do que arduino. O README também menciona a capacidade de reutilizar arquivos de objeto de uma compilação anterior, portanto, há alguma funcionalidade semelhante a make.


Para visualizar a saída serial Eu uso algo como

stty -F /dev/ttyUSB* 1000000 raw -clocal -echo cat /dev/ttyUSB* 

O número 1000000 deve corresponder ao número que você passou para Serial.begin() em seu código de placa. Você também pode usar screen se tiver um programa de placa que seja apropriadamente interativo ou pode usar qualquer utilitário para escrever diretamente no dispositivo. A propósito, meu prazo final aparece como /dev/ttyACM0 (em vez de /dev/ttyUSB0 para o Uno).

Comentários

  • Certifique-se de ter um único arquivo *.ino no diretório, uma vez que não parece necessariamente carregar aquele mencionado pelo --upload parâmetro.
  • Nenhuma variável X11 DISPLAY foi definida, mas este programa executou uma operação que a requer. Para mim

Resposta

O que você precisa é de um Makefile. Existem alguns projetos Makefile para o Arduino. Pesquisar “Arduino Makefile” retorna muitos resultados, incluindo o que parece ser um bom no Github: https://github.com/sudar/Arduino-Makefile

Compilar a partir da linha de comando não é trivial devido à maneira como o IDE do Arduino lida com bibliotecas.

O equivalente ao serial do IDE monitor provavelmente está conectando um emulador de terminal (por exemplo, tela) a / dev / ttyACM0, certo?

Para o monitor serial, eu recomendaria o minicom. É um emulador de terminal totalmente funcional (vt102) na linha de comando.

minicom -D /dev/ttyACM0 -b 115200 

… por exemplo.

Comentários

Resposta

Ferramenta CLI oficial

A equipe do Arduino está desenvolvendo uma cli cliente https://github.com/arduino/arduino-cli

Anúncio : https://blog.arduino.cc/2018/08/24/announcing-the-arduino-command-line-interface-cli/

Você pode fazer quase tudo com isso, desde baixar placas e bibliotecas, até compilar e enviar scripts. O que está faltando é a parte de monitoramento (você pode usar o método do Metamórfico usando stty cat, Funciona!)

Os comandos são muito semelhantes à resposta de Metamórfico já que esta ferramenta está ramificando desse

Instruções no repositório Github e na página de manual:

 $ arduino-cli Arduino Command Line Interface (arduino-cli). Usage: arduino-cli [command] Examples: arduino <command> [flags...] Available Commands: board Arduino board commands. compile Compiles Arduino sketches. config Arduino Configuration Commands. core Arduino Core operations. help Help about any command lib Arduino commands about libraries. sketch Arduino CLI Sketch Commands. upload Upload Arduino sketches. version Shows version number of Arduino CLI. 

Resposta

Se você quiser uma solução totalmente compatível para seu projeto Arduino (sim, você pode compartilhar seu projeto com outras pessoas que usam simplesmente Arduino IDE) você precisa verificar amake uma ferramenta para simplificar o cli do arduino, eu uso com Geany, mas outros estão usando com vi, Atom , etc.

É inspirado e os agora mortos projetos Ino e Arturo; por favor, dedique 5 minutos para testá-lo e fornecer feedback.

Exemplo de uso:

cd ~/Arduino/Blink/ [move to your arduino project folder] amake -v uno Blink.ino [to compile/verify your code] amake -u uno Blink.ino /dev/ttyUSB0 [to upload your code to an arduino connected via USB] 

Tem um pouco de cola inteligente nele, pode lembrar a placa e o arquivo, e até mesmo detectar automaticamente o usb da placa; então, após um comando bem-sucedido “amake -v”, você pode fazer isso na linha de comando e funcionará.

amake -v [to compile/verify your code] amake -u [to upload your code to an arduino connected via USB] 

Se você usar algumas macros IDE, você pode crie os comandos de compilação e upload facilmente, por exemplo, usando o IDE Geany, ele se tornará:

  • Compilar / verificar: cd% d; amake -v uno% f
  • Carregar: cd% d; amake -u uno% f

Você pode obter mais ajuda executando apenas “amake” ou “amake -h” depois de instalado.

Além disso, ele pode oferecer suporte a CADA placa / lib / programador que você instalou / configurou em seu Arduino IDE, sim, placa moderna como Adafuit Trinket M0 / Arduino M0 etc …

Apenas dispare seu IDE Arduino, vá para o gerenciador de placa, instale o suporte e isso é tudo, apenas siga algumas instruções simples e você está pronto.

A placa você não é suportado? não é um problema, detecte o fqbn (leia o arquivo README.md) e passe-o como o nome do fórum.

Estou procurando testadores para aumentar o número ou o fórum aliases e detecção automática das assinaturas USB adequadas.

Lembre-se de que esta é uma ferramenta privada desenvolvida, agora compartilhada com o público, você sabe, apenas um programador coçando sua coceira …

Saúde.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *