लिनक्स कमांड लाइन के माध्यम से संकलन, अपलोड और निगरानी कैसे करें?


19

एक Arduino Uno (अपलोडिंग आदि) को Arduino IDE (फेडोरा पैकेज का उपयोग करके) में बदलना फेडोरा 21 के तहत ठीक काम करता है।

लेकिन मैं इसके बजाय vim + make + vim-quickfix-mode आदि का उपयोग करना चाहता हूं।

मैं उसे कैसे कर सकता हूँ?

अधिमानतः फेडोरा रिपॉजिटरी से उपलब्ध उपकरणों के माध्यम से।

मुझे लगता है कि आईडीई अपलोड करने के लिए बाह्य कमांड लाइन उपयोगिताओं आदि को कॉल करता है।

IDE के सीरियल मॉनिटर के बराबर एक टर्मिनल एमुलेटर (जैसे screen) को /dev/ttyACM0, सही से जोड़ रहा है ?

शायद वहाँ एक अच्छा उदाहरण परियोजना है जो मेकफाइल को देख सकता है?

जवाबों:


7

मैं मेकफाइल परियोजनाओं के लिए Googling का सुझाव दूंगा। मैंने ब्लिंक कार्यक्रम के लिए कुछ समय पहले एक किया था, जो मूल रूप से आईडीई द्वारा उत्पन्न हुआ देखकर और अधिक सामान्य तरीके से दोहराया गया था।

#
# 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_DIRकम से कम बदलने की जरूरत है , यह दर्शाने के लिए कि आपने आईडीई को कहां स्थापित किया है। यदि आप वायर लाइब्रेरी जैसी अन्य चीजों का उपयोग करते हैं, तो आपको अतिरिक्त पुस्तकालयों को संकलित करने के लिए इसे कुछ हद तक विस्तारित करना होगा। फिर से, आप उपयोग कर सकते हैं कि IDE खुद को आपके परिवर्तनों का मार्गदर्शन करने के लिए क्या उत्पन्न करता है।

ऊपर के प्रमुख रिक्त स्थान वाली लाइनों को रिक्त स्थान के बजाय टैब वर्ण की आवश्यकता होगी , जैसा कि मेकफाइल के लिए सामान्य है।


2
मेक फ़ाइल में एक अपलोड अनुभाग भी उपयोगी होगा, संकलित स्केच को आर्डिनो (एवीआर-डूड का उपयोग करके) अपलोड करने के लिए।
गेर्बन सेप

यह निश्चित रूप से उपयोगी होगा। हालाँकि, अब तक, आईडीई ने संकलन और अपलोड करने के लिए मेरी जरूरतों को पूरा किया है, मैं इसे कैसे करना है, इसके बारे में काम करने के लिए दृढ़ता से प्रेरित नहीं हूं। :)
निक गैमन

एक आसान समाधान के लिए मेटामोर्फिक जवाब पर एक नज़र डालें
विक्टर लामोइन

20

मैं का उपयोग करने के लिए कमांड लाइन इंटरफेस arduinoआदेश

मैं इसे इस तरह से चलाता हूं:

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

एक पृष्ठ है जो अन्य कमांड-लाइन टूल का वर्णन करता है, जैसे inotool। उस पेज का भी एक उदाहरण है Makefile। ये विकल्प मोहक लगते हैं, लेकिन जाहिर है, इस लेखन के रूप में, उनमें से कोई भी काम नहीं करता है। मुझे लगता है कि यह Arduino IDE वितरण फ़ाइलों में कुछ हालिया बदलावों के कारण है जो वे निर्भर करते हैं।

arduinoऊपर के रूप में चलना थोड़ा धीमा है, क्योंकि इसमें जावा मुझे लगता है कि लोड करना है, लेकिन कम से कम यह काम करता है। एक arduino-builderआदेश भी है जो Arduino IDE वितरण के साथ आता है। इस लेखन के रूप में, मेरे लिए यह पर्याप्त रूप से अच्छी तरह से प्रलेखित नहीं था कि इसका उपयोग कैसे किया जाए। उदाहरण के लिए, README में या मेरे द्वारा दिए गए किसी भी ट्यूटोरियल में कोई उदाहरण कमांड लाइन नहीं हैं, और मैं यह पता नहीं लगा सका कि बोर्ड को कोड अपलोड करने के लिए इसका उपयोग कैसे किया जाए। हालाँकि, संभवतः यह हमें एक तेज संकलन देने में सक्षम है arduino। README में पिछले संकलन से ऑब्जेक्ट फ़ाइलों का पुन: उपयोग करने में सक्षम होने का भी उल्लेख किया गया है, इसलिए कुछ मेकअप जैसी कार्यक्षमता है।


सीरियल आउटपुट को देखने के लिए मैं कुछ का उपयोग करता हूं

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

1000000 नंबर Serial.begin()आपके बोर्ड कोड में आपके द्वारा पास किए गए नंबर से मेल खाना चाहिए । तुम भी उपयोग कर सकते हैं screenअगर आप एक बोर्ड प्रोग्राम है जो उचित रूप से इंटरैक्टिव है है, या आप जो कुछ भी उपयोगिता का उपयोग डिवाइस से सीधे लिखने के लिए कर सकते हैं। वैसे, मेरा ड्यू /dev/ttyACM0( /dev/ttyUSB0यूनो के बजाय ) के रूप में दिखता है।


