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
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
- Este Makefile é essencialmente uma versão mantida da resposta aceita.Também existe um projeto de modelo no GitHub que mostra como configurá-lo: github.com/ladislas/Bare-Arduino-Project
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.
*.ino
no diretório, uma vez que não parece necessariamente carregar aquele mencionado pelo--upload
parâmetro.