Linux komut satırı üzerinden nasıl derlenir, yüklenir ve izlenir?


19

Arduino Uno'yu (yükleme vb.) Arduino IDE (Fedora paketini kullanarak) ile arayüzlemek Fedora 21 altında iyi çalışır.

Ama vim + make + vim-quickfix-mode vb. Kullanmak istiyorum.

Bunu nasıl yapabilirim?

Tercihen Fedora depolarından temin edilebilen aletler aracılığıyla.

IDE'nin yükleme vb. İçin harici komut satırı yardımcı programları çağırdığını varsayıyorum.

IDE seri monitöre eşdeğer muhtemelen bir terminal emülatörü (örn bağlanıyor screenkadar) /dev/ttyACM0, doğru?

Belki de makefile bakabilirsiniz iyi bir örnek proje var?

Yanıtlar:


7

Makefile projeleri için Google'ı öneririm. Blink programı için bir süre önce temelde IDE tarafından neyin üretildiğini görerek ve bunu daha genel bir şekilde çoğaltarak yaptım.

#
# 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

ARDUINO_DIRIDE'yi kurduğunuz yeri yansıtmak için en azından değiştirmeniz gerekir . Tel kütüphanesi gibi başka şeyler kullanırsanız, ek kütüphaneleri derlemek için bir şekilde genişletmeniz gerekir. Yine, IDE'nin kendi ürettiklerini değişikliklerinizi yönlendirmek için kullanabilirsiniz.

Başında boşluk bulunan satırlar, Makefile için normal olduğu gibi boşluk yerine sekme karakterine ihtiyaç duyacaktır .


2
Derleme çizimini arduino'ya yüklemek için make dosyasındaki bir yükleme bölümü de yararlı olacaktır (avr-dude kullanarak).
Gerben

Bu kesinlikle faydalı olacaktır. Ancak, şu ana kadar, IDE derleme ve yükleme ile ilgili ihtiyaçlarımı karşıladığından, bunu nasıl yapacağımı düşünmek için çok motive değilim. :)
Nick Gammon

Daha kolay bir çözüm için Metamorfik cevabına bir göz atın
Victor Lamoine

20

Kullandığım için komut satırı arayüzü arduinokomutu .

Ben böyle çalıştırın:

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

Gibi diğer komut satırı araçlarını açıklayan bir sayfa vardır inotool. Bu sayfanın da bir örneği var Makefile. Bu alternatifler cazip gelebilir, ancak görünüşe göre bu yazıdan hiçbiri işe yaramıyor. Bunun bağlı oldukları Arduino IDE dağıtım dosyalarındaki bazı son değişikliklerden kaynaklandığını varsayıyorum.

arduinoYukarıdaki gibi çalıştırmak biraz yavaş, çünkü Java yüklemek zorunda sanırım, ama en azından çalışıyor. arduino-builderArduino IDE dağıtımı ile birlikte gelen bir komut da vardır . Bu yazıdan itibaren, nasıl kullanılacağını anlayabilmek benim için yeterince iyi belgelenmemişti. Örneğin, README'de veya karşılaştığım öğreticilerin hiçbirinde komut satırı örneği yok ve bunu panoya kod yüklemek için nasıl kullanacağımı anlayamadım. Ancak, muhtemelen bize daha hızlı bir derleme verebilir arduino. README, nesne dosyalarını önceki bir derlemeden yeniden kullanabildiğinden de bahsetmektedir, bu nedenle bazı benzer işlevler vardır.


Seri çıkışı görüntülemek için şöyle bir şey kullanıyorum

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

1000000 sayısı Serial.begin(), kart kodunuzda ilettiğiniz numarayla eşleşmelidir . Ayrıca screen, uygun şekilde etkileşimli bir tahta programınız varsa veya doğrudan aygıta yazmak için herhangi bir yardımcı programı kullanabilirsiniz. Bu arada, Due /dev/ttyACM0( /dev/ttyUSB0Uno yerine ) olarak görünür.


1
Parametrede *.inobelirtilen dosyayı yüklemesi gerekmediği için dizinde tek bir dosyanız olduğundan emin olun --upload.
Chris Stryczynski

