Hogyan lehet fordítani, feltölteni és figyelni a Linux parancssorán keresztül?

Egy Arduino Uno összekapcsolása (feltöltés stb.) az Arduino IDE-vel (a Fedora csomag használatával) jól működik a Fedora 21 alatt.

De inkább a vim + make + vim-quickfix-mode stb. Módszert szeretném használni.

Hogyan tudom ezt megtenni?

Lehetőleg a Fedora tárházaiban elérhető eszközökön keresztül.

Feltételezem, hogy az IDE külsõ parancssori segédprogramokat hív meg a feltöltéshez stb.

Az IDE soros monitorjának megfelelõje valószínűleg terminálemulátort csatlakoztat (pl. screen) /dev/ttyACM0 -hez, igaz?

Talán van egy jó példa a makefile-ra?

Válasz

Javaslom a Google keresését a Makefile projektekhez. Visszaléptem egy darabig a Blink programhoz, alapvetően látva, hogy mit generált az IDE, és replikálva hogy általánosabban.

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

Legalább a ARDUINO_DIR -et módosítanod kell, hogy ref ahol az IDE-t telepítette. Ha más dolgokat használ, például a Wire könyvtárat, akkor némileg bővítenie kell további könyvtárak összeállításához. Ismét felhasználhatja az IDE által generált változtatásokat.

A fenti vezető szóközökkel rendelkező sorokhoz a fülre van szükség karakter szóköz helyett, mint egy Makefile esetében szokásos.

Megjegyzések

  • A make fájl feltöltési szakasza hasznos lehet az összeállított vázlat feltöltése az arduino-ba (avr-dude használatával).
  • Ez mindenképpen hasznos lenne. Mivel azonban az IDE eddig kielégítette a fordítással és feltöltéssel kapcsolatos igényeimet, nem vagyok erősen motivált arra, hogy kidolgozzam, hogyan kell ezt megtenni. 🙂
  • A könnyebb megoldás érdekében nézze meg a Metamorphic válaszát

Válasz

A parancssori felületet a arduino parancshoz használom.

Úgy futtatom ez:

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

Van egy oldal , amely más parancssori eszközöket, például inotool. Az oldalon található egy példa is: Makefile. Ezek az alternatívák csábítónak tűnnek, de nyilvánvalóan e cikk írásakor egyik sem működik. Feltételezem, hogy ez annak köszönhető, hogy az Arduino IDE terjesztési fájlokban néhány közelmúltbeli változás történt, amelyektől függenek.

A fentiek szerint a arduino futtatása kissé lassú, mert ez azt hiszem, be kell töltenie a Java-t, de legalább működik. Van egy arduino-builder parancs is, amely a Arduino IDE terjesztés. Az írás idején még nem volt kellően dokumentált ahhoz, hogy rájöjjek, hogyan kell használni. Például a README-ben vagy az általam talált oktatóanyagok egyikében sem található példa parancssorokra, és nem tudtam kitalálni, hogyan lehetne kódot feltölteni a táblára. Feltehetőleg azonban gyorsabb fordítást tud nyújtani nekünk, mint a arduino. A README megemlíti azt is, hogy az előző fordításból származó objektumfájlokat újra fel lehet használni, ezért van néhány hasonló funkció.


A soros kimenet megtekintéséhez Ilyeneket használok:

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

Az 1000000 számnak meg kell egyeznie azzal a számmal, amelyet átad Serial.begin() táblája. Használhatja az screen alkalmazást is, ha megfelelően interaktív táblaprogramja van, vagy bármilyen segédprogramot használhat arra, hogy közvetlenül az eszközre írjon. Egyébként az esedékességem /dev/ttyACM0 néven jelenik meg (az Uno helyett /dev/ttyUSB0).

Megjegyzések

  • Győződjön meg róla, hogy egyetlen *.ino fájl van a könyvtárban, mivel úgy tűnik, hogy nem feltétlenül töltse fel azt, amelyet a --upload paraméter.
  • Nem állított be X11 DISPLAY változót, de ez a program végrehajtott egy műveletet, amelyhez szükséges. Nekem

Válasz

Amire szükséged van, az egy Makefile. Van néhány Makefile projekt az Arduino számára. Az “Arduino Makefile” keresése sok találatot eredményez, beleértve azt is, ami jól néz ki a Githubon: https://github.com/sudar/Arduino-Makefile

A parancssorból történő fordítás nem triviális az Arduino IDE könyvtárak kezelésének módja miatt.

Az IDE sorozatának megfelelője A monitor valószínűleg egy terminálemulátort (pl. képernyőt) csatlakoztat a / dev / ttyACM0 fájlhoz, igaz?

A soros monitorhoz a minicom programot ajánlanám. Ez egy teljesen működő terminálemulátor (vt102) a parancssorban.

minicom -D /dev/ttyACM0 -b 115200 

… például.

Megjegyzések

Válasz

Hivatalos CLI eszköz

Az arduino csapata egy cli kliens https://github.com/arduino/arduino-cli

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

Ezzel szinte mindent megtehet, a táblák és könyvtárak letöltésétől kezdve a szkriptek fordításáig és feltöltéséig. Hiányzik a megfigyelő rész (használhatja a Metamorphic “módszert a stty , működik!)

A parancsok nagyon hasonlítanak a Metamorphic” válaszra , mivel ez az eszköz elágazik ebből

Utasítások a Github repóban és a man oldalon:

 $ 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. 

Válasz

Ha teljesen kompatibilis megoldást szeretne az arduino projektjéhez (igen, megoszthatja projektjét másokkal, akik ezt használják csak egyszerű Arduino IDE) be kell jelölnie a amake eszközt, hogy leegyszerűsítsük az arduino kliensét, én ezt Geany-val használom, de mások a vi, Atom használatával stb.

Ez ihlette, és a mostanra meghalt Ino és Arturo projektek; szánjon 5 percet a tesztelésére, és kérjük, adjon visszajelzést.

Példa felhasználásra:

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] 

Van benne valami intelligens ragasztó, emlékszik a táblára és a fájlra, sőt automatikusan felismeri a tábla USB-jét; tehát egy sikeres “amake -v” parancs után ezt megteheti a parancssorban, és ez működni fog.

amake -v [to compile/verify your code] amake -u [to upload your code to an arduino connected via USB] 

Ha néhány IDE makrót használ, egyszerűen készítse el a fordítási és feltöltési parancsokat, például a Geany IDE használatával ez lesz:

  • Compile / Verify: cd% d; amake -v uno% f
  • Feltöltés: cd% d; amake -u uno% f

További segítséget kaphat a “amake” vagy az “amake -h” futtatásához, miután telepítette.

Emellett támogatja a MINDEN tábla / lib / programozó, amelyet az Arduino IDE-be telepített / konfigurált, igen, modern tábla, például az Adafuit Trinket M0 / Arduino M0 stb …

Csak indítsa el az Arduino IDE-t, menjen a fórumkezelőhöz, telepítse a támogatást, és ez minden, kövesse az egyszerű utasításokat, és beállítja.

A tábla nem támogatott? nem probléma, észlelje az fqbn fájlt (olvassa el a README.md fájlt), és adja át a tábla neveként.

Tesztelőket keresek a szám vagy a tábla felnövésére álnevek és a megfelelő USB-aláírások automatikus felismerése.

Ne feledje, hogy ez egy privát, felnőtt eszköz, amelyet mostantól megosztottak a nyilvánossággal, tudod, csak egy programozó karcolja meg viszketését …

Egészség.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük