Χρήστος Μαργιώλης

Arduino στο FreeBSD

Το παρόν άρθρο παρουσιάζει τον προγραμματισμό πλακετών 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/, οπότε πρέπει να τις μεταφέρετε εκεί.

Ευρετήριο Επόμενο →