লিনাক্স কমান্ড লাইনের মাধ্যমে কীভাবে সংকলন, আপলোড এবং নিরীক্ষণ করবেন?


19

আরডুইনো আইএনই (ফেডোরা প্যাকেজ ব্যবহার করে) এর সাথে একটি আরডুইনো ইউনো (আপলোড করা ইত্যাদি) ইন্টারফেস করা ফেডোরা 21 এর অধীনে সূক্ষ্মভাবে কাজ করে।

তবে আমি বরং vim + make + vim-quickfix- মোড ইত্যাদি ব্যবহার করতে চাই

আমি এটা কিভাবে করবো?

ফেডোরা সংগ্রহস্থলগুলি থেকে প্রাপ্ত সরঞ্জামগুলির মাধ্যমে সাধারণত।

আমি ধরে নিই যে IDE আপলোড করার জন্য এক্সটার্নাল কমান্ড লাইন ইউটিলিটিগুলি কল করে etc.

আইডিইর সিরিয়াল মনিটরের সমতুল্য সম্ভবত কোনও টার্মিনাল এমুলেটরকে সংযুক্ত করছে (উদাহরণস্বরূপ screen) /dev/ttyACM0, ডান?

সম্ভবত একটি ভাল উদাহরণ আছে প্রকল্পটি কেউ মেকফিলটি দেখতে পারে?

উত্তর:


7

আমি মেকফিল প্রকল্পগুলির জন্য গুগলিংয়ের পরামর্শ দেব। আমি ব্লিঙ্ক প্রোগ্রামের জন্য কিছুক্ষণ আগে করেছি, মূলত আইডিই দ্বারা কী উত্পন্ন হয়েছিল তা দেখে এবং আরও সাধারণ উপায়ে প্রতিলিপি করে।

#
# 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আইডিই কোথায় ইনস্টল করেছেন তা প্রতিবিম্বিত করতে আপনাকে কমপক্ষে পরিবর্তন করতে হবে । আপনি যদি ওয়্যার লাইব্রেরির মতো অন্যান্য জিনিস ব্যবহার করেন তবে অতিরিক্ত লাইব্রেরিগুলি সংকলনের জন্য আপনার এটি কিছুটা প্রসারিত করতে হবে। আবার, আপনি আপনার পরিবর্তনগুলি গাইড করতে আইডিই নিজে যা উত্পন্ন করে তা ব্যবহার করতে পারেন।

উপরের শীর্ষস্থানীয় স্পেসগুলির সাথে রেখাগুলি ফাঁকের পরিবর্তে ট্যাব অক্ষরের প্রয়োজন হবে , যেমন কোনও মেকফিলের পক্ষে স্বাভাবিক।


2
মেক ফাইলে একটি আপলোড বিভাগও দরকারী হবে, সংযুক্ত স্কেচটি আরডুইনোতে (এভিআর-ডুড ব্যবহার করে) আপলোড করতে।
গারবেন

এটি অবশ্যই কার্যকর হবে। তবে, এখনও অবধি, আইডিই আমার সংকলন এবং আপলোডের জন্য প্রয়োজনীয়তাগুলি পূরণ করেছে, কীভাবে এটি করা যায় তা সম্পর্কে আমি দৃ strongly়প্রেরণা পাই না am :)
নিক গ্যামন

একটি সহজ সমাধানের জন্য রূপান্তরিত উত্তরটি একবার দেখুন
ভিক্টর ল্যামোইন

20

আমি ব্যবহার করতে কম্যান্ড-লাইন ইন্টারফেস arduinoকমান্ড

আমি এটি এইভাবে চালান:

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

এমন একটি পৃষ্ঠা রয়েছে যা অন্যান্য কমান্ড-লাইন সরঞ্জামগুলি বর্ণনা করে inotool। এই পৃষ্ঠাটিরও একটি উদাহরণ রয়েছে Makefile। এই বিকল্পগুলি প্রলোভনজনক বলে মনে হচ্ছে, তবে দৃশ্যত এই লেখার মতো, সেগুলির কোনওটিই কাজ করে না। আমি ধরে নিচ্ছি যে এটি আরডুইনো আইডিই বিতরণ ফাইলগুলির উপর নির্ভর করে যা তারা নির্ভর করে is

arduinoউপরের মতো চালানো কিছুটা ধীর, কারণ এটি আমার ধারণা জাভাটি লোড করতে হবে তবে কমপক্ষে এটি কাজ করে। arduino-builderআরডুইনো আইডিই বিতরণ নিয়ে আসে এমন একটি কমান্ডও রয়েছে। এই লেখাটি হিসাবে, এটি কীভাবে ব্যবহার করতে হবে তা বুঝতে আমার পক্ষে সক্ষম হওয়া যথেষ্ট পর্যাপ্ত ছিল না। উদাহরণস্বরূপ, 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

আপনার যা দরকার তা হ'ল একটি মেকফাইল। আরডুইনোর আশেপাশে কয়েকটি মেকফিল প্রকল্প রয়েছে। "আরডুইনো মেকফিল" এর জন্য গুগলিং গিথুবতে যা দেখতে ভাল লাগে তা সহ অনেকগুলি ফলাফল ফেরত দেয়: https://github.com/sudar/Ardino-Makefile

আরডুইনো আইডিই যেভাবে লাইব্রেরি পরিচালনা করে তাতে কমান্ড লাইন থেকে সংকলন তুচ্ছ নয়।

