Linterfacciamento di un Arduino Uno (caricamento ecc.) con lIDE di Arduino (utilizzando il pacchetto Fedora) funziona bene con Fedora 21.
Ma preferisco usare vim + make + vim-quickfix-mode ecc.
Come posso farlo?
Preferibilmente tramite gli strumenti disponibili dai repository Fedora.
Presumo che lIDE richiami le utilità della riga di comando esterna per il caricamento, ecc.
Lequivalente del monitor seriale dellIDE probabilmente sta collegando un emulatore di terminale (ad esempio screen
) a /dev/ttyACM0
, giusto?
Forse cè un buon esempio di progetto che si può guardare al makefile?
Risposta
Suggerirei di cercare su Google i progetti Makefile. Ne ho fatto uno qualche tempo fa per il programma Blink, fondamentalmente vedendo cosa è stato generato dallIDE e replicando che in un modo più generale.
# # 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
Dovresti cambiare almeno ARDUINO_DIR
in ref lect dove hai installato lIDE. Se usi altre cose come la libreria Wire, dovresti espanderla un po per compilare librerie aggiuntive. Di nuovo, puoi utilizzare ciò che lIDE genera da solo per guidare le tue modifiche.
Le righe con gli spazi iniziali sopra avrebbero bisogno della tab al posto degli spazi, come è normale per un Makefile.
Commenti
- Una sezione di caricamento nel file make sarebbe anche essere utile, per caricare lo sketch compilato su arduino (usando avr-dude).
- Sarebbe sicuramente utile. Tuttavia, poiché finora lIDE ha soddisfatto le mie esigenze di compilazione e caricamento, non sono fortemente motivato a capire come farlo. 🙂
- Dai unocchiata alla risposta metamorfica per una soluzione più semplice
Risposta
Utilizzo linterfaccia della riga di comando per il arduino
comando .
Lo eseguo come questo:
arduino --upload sketch/sketch.ino --port /dev/ttyUSB*
Cè una pagina che descrive altri strumenti della riga di comando, come inotool
. Questa pagina ha anche un esempio Makefile
. Queste alternative sembrano allettanti, ma a quanto pare, al momento della stesura di questo articolo, nessuna di esse funziona. Presumo che ciò sia dovuto ad alcuni recenti cambiamenti nei file di distribuzione IDE di Arduino da cui dipendono.
Eseguire arduino
come sopra è un po lento, perché deve caricare Java, immagino, ma almeno funziona. Cè anche un comando arduino-builder
fornito con il Distribuzione IDE Arduino. Al momento della stesura di questo articolo, non era sufficientemente ben documentato per essere in grado di capire come usarlo. Ad esempio, non ci sono linee di comando di esempio nel README o in nessuno dei tutorial che ho incontrato, e non riuscivo a capire come usarlo per caricare il codice sulla scheda. Tuttavia, presumibilmente è in grado di darci una compilazione più veloce di arduino
. Il README menziona anche la possibilità di riutilizzare file oggetto da una compilazione precedente, quindi ci sono alcune funzionalità simili a quelle create.
Per visualizzare loutput seriale Uso qualcosa come
stty -F /dev/ttyUSB* 1000000 raw -clocal -echo cat /dev/ttyUSB*
Il numero 1000000 deve corrispondere al numero che passi a Serial.begin()
in il codice della scheda. Puoi anche usare screen
se hai un programma di bordo che è adeguatamente interattivo, oppure puoi usare qualsiasi utility per scrivere direttamente sul dispositivo. A proposito, la mia scadenza viene visualizzata come /dev/ttyACM0
(anziché /dev/ttyUSB0
per Uno).
Commenti
Risposta
Quello che ti serve è un Makefile. Ci sono alcuni progetti Makefile in giro per Arduino. Google per “Arduino Makefile” restituisce molti risultati, incluso quello che sembra buono su Github: https://github.com/sudar/Arduino-Makefile
Compilare dalla riga di comando non è banale a causa del modo in cui lIDE di Arduino gestisce le librerie.
Lequivalente del seriale dellIDE monitor sta probabilmente collegando un emulatore di terminale (ad esempio schermo) a / dev / ttyACM0, giusto?
Per il monitor seriale consiglierei minicom. È un emulatore di terminale completamente funzionale (vt102) sulla riga di comando.
minicom -D /dev/ttyACM0 -b 115200
… per esempio.
Commenti
- Questo Makefile è essenzialmente una versione mantenuta della risposta accettata.Cè anche un modello di progetto su GitHub che mostra come configurarlo: github.com/ladislas/Bare-Arduino-Project
Answer
Strumento CLI ufficiale
Il team di arduino sta sviluppando un cli client https://github.com/arduino/arduino-cli
Annuncio : https://blog.arduino.cc/2018/08/24/announcing-the-arduino-command-line-interface-cli/
Puoi fare quasi tutto con questo, dal download di schede e librerie, alla compilazione e al caricamento di script. Quello che “manca è la parte di monitoraggio (puoi utilizzare il metodo metamorfico utilizzando stty
cat
, Funziona!)
I comandi sono molto simili alla risposta di Metamorphic” poiché questo strumento si ramifica da quello
Istruzioni nel repository Github e nella pagina man:
$ 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.
Rispondi
Se vuoi una soluzione completamente compatibile per il tuo progetto arduino (sì, puoi condividere il tuo progetto con altre persone che usano semplicemente Arduino IDE) devi controllare amake uno strumento per semplificare il cli di arduino, io lo uso con Geany ma altri lo usano con vi, Atom , ecc.
Si tratta di progetti ispirati e ormai morti di Ino e Arturo; ti preghiamo di dedicare 5 minuti per testarlo e di fornire un feedback.
Esempio di utilizzo:
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]
Cè un po di colla intelligente dentro può ricordare la scheda e il file e persino rilevare automaticamente lUSB della scheda; quindi dopo un comando “amake -v” riuscito puoi farlo dalla riga di comando e funzionerà.
amake -v [to compile/verify your code] amake -u [to upload your code to an arduino connected via USB]
Se usi alcune macro IDE puoi crea facilmente i comandi di compilazione e caricamento, ad esempio utilizzando Geany IDE diventerà:
- Compila / Verifica: cd% d; amake -v uno% f
- Carica: cd% d; amake -u uno% f
Puoi ottenere ulteriore aiuto eseguendo “amake” o “amake -h” una volta installati.
Inoltre, può supportare OGNI scheda / lib / programmatore che hai installato / configurato nel tuo IDE Arduino, sì, scheda moderna come Adafuit Trinket M0 / Arduino M0 ecc …
Avvia il tuo IDE Arduino, vai al gestore della scheda, installa il supporto e basta, segui alcune semplici istruzioni e il gioco è fatto.
non è supportato? non è un problema, rileva fqbn (leggi il file README.md) e passalo come nome della scheda.
Sto cercando tester per aumentare il numero o la scheda alias e rilevamento automatico delle firme USB corrette.
Ricorda che questo è uno strumento privato sviluppato, ora condiviso con il pubblico, sai, solo un programmatore che lo gratta …
Saluti.
*.ino
nella directory, poiché non sembra caricare necessariamente quello menzionato dal--upload
parametro.