Επικοινωνία Scratch 3 με LEGO WeDo 2.0 και EV3 στο Linux

Ξεκίνησε από markakis, 27 Ιαν 2021, 06:50:42 ΜΜ

« προηγούμενο - επόμενο »

markakis

Στο δικτυακό τόπο του Scratch βλέπουμε ότι επίσημα δεν υποστηρίζεται η σύνδεση του Scratch 3 με τα  LEGO WeDo 2.0 (https://scratch.mit.edu/wedo) και LEGO MINDSTORMS EV3 (https://scratch.mit.edu/ev3) σε Linux.
Βέβαια ξέρουμε ότι μπορούμε να τα συνδέσουμε με το Scratch 2 χρησιμοποιώντας την εφαρμογή lins2bot/S2Bot (βλέπε https://blogs.sch.gr/plinetaioa/wedo-linux/).

To Scratch 3 για να συνδεθεί με WeDo, EV3 κ.α. σε Windows και macOS χρησιμοποιεί το scratch-link (https://github.com/LLK/scratch-link).

Ψάχνοντας λύση για Linux + Scratch 3 (και κατ' επέκταση το Scratux) για το WeDo 2.0, εντόπισα στο GitHub το Pyscrlink (https://github.com/kawasaki/pyscrlink), που όπως λέει ο δημιουργός του:  "Pyscrlink is a Scratch-link for Linux".  Για την σύνδεση bluetooth χρησιμοποιεί τα PyBluez και bluepy.

Το δοκίμασα στο laptop μου (με Ubuntu MATE 20.04) που υποστηρίζει Bluetooth 4.0 και όπως διαπίστωσα δουλεύει μια χαρά τόσο με το WeDO 2.0 όσο και το EV3 που έχω στη διάθεσή μου. Πειραματιζόμενος κατάφερα να συνδέσω και ένα Raspberry Pi 4 με το EV3, όχι όμως και το WeDo 2.0 (άνοιξα σχετικό issue στο GitHub).

Το BLED112, όπως αναφέρεται από τον δημιουργό, δεν υποστηρίζεται (μάλλον λόγω των ιδιαιτεροτήτων που έχει το συγκεκριμένο USB dongle), όμως λογικά θα δουλέψουν όλα τα υπόλοιπα που υποστηρίζουν Bluetooth 4.0. Προσωπικά έχω παραγγείλει για το εργαστήριο το https://www.skroutz.gr/s/12906349/BT-004.html με λιγότερα από 4 ευρώ, θα ενημερώσω σχετικά μόλις το έχω στα χέρια μου.

Για να δοκιμάσω το Pyscrlink ακολούθησα τις οδηγίες στο GitHub, όπου επιπλέον στο Βήμα 2 του Installation χρειάστηκε να εγκαταστήσω τα πακέτα python3-pip και libglib2.0-dev (το θέλει το bluepy)
sudo apt-get install python3-pip libglib2.0-dev

Για χρήση του online Scratch 3 με Firefox ή Chrome δώστε προσοχή στο "In Case You Fail to Connect". Για το Scratux, ξεκινήστε το πρόγραμμα με
scratux –ignore-certificate-errors

Η εμπειρία μου: στο laptop μου σε Ubuntu και με το συνδυασμό  lins2bot + Scratch 2 χρησιμοποιώντας το  BLED112 είχα πάρα πολλές αποσυνδέσεις και αυτός ήταν ο λόγος που άρχισα να ψάχνω εναλλακτικές. Σε περιβάλλον windows το επίσημο Scratch Link με το Scratch 3 συχνά έτρωγαν φρίκη και αποσυνδέονταν από το hub και χρειαζόταν επανεκκίνηση των windows για να συνέλθουν. Εδώ και μερικές μέρες που χρησιμοποιώ το Pyscrlink  δεν είχα αποσυνδέσεις με το hub, ούτε διαπίστωσα κάποιο πρόβλημα. Δοκιμάστε το και εσείς, προσωπικά πιστεύω ότι είναι το κομμάτι που μου έλειπε από το παζλ.

ddimakis

Καλημέρα, πολύ ενδιαφέρον!
Θα ήθελα να ρωτήσω αν έχεις δοκιμάσει να συνδέσεις πάνω από ένα hub.

markakis

#2
Έχω συνδέσει και χειριστεί ταυτόχρονα στο ίδιο πρόγραμμα ένα WeDo 2.0 και ένα EV3. Δύο συσκευές του ίδιου τύπου δεν έχω προσπαθήσει να συνδέσω, θα το δοκιμάσω. Το Scratch3 το υποστηρίζει, πιστεύω ότι θα δουλέψει.

Διόρθωση: Το είχα δει σε Scratch2 με S2bot (βλέπε https://www.youtube.com/watch?v=zH2cT7tV_qA) και είχα την εντύπωση ότι το είχα δει σε Scratch3. Λάθος.

markakis

Ο περιορισμός φαίνεται να προέρχεται από το Scratch 3: από ό,τι βλέπω η επέκταση (extension) του EV3 εντοπίζει τα δύο διαφορετικά EV3 αλλά σου επιτρέπει να συνδεθείς μόνο στο ένα από αυτά, το ίδιο και η επέκταση του WeDo 2.0 που όταν κάνει αναζήτηση και πατήσεις το κουμπί και στα δύο hub, θα συνδεθεί μόνο σε ένα από αυτά, χωρίς να σου δίνουν δυνατότητα για κάτι άλλο.

Επομένως, αυτό που μπορώ να επιβεβαιώσω είναι η ταυτόχρονη χρήση στο ίδιο πρόγραμμα Scratch 3 ενός EV3 και ενός WeDo 2.0, όχι όμως δύο συσκευών του ίδιου τύπου.
Ενδεχομένως να μπορεί να συνδεθεί ταυτόχρονα και ένα micro:bit και ένα LEGO BOOST, δηλαδή μια συσκευή ανά επέκταση, όμως δεν διαθέτω τέτοιες συσκευές για να δοκιμάσω.

markakis

#4
Επανέρχομαι στο θέμα του USB Bluetooth dongle καθώς ήρθαν στα χέρια μου αυτά που παρήγγειλα και μπόρεσα να τα δοκιμάσω στο εργαστήριο (Ubuntu LTSP 20.04). Οι δοκιμές έγιναν σε δύο (fat) client ταυτόχρονα με καθένα από αυτούς να συνδέεται και να χειρίζεται στο ίδιο πρόγραμμα από ένα WeDo 2.0 και ένα EV3. Έπειτα από δοκιμές μερικών ωρών, δεν διαπίστωσα προβλήματα αποσυνδέσεων.

Το USB dongle που δοκίμασα ήταν το BT-004 (https://www.skroutz.gr/s/12906349/BT-004.html) με τιμή 3,65 ευρώ το ένα, το οποίο περιλαμβάνει activity LED. Διάλεξα το συγκεκριμένο λόγω συνδυασμού τιμής/κριτικών. Δεν ξέρω αν έχει εμβέλεια 20 μέτρα, όπως γράφει η συσκευασία, αλλά στα 5-6 μέτρα μέσα στο εργαστήριο λειτούργησε μια χαρά. Όπως έχω γράψει λογικά θα δουλέψει κάθε Blutooth 4.0, όχι όμως με το BLED112, όπως αναφέρεται στη σελίδα του project και διαπίστωσα και εγώ.

Για εγκατάσταση σε εργαστήριο με LTSP, για να μπορεί να χρησιμοποιηθεί σε server ή client και από όλους τους χρήστες:

Ικανοποίηση εξαρτήσεων:
sudo apt install bluez libbluetooth-dev libnss3-tools libcap2-bin python3-pip libglib2.0-dev python3-bluez python3-websockets

Εγκατάσταση pyscrlink για όλους τους χρήστες
sudo pip3 install pyscrlink

Ενεργοποίηση του bluepy-helper για συσκευές Bluetooth Low Energy (BLE):

sudo /usr/local/bin/bluepy_helper_cap

και έπειτα δημοσίευση εικονικού δίσκου, κατά τα γνωστά


Στο PC που θα γίνει η σύνδεση (server ή client):

Σύνδεση USB dongle και από εκεί εκτέλεση σε τερματικό, για να βλέπουμε και τυχόν μηνύματα. Σε LTSP client μπορεί να γίνει και από τον Επόπτη στο Server με Εκτέλεση -> Άνοιγμα κονσόλας -> Χρήστη, τοπικά:

/usr/local/bin/scratch_link

Εκκίνηση Scratux με:

scratux --ignore-certificate-errors

Στο πρόγραμμά μας επιλέγουμε την επέκταση (π.χ. LEGO Education WeDo 2.0 ή LEGO MINDSTORMS EV3) για την σύνδεση της αντίστοιχης συσκευής και ακολουθούμε τις οδηγίες της.

Για το EV3: την πρώτη φορά που θα συνδέσουμε ένα EV3 σε PC, να γίνει πρώτα σύζευξη μέσα από το Blueman (εικονίδιο στην γραμμή εργασιών) ώστε να οριστεί ως έμπιστη συσκευή και να δοθεί και ο κωδικός για τη σύζευξη.

markakis

Όπως έχει αναφερθεί το Scratux βασίζεται σε παλιότερη έκδοση του Scratch 3 (Scratch Desktop).
Στο αποθετήριο της Τεχνικής Στήριξης βρίσκεται πλέον πρόσφατη έκδοση του Scratch Desktop, οπότε συνίσταται να εγκαταστήσετε αυτήν (βλέπε https://alkisg.mysch.gr/steki/index.php?topic=8538.msg95682#msg95682).

Εγκατάστση με

sudo apt install scratch-desktop


Επιπλέον, για την σύνδεση με τις συσκευές δεν χρειάζεται να εκτελείται το Scratch με την παράμετρο --ignore-certificate-errors, αλλά το εκτελείτε κανονικά από το μενού.

alkisg

@markakis σου πρόσθεσα τα `python3-bluez python3-websockets` στην παραπάνω εντολή. Όσα περισσότερα γίνεται να εγκατασταθούν μέσω apt τόσο καλύτερα, γιατί τότε είμαστε σίγουροι ότι είναι συμβατά με τις υπόλοιπες βιβλιοθήκες του συστήματος.
Συγκεκριμένα, στην 22.04 που δοκίμασα, η pip3 install... μου έβγαλε πρόβλημα αρχικά, ενώ με την διόρθωση δούλεψε μια χαρά. Εν τέλει μόνο τα bluepy και pyscrlink εγκαταστάθηκαν μέσω pip3.

markakis

Σωστός! Δεν είχα προσέξει ότι μπορούν να εγκατασταθούν από το apt. Υποθέτω ούτε ο δημιουργός του pyscrlink, αλλιώς θα τα είχε περιλάβει στις οδηγίες μαζί με τα άλλα πακέτα.

psyblaster

Σας παρακαλώ, μπορείτε να με ενημερώσετε αν υπάρχει συνοπτικός οδηγός σύνδεσης για 22.04;


markakis

Επανέρχομαι στο θέμα για να τροποποιήσω / επικαιροποιήσω τις οδηγίες, τόσο για την έκδοση Ubuntu 22.04 όσο και την 20.04, μετά και όσα έχουν ήδη αναφερθεί στο θέμα Πρόβλημα με Scratch 3 και Pyscrlink σε Ubuntu 22.04

Ικανοποίηση εξαρτήσεων:
sudo apt install bluez libnss3-tools libglib2.0-dev libbluetooth-dev libcap2-bin python3-pip python3-openssl python3-pycparser python3-cffi

Εγκατάσταση pyscrlink:
sudo pip install pyscrlink
Σημείωση: θα εγκατασταθούν αυτόματα από το pip τα πακέτα bluepy και websockets

Ενεργοποίηση του bluepy-helper για συσκευές Bluetooth Low Energy (BLE):
sudo /usr/local/bin/bluepy_helper_cap

και έπειτα, κατά τα γνωστά, δημοσίευση εικονικού δίσκου.

Στο PC που θα γίνει η σύνδεση (server ή client) εκτέλεση σε τερματικό, για να βλέπουμε και τυχόν μηνύματα:
/usr/local/bin/scratch_link

Σε LTSP client μπορεί να γίνει και από τον Επόπτη στο Server με Εκτέλεση -> Άνοιγμα κονσόλας -> Χρήστη, τοπικά

Η εκκίνηση του Scratch 3 γίνεται κανονικά από το μενού.

Στο πρόγραμμά μας επιλέγουμε την επέκταση για την σύνδεση της αντίστοιχης συσκευής και ακολουθούμε τις οδηγίες της.
Σημείωση: η υποστήριξη για το LEGO MINDSTORMS EV3 αφαιρέθηκε από το Pyscrlink στην έκδοση 0.2.6

Τέλος, να θυμίσω ότι για τα hub LEGO SPIKE Prime και LEGO SPIKE Essential υπάρχει το θέμα Lego spike και ubuntu ltsp

παρις

Μπορούμε να έχουμε κανα έτοιμο script ή apk ;
Εγινε λιγο μπερδμένο.

Χρειάζεται πάντως κατεπείγον, και για microbit τι γινεται; το βλέπει; έχουμε και απο αυτό.

markakis

Όπως έχω γράψει παραπάνω, το επίσημο Scratch Link δεν υποστηρίζει Linux. Το Pyscrlink είναι ένα script που εκτελείται σε τερματικό και αναπληρώνει αυτό το κενό.

Στην σελίδα του έργου αναφέρεται ότι επιτυγχάνει σύνδεση με Lego WeDo, Lego Boost και Microbit.

Προσωπικά το χρησιμοποιώ στα μαθήματά μου με WeDo σε εργαστήριο LTSP 22.04 (παλιότερα και 20.04). Το έχω συνδέσει και με EV3, αλλά μετά την έκδοση 0.2.6 δεν υποστηρίζεται πλέον. Microbit δεν έχει πέσει στα χέρια μου.

Δεν ξέρω τι σου φάνηκε μπερδεμένο. Η εγκατάσταση/ρύθμιση γίνεται με 3 απλές εντολές στο τερματικό. Από εκεί και πέρα, μια και πρόκειται για script, ανοίγεις τερματικό και το εκτελείς. Φυσικά και θα ήταν προτιμότερη μια GUI εφαρμογή, αλλά δεν υπάρχει. Βέβαια ακόμα και το επίσημο Scratch Link σε Windows, κρύβεται στην γραμμή εργασιών ενώ δεν σου παρέχει καμιά απολύτως πληροφορία για το αν έχει συνδεθεί κάποια συσκευή ή μηνύματα σφάλματος. Τουλάχιστον το Pyscrlink το κάνει.

zaspan

#13
Επειδή έχω χαθεί λίγο, θέλω μια βοήθεια. Πως θα συνδέσω το Scratch 3  σε ubuntu 22.04 με το lego we do 2;
Όταν εκτελώ την  εντολή sudo apt install bluez libnss3-tools libglib2.0-dev libbluetooth-dev libcap2-bin python3-pip python3-openssl python3-pycparser python3-cffi
μου εμφανίζει αυτά τα λάθη.
Αγνόησε:1 http://gr.archive.ubuntu.com/ubuntu jammy-updates/main amd64 python3-distutils all 3.10.6-1~22.04
Αγνόησε:2 http://gr.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libpython3.10-dev amd64 3.10.6-1~22.04.2ubuntu1.1
Αγνόησε:3 http://gr.archive.ubuntu.com/ubuntu jammy-updates/main amd64 python3.10-dev amd64 3.10.6-1~22.04.2ubuntu1.1
Σφάλμα:1 http://gr.archive.ubuntu.com/ubuntu jammy-updates/main amd64 python3-distutils all 3.10.6-1~22.04
  404  Not Found [IP: 2620:2d:4002:1::103 80]
Σφάλμα:2 http://security.ubuntu.com/ubuntu jammy-updates/main amd64 libpython3.10-dev amd64 3.10.6-1~22.04.2ubuntu1.1
  404  Not Found [IP: 2620:2d:4002:1::103 80]
Σφάλμα:3 http://security.ubuntu.com/ubuntu jammy-updates/main amd64 python3.10-dev amd64 3.10.6-1~22.04.2ubuntu1.1
  404  Not Found [IP: 2620:2d:4002:1::103 80]
E: Αποτυχία ανάκτησης του http://gr.archive.ubuntu.com/ubuntu/pool/main/p/python3-stdlib-extensions/python3-distutils_3.10.6-1%7e22.04_all.deb   404  Not Found [IP: 2620:2d:4002:1::103 80]
E: Αποτυχία ανάκτησης του http://security.ubuntu.com/ubuntu/pool/main/p/python3.10/libpython3.10-dev_3.10.6-1%7e22.04.2ubuntu1.1_amd64.deb   404  Not Found [IP: 2620:2d:4002:1::103 80]
E: Αποτυχία ανάκτησης του http://security.ubuntu.com/ubuntu/pool/main/p/python3.10/python3.10-dev_3.10.6-1%7e22.04.2ubuntu1.1_amd64.deb   404  Not Found [IP: 2620:2d:4002:1::103 80]
E: Αδύνατη η μεταφόρτωση μερικών αρχείων, ίσως αν δοκιμάζατε με apt-get update ή το --fix-missing;

Εμφανίζει μήνυμα λάθους για την εντολή pip.

Να μην ρωτήσω αν μπορεί να γίνει το ίδιο και σε ubuntu 18 που έχω στο εργαστήριο......