Το παρόν άρθρο παρουσιάζει τον προγραμματισμό πλακετών Arduino χρησιμοποιώντας μόνο βασικά προγραμμάτα γραμμής εντολών, χωρίς την χρήση του Arduino IDE. Το άρθρο έχει δημοσιευθεί επίσης στο FreeBSD Wiki.
Έχει ελεγχθεί σε FreeBSD 12.2 και νεότερα.
Προαπαιτούμενα
Προαπαιτούμενα ports:
devel/arduino-core
devel/arduino-bsd-mk
devel/avr-gcc
devel/avr-libc
devel/avrdude
comms/uarduno
Εισάγετε την παρακάτω γραμμή στο /boot/loader.conf σε περίπτωση που θέλετε το
kernel module του Arduino να φορτώνεται αυτόματα κατά την εκκίνηση. Εάν θέλετε
να το φορτώνετε χειροκίνητα, προσπεράστε αυτό το βήμα:
uarduno_load="YES"
Φορτώστε το kernel module:
# kldload uarduno
Σιγουρευτείτε ότι υπάρχουν οι παρακάτω γραμμές στο ~/.arduino/preferences.txt
(πηγή):
serial.port=/dev/cuaU0
launcher=/usr/local/bin/firefox
Προσθέστε τον χρήστη σας στην ομάδα dialer:
# pw group mod dialer -m $USER
Σύνδεση της πλακέτας
Οι πλακέτες Arduino συνδέονται ως /dev/cuaU* ή/και /dev/ttyU* στο FreeBSD.
Εάν αυτές οι σειριακές θύρες δεν εμφανίζονται στο /dev, ίσως να πρέπει να
πατήσετε το κουμπί reset της πλακέτας. Αφού έχετε συνδέσει την πλακέτα στην
θύρα USB, θα πρέπει να δείτε το παρακάτω μήνυμα στο dmesg(8). Παρόλο που το
μήνυμα μπορεί να διαφέρει, αυτό που έχει σημασία είναι ότι η πλακέτα είναι
συνδεδεμένη και ανιχμευμένη:
ugen1.5: <Arduino (www.arduino.cc) product 0x0043> at usbus1
uarduno0: <Arduino (www.arduino.cc) product 0x0043, class 2/0, rev 1.10/0.01, addr 5> on usbus1
Το Makefile
Το μόνο που χρειάζεται για να αρχίσετε είναι απλώς ένα Makefile που θα
χρησιμοποιηθεί για την μεταγλώττιση και την μεταφόρτωση των προγραμμάτων
Arduino. Δημιουργήστε ένα νέο directory για το project σας και ένα Makefile
με τις παρακάτω γραμμές:
ARDUINO_DIR= /usr/local/arduino
ARDUINO_MK_DIR= /usr/local/arduino-bsd-mk
#ARDUINO_LIBS=
AVRDUDE_PORT= your_board_port
ARDUINO_BOARD= your_board_name
SRCS= your_source_files
TARGET= your_program_name
include /usr/local/arduino-bsd-mk/bsd.arduino.mk
Στην δική μου περίπτωση η πλακέτα μου είναι ένα Arduino Uno, οπότε θα πρέπει να
ορίσω το ARDUINO_BOARD σε uno. Μπορείτε να δείτε ποιοί άλλοι τύποι πλακετών
είναι διαθέσιμοι στο /usr/local/arduino/hardware/arduino/avr/boards.txt.
Αποφεύγετε να έχετε αρχεία πηγαίου κώδικα με όνομα main.
Μεταγλώττιση και μεταφόρτωση ενός προγράμματος
Γράψτε κώδικα και όταν είναι έτοιμος για μεταγλώττιση και μεταφόρτωση, τρέξτε την παρακάτω εντολή:
# make install flash clean cleandepend
Εάν όλα πήγαν καλά, θα πρέπει να δείτε την πλακέτα να εκτελεί τον νέο κώδικα.
Εάν δεν, προσπαθήστε να δείτε τι σφάλματα παρήγαγε το Makefile:
Παρακολούθηση
Το Arduino IDE παρέχει την δυνατότητα σειριακής παρακολούθησης, αλλά το FreeBSD
έχει ενσωματωμένο πρόγραμμα παρακολούθησης, το οποίο μπορεί να εκτελεστεί
κατευθείαν από το τερματικό. Τρέξτε το όποτε θέλετε να παρακολουθήσετε την
πλακέτα και βγείτε με ~! (χρησιμοποιήστε την κατάλληλη θύρα):
$ cu -l /dev/cuaU0
Χρήση άλλων τύπων πλακετών πέρα από το Uno
Όπως αναφέρθηκε παραπάνω, χρησιμοποιούμε το uarduno kernel module. Παρόλο που
η περιγραφή του module είναι “FreeBSD Kernel Driver for the Arduino Uno USB
interface”, μπορείτε να χρησιμοποιήσετε και άλλους τύπων πλακετών πέρα από το
Uno. Σύμφωνα με την ιστοσελίδα του
uarduno, μπορείτε να τροποποιήσετε το
/usr/ports/comms/uarduno/files/ids.txt ώστε να περιέχει περισσότερους τύπους
πλακετών — τα δύο πεδία αντιστοιχούν σε Vendor ID και Product ID. Διαβάστε τα
σχόλια εντός του αρχείου για περισσότερες πληροοφορίες:
{ 0x2341, 0x0001 }, // Arduino UNO, vendor 2341H, product 0001H
{ 0x2341, 0x0042 }, // Arduino MEGA (rev 3), vendor 2341H, product 0042H
{ 0x2341, 0x0043 }, // Arduino UNO (rev 3), vendor 2341H, product 0043H
{ 0x2341, 0x0010 }, // Arduino MEGA 2560 R3, vendor 2341H, product 0010H
{ 0x2341, 0x8037 }, // Arduino Micro
Όταν τελειώσετε, επαναμεταγλωττίστε και εγκαταστήστε το port.
Γνωστά προβλήματα και οι διορθώσεις τους
Παρόλο που μπορεί να έχετε συνδέσει την πλακέτα σας στον υπολογιστή, μπορεί να
παρατηρήσετε ότι δεν εμφανίζεται η συσκευή στο /dev. Αν και δεν υπάρχει
οριστική απάντηση σχτικά με το τι μπορεί να συμβαίνει, σιγουρευτείτε ότι το
καλώδιο USB είναι συνδεδεμένο σωστά — σε κάποιες πλακέτες πρέπει να ακούσετε
ένα κλικ.
Όταν προσπαθείτε να χρησιμοποιήσετε μία νέα βιβλιοθήκη, μπορεί να παρατηρήσετε
ότι ο κώδικάς σας δεν μεταγλωττίζεται. Ένα σύνηθες πρόβλημα είναι ότι δεν έχετε
αποθηκεύσει την βιβλιοθήκη στο σωστό path. Οι βιβλιοθήκες πρέπει να
αποθηκεύονται στο /usr/local/arduino/hardware/arduino/avr/libraries/, οπότε
πρέπει να τις μεταφέρετε εκεί.