5

İhtiyacınız olan şey Makefile. Arduino için birkaç Makefile projesi var. "Arduino Makefile" için googling, Github'da iyi görünenlere de dahil olmak üzere birçok sonuç döndürür: https://github.com/sudar/Arduino-Makefile

Komut satırından derleme, Arduino IDE'nin kitaplıkları işleme biçimi nedeniyle önemsiz değildir.

IDE'nin seri monitörüne eşdeğer muhtemelen / dev / ttyACM0'a bir terminal öykünücüsü (örn. Ekran) bağlanıyor, değil mi?

Seri monitör için minicom tavsiye ederim. Komut satırında tamamen işlevsel bir terminal emülatörüdür (vt102).

minicom -D /dev/ttyACM0 -b 115200

... Örneğin.


1
Bu Makefile aslında kabul edilen cevabın korunmuş bir versiyonudur. GitHub'da nasıl ayarlanacağınızı gösteren bir şablon projesi de vardır: github.com/ladislas/Bare-Arduino-Project
Stefan van der Walt

2

Eğer (evet, sadece düz Arduino IDE kullanan diğer kişilerle proje paylaşabilirsiniz) da kontrol etmek istiyorsanız sizin arduino proje için tam uyumlu bir çözüm istiyorsanız AKağıt arduino ait cli kolaylaştırmak için bir araç, ben Geany ama bunu kullanmak diğerleri vi, Atom, vb. ile kullanıyor.

İlham verici ve şimdi ölü Ino ve Arturo projeleri; test etmek için lütfen 5 dakika ayırın ve lütfen geri bildirim verin.

Örnek kullanım:

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]

İçinde bazı akıllı tutkal var, tahta ve dosyayı hatırlayabilir ve hatta tahtanın usb'sini otomatik olarak algılayabilir; bu yüzden başarılı bir "amake -v" komutundan sonra bunu komut satırında yapabilirsiniz ve çalışacaktır.

amake -v
[to compile/verify your code]

amake -u
[to upload your code to an arduino connected via USB]

Bazı IDE makroları kullanırsanız, derleme ve yükleme komutlarını kolayca oluşturabilirsiniz, örneğin Geany IDE'yi kullanarak:

  • Derle / Doğrula: cd% d; amake -v uno% f
  • Yükleme: cd% d; amake -u uno% f

Kurulduktan sonra sadece "amake" veya "amake -h" komutlarını çalıştırmak için daha fazla yardım alabilirsiniz.

Ayrıca, Arduino IDE'nize kurduğunuz / yapılandırdığınız HER tahta / lib / programcıyı destekleyebilir , evet, Adafuit Biblo M0 / Arduino M0 vb.Gibi modern tahta ...

Sadece Arduino IDE'nizi ateşleyin, yönetim kurulu yöneticisine gidin, destek yükleyin ve hepsi bu, sadece bazı basit talimatları izleyin ve ayarlandınız.

Sahip olduğunuz tahta desteklenmiyor mu? sorun değil, fqbn (README.md dosyasını okuyun) tespit edin ve tahta adı olarak iletin.

Numaraları veya kart takma adlarını ve uygun USB imzalarının otomatik algılanmasını artırmak için test kullanıcıları arıyorum.

Unutmayın, bu artık kamuoyu ile paylaşılan özel bir araç, biliyorsunuz, sadece kaşıntıyı kaşıran bir programcı ...

Şerefe.


2

Resmi CLI aracı

Arduino ekibi bir cli istemcisi geliştiriyor https://github.com/arduino/arduino-cli

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

Panoları ve kütüphaneleri indirmek, komut dosyaları derlemek ve yüklemek için hemen hemen her şeyi yapabilirsiniz. Eksik olan izleme kısmıdır ( Metamorphic'in yöntemini kullanarak kullanabilirsiniz stty cat, Çalışır!)

Komutlar Metamorfik'in cevabına çok benziyor, çünkü bu araç bu araçtan ayrılıyor

Github deposundaki ve kılavuz sayfasındaki talimatlar :

    $ 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.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.