আইডিইর সিরিয়াল মনিটরের সমতুল্য সম্ভবত কোনও টার্মিনাল এমুলেটর (উদাহরণস্বরূপ স্ক্রিন) / dev / ttyACM0 এর সাথে সংযুক্ত হচ্ছে?

সিরিয়াল মনিটরের জন্য আমি মিনিকোম সুপারিশ করব। এটি কমান্ড লাইনের একটি সম্পূর্ণ কার্যকরী টার্মিনাল এমুলেটর (vt102)।

minicom -D /dev/ttyACM0 -b 115200

... উদাহরণ স্বরূপ.


1
এই Makefile মূলত গৃহীত উত্তরের একটি বজায় রাখা সংস্করণ। গিটহাবের উপর একটি টেম্পলেট প্রকল্প রয়েছে যা আপনাকে এটি কীভাবে সেট আপ করতে হবে তা দেখায়: github.com/ladislas/Bare-Ardino-Project
স্টেফান ভ্যান ডার ওয়াল্ট

2

আপনি যদি আপনার আরডুইনো প্রকল্পের জন্য সম্পূর্ণ সুসংগত সমাধান চান (হ্যাঁ, আপনি আপনার প্রকল্পটি অন্য সাধারণ লোকদের সাথে ভাগ করে নিতে পারেন যা কেবল সরল আরডুইনো আইডিই ব্যবহার করে) আপনার আরডুইনোর ক্লাইটকে সহজ করার জন্য একটি সরঞ্জাম আমেক করা দরকার , তবে আমি জিনির সাথে এটি ব্যবহার করি তবে অন্যরা এটি vi, পরমাণু ইত্যাদি দিয়ে ব্যবহার করছেন

এটি অনুপ্রাণিত এবং বর্তমানে মৃত ইনো এবং আর্টুরো প্রকল্পগুলি; এটি পরীক্ষা করতে 5 মিনিট সময় নিন এবং দয়া করে প্রতিক্রিয়া জানান give

উদাহরণ ব্যবহার:

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]

আপনি যদি কিছু আইডিই ম্যাক্রোগুলি ব্যবহার করেন তবে আপনি সহজেই সংকলন তৈরি করতে এবং কমান্ডগুলি আপলোড করতে পারেন, উদাহরণস্বরূপ জিয়ান আইডিই ব্যবহার করে এটি হয়ে যাবে:

  • সংকলন / যাচাই করুন: সিডি% d; আমাক -v আনো% এফ
  • আপলোড: সিডি% ডি; আমাক -উ আনো% এফ

একবার "ইনস্টল" বা "আমাক -h" একবার ইনস্টল হয়ে আপনি আরও সহায়তা পেতে পারেন।

এছাড়াও, এটি আপনার আরডুইনো আইডিইতে আপনি ইনস্টল / কনফিগার করা প্রতিটি বোর্ড / লাইব / প্রোগ্রামারকে সমর্থন করতে পারে, হ্যাঁ, অ্যাডাফুইট ট্রিনকেট এম0 / আরডুইনো এম0 ইত্যাদির মতো আধুনিক বোর্ড ...

কেবল আপনার আরডুইনো আইডিই ফায়ার করুন, বোর্ড ম্যানেজারের কাছে যান, সমর্থন ইনস্টল করুন এবং এগুলিই হ'ল কিছু সহজ নির্দেশাবলী অনুসরণ করুন এবং আপনার সেট রয়েছে।

আপনার যে বোর্ডটি সমর্থিত নয়? কোনও সমস্যা নয়, fqbn সনাক্ত করুন (README.md ফাইলটি পড়ুন) এবং বোর্ডের নাম হিসাবে এটি পাস করুন।

আমি নম্বর বা বোর্ডের নাম এবং সঠিক ইউএসবি স্বাক্ষরগুলির স্বয়ংক্রিয় সনাক্তকরণের জন্য পরীক্ষকগণের সন্ধান করছি।

মনে রাখবেন এটি একটি ব্যক্তিগত উত্সাহিত সরঞ্জাম, এখন জনসাধারণের সাথে ভাগ করা, আপনি জানেন, কেবল কোনও প্রোগ্রামার এটি চুলকায় ...

চিয়ার্স।


2

অফিসিয়াল সিএলআই সরঞ্জাম

Arduino দলের একটি উন্নয়নশীল হয় CLI ক্লায়েন্ট https://github.com/arduino/arduino-cli

ঘোষণা : https://blog.arduino.cc/2018/08/24/annoucing-the-arduino-command-line-interface-cli/

আপনি এগুলি দিয়ে বোর্ড এবং লাইব্রেরি ডাউনলোড থেকে শুরু করে স্ক্রিপ্টগুলি আপলোড করতে এবং প্রায় সমস্ত কিছু করতে পারেন। যা অনুপস্থিত তা হ'ল মনিটরিং অংশ (এটি ব্যবহার করে আপনি মেটমোরফিকের পদ্ধতিটি ব্যবহার করতে পারেন stty cat, এটি কাজ করে!)

কমান্ডগুলি মেটমোরফিকের উত্তরের সাথে অনেক মিল, যেহেতু এই সরঞ্জামটি সেইটির বাইরে শাখা তৈরি করছে

গিথুব রেপো এবং ম্যান পৃষ্ঠায় নির্দেশাবলী :

    $ 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.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.