1
सुनिश्चित करें कि आपके पास *.inoनिर्देशिका में एक ही फ़ाइल है, क्योंकि यह जरूरी नहीं कि --uploadपैरामीटर द्वारा उल्लिखित एक को अपलोड करना है।
क्रिस स्ट्रीकजेनस्की

5

आपको मेकफिल की आवश्यकता है। Arduino के लिए आसपास कुछ Makefile प्रोजेक्ट हैं। "Arduino Makefile" के लिए Googling, कई परिणाम देता है, जिसमें Github पर एक अच्छा लग रहा है सहित: https://github.com/sudar/Arduino-Makefile

Arduino IDE पुस्तकालयों को संभालने के तरीके के कारण कमांड लाइन से संकलन तुच्छ नहीं है।

आईडीई के सीरियल मॉनिटर के बराबर एक टर्मिनल एमुलेटर (जैसे स्क्रीन) को / dev / ttyACM0, सही से कनेक्ट कर रहा है?

सीरियल मॉनिटर के लिए मैं मिनिकॉम की सिफारिश करूंगा। यह कमांड लाइन पर पूरी तरह कार्यात्मक टर्मिनल एमुलेटर (vt102) है।

minicom -D /dev/ttyACM0 -b 115200

... उदाहरण के लिए।


1
यह मेकफाइल अनिवार्य रूप से स्वीकृत उत्तर का अनुरक्षित संस्करण है। GitHub पर एक टेम्प्लेट प्रोजेक्ट भी है जो आपको दिखाता है कि इसे कैसे सेट किया जाए: github.com/ladislas/Bare-Arduino-Project
Stefan van der Walt

2

आप अपने arduino परियोजना के लिए एक पूरी तरह से संगत समाधान चाहते हैं (हाँ, आप अन्य लोगों कि सिर्फ सादा Arduino आईडीई का उपयोग के साथ अपनी परियोजना साझा कर सकते हैं) की जांच करनी है amake एक उपकरण arduino के CLI आसान बनाने के लिए, मैं इसे Geany लेकिन साथ उपयोग अन्य लोग इसका उपयोग vi, Atom इत्यादि के साथ कर रहे हैं।

यह प्रेरित है और अब मृत इनो और आर्टुरो परियोजनाएं; कृपया इसे जांचने के लिए 5 मिनट का समय दें और कृपया प्रतिक्रिया दें।

उदाहरण का उपयोग करें:

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]

इसमें कुछ स्मार्ट गोंद है, यह बोर्ड और फ़ाइल को याद कर सकता है, और यहां तक ​​कि बोर्ड के यूएसबी को भी ऑटोडेक्ट कर सकता है; इसलिए एक सफल "amake -v" कमांड के बाद आप कमांड लाइन पर यह कर सकते हैं और यह काम करेगा।

amake -v
[to compile/verify your code]

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

यदि आप कुछ IDE मैक्रोज़ का उपयोग करते हैं, तो आप संकलन को आसानी से अपलोड कर सकते हैं और उदाहरण के लिए, Geany IDE का उपयोग करके यह बन जाएगा:

  • संकलन / सत्यापित करें: सीडी% डी; amake -v uno% f
  • अपलोड: सीडी% डी; अमके -ु अन% च

एक बार स्थापित होने पर आप केवल "amake" या "amake -h" चलाने में अधिक सहायता प्राप्त कर सकते हैं।

इसके अलावा, यह आपके द्वारा Arduino IDE में स्थापित / कॉन्फ़िगर किए गए EVERY बोर्ड / lib / प्रोग्रामर का समर्थन कर सकता है , हां, Adafuit Trinket M0 / Arduino M0 आदि जैसे आधुनिक बोर्ड ...

बस अपने Arduino IDE को आग दें, बोर्ड मैनेजर पर जाएं, समर्थन स्थापित करें और बस इतना ही, जट कुछ सरल निर्देशों का पालन करें और आपके सेट हो गए।

आपके पास जो बोर्ड है वह समर्थित नहीं है? कोई समस्या नहीं है, fqbn का पता लगाएँ (README.md फ़ाइल पढ़ें) और इसे बोर्ड नाम के साथ पास करें।

मैं परीक्षकों को संख्या या बोर्ड उपनाम और उचित USB हस्ताक्षर के ऑटो पता लगाने के लिए देख रहा हूं।

याद रखें कि यह एक निजी विकसित उपकरण है, जिसे अब जनता के साथ साझा किया गया है, आप जानते हैं, बस एक प्रोग्रामर इसे खुरच रहा है ...

चीयर्स।


2

आधिकारिक सीएलआई उपकरण

Arduino टीम एक विकसित कर रहा है CLI ग्राहक https://github.com/arduino/arduino-cli

घोषणा : https://blog.arduino.cc/2018/08/24/announcing-the-arduino-command-line-interface-cli/

लिपियों को संकलित करने और अपलोड करने के लिए, बोर्ड और लाइब्रेरी डाउनलोड करने से लेकर आप इसके साथ लगभग सब कुछ कर सकते हैं। क्या अनुपलब्ध है निगरानी भाग (आप Metamorphic की विधि का उपयोग कर सकते हैं stty cat, यह काम करता है!)

यह उपकरण Metamorphic के उत्तर के समान है क्योंकि यह उपकरण उस एक से बाहर निकल रहा है

गीथूब रेपो और मैन पेज में निर्देश :

    $ 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.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.