Οπτικός προγραμματισμός για το Sonoff Basic

Οπτικός προγραμματισμός για το Sonoff Basic
Ένα άρθρο σχετικά με το πώς να δημιουργήσετε έναν προγραμματιζόμενο λογικό ελεγκτή από μια φτηνή κινέζικη συσκευή. Μια τέτοια συσκευή θα βρει τη χρήση της τόσο στον οικιακό αυτοματισμό όσο και ως πρακτικά μαθήματα στη σχολική επιστήμη των υπολογιστών.
Για αναφορά, από προεπιλογή το πρόγραμμα Sonoff Basic λειτουργεί με μια εφαρμογή για κινητά μέσω μιας κινεζικής υπηρεσίας cloud· μετά την προτεινόμενη τροποποίηση, κάθε περαιτέρω αλληλεπίδραση με αυτήν τη συσκευή θα είναι δυνατή στο πρόγραμμα περιήγησης.

Ενότητα I. Σύνδεση του Sonoff στην υπηρεσία MGT24

Βήμα 1: Δημιουργήστε έναν πίνακα ελέγχου

Εγγραφείτε στον ιστότοπο mgt24 (αν δεν έχετε ήδη εγγραφεί) και συνδεθείτε χρησιμοποιώντας τον λογαριασμό σας.
ΣύνδεσηΟπτικός προγραμματισμός για το Sonoff Basic

Για να δημιουργήσετε έναν πίνακα ελέγχου για μια νέα συσκευή, κάντε κλικ στο κουμπί "+".
Παράδειγμα δημιουργίας πάνελΟπτικός προγραμματισμός για το Sonoff Basic

Μόλις δημιουργηθεί το πλαίσιο, θα εμφανιστεί στη λίστα των πλαισίων σας.

Στην καρτέλα "Ρύθμιση" του δημιουργημένου πίνακα, βρείτε τα πεδία "Αναγνωριστικό συσκευής" και "Κλειδί εξουσιοδότησης"· στο μέλλον, αυτές οι πληροφορίες θα απαιτούνται κατά τη ρύθμιση της συσκευής Sonoff.
Παράδειγμα καρτέλαςΟπτικός προγραμματισμός για το Sonoff Basic

Βήμα 2. Ανοίξτε τη συσκευή

Χρησιμοποιώντας το βοηθητικό πρόγραμμα XTCOM_UTIL κατεβάστε το υλικολογισμικό PLC Sonoff Basic στη συσκευή, για αυτό θα χρειαστείτε έναν μετατροπέα USB-TTL. Εδώ εντολή и Οδηγίες βίντεο.

Βήμα 3. Ρύθμιση συσκευής

Δώστε ρεύμα στη συσκευή, αφού ανάψει η λυχνία LED, πατήστε το κουμπί και κρατήστε πατημένο μέχρι η λυχνία LED να αρχίσει να αναβοσβήνει περιοδικά ομοιόμορφα.
Αυτή τη στιγμή, θα εμφανιστεί ένα νέο δίκτυο Wi-Fi που ονομάζεται "PLC Sonoff Basic", συνδέστε τον υπολογιστή σας σε αυτό το δίκτυο.
Επεξήγηση της ένδειξης LED

Ένδειξη LED
Κατάσταση συσκευής

περιοδικό διπλό αναβοσβήνει
δεν υπάρχει σύνδεση με ρούτερ

λάμπει συνεχώς
σύνδεση με το δρομολογητή

περιοδική ομοιόμορφη αναβοσβήνει
λειτουργία σημείου πρόσβασης wi-fi

σβηστός
Χωρίς τροφοδοτικό

Ανοίξτε ένα πρόγραμμα περιήγησης στο Διαδίκτυο και πληκτρολογήστε το κείμενο "192.168.4.1" στη γραμμή διευθύνσεων, μεταβείτε στη σελίδα ρυθμίσεων δικτύου της συσκευής.

Συμπληρώστε τα πεδία ως εξής:

  • «Όνομα δικτύου» και «Κωδικός πρόσβασης» (για σύνδεση της συσκευής με τον οικιακό δρομολογητή wi-fi).
  • «Αναγνωριστικό συσκευής» και «Κλειδί εξουσιοδότησης» (για εξουσιοδότηση της συσκευής στην υπηρεσία MGT24).

Παράδειγμα ρύθμισης παραμέτρων δικτύου συσκευήςΟπτικός προγραμματισμός για το Sonoff Basic

Αποθηκεύστε τις ρυθμίσεις και επανεκκινήστε τη συσκευή.
Εδώ Οδηγίες βίντεο.

Βήμα 4. Σύνδεση αισθητήρων (προαιρετικό)

Το τρέχον υλικολογισμικό υποστηρίζει έως και τέσσερις αισθητήρες θερμοκρασίας ds18b20. Εδώ Οδηγίες βίντεο για εγκατάσταση αισθητήρων. Προφανώς, αυτό το βήμα θα είναι το πιο δύσκολο, καθώς θα απαιτηθούν ίσιοι βραχίονες και συγκολλητικό σίδερο.

Ενότητα II. Οπτικός προγραμματισμός

Βήμα 1: Δημιουργία Σεναρίων

Χρησιμοποιείται ως περιβάλλον προγραμματισμού Αποκλειστικά, το περιβάλλον είναι εύκολο στην εκμάθηση, επομένως δεν χρειάζεται να είστε προγραμματιστής για να δημιουργήσετε απλά σενάρια.

Πρόσθεσα εξειδικευμένα μπλοκ για εγγραφή και ανάγνωση παραμέτρων συσκευής. Η πρόσβαση σε οποιαδήποτε παράμετρο γίνεται με όνομα. Για παραμέτρους απομακρυσμένων συσκευών, χρησιμοποιούνται σύνθετες ονομασίες: "parameter@device".
Αναπτυσσόμενη λίστα επιλογώνΟπτικός προγραμματισμός για το Sonoff Basic

Παράδειγμα σεναρίου για κυκλική ενεργοποίηση και απενεργοποίηση του φορτίου (1Hz):
Οπτικός προγραμματισμός για το Sonoff Basic

Παράδειγμα σεναρίου που συγχρονίζει τη λειτουργία δύο ξεχωριστών συσκευών. Δηλαδή, το ρελέ της συσκευής στόχου επαναλαμβάνει τη λειτουργία του ρελέ της απομακρυσμένης συσκευής.
Οπτικός προγραμματισμός για το Sonoff Basic

Σενάριο για θερμοστάτη (χωρίς υστέρηση):
Οπτικός προγραμματισμός για το Sonoff Basic

Για να δημιουργήσετε πιο σύνθετα σενάρια, μπορείτε να χρησιμοποιήσετε μεταβλητές, βρόχους, συναρτήσεις (με ορίσματα) και άλλες δομές. Δεν θα τα περιγράψω όλα αυτά λεπτομερώς εδώ· υπάρχουν ήδη πολλά στο διαδίκτυο. εκπαιδευτικό υλικό για το Blockly.

Βήμα 2: Σειρά σεναρίων

Το σενάριο τρέχει συνεχώς, και μόλις φτάσει στο τέλος του, ξεκινά ξανά. Σε αυτήν την περίπτωση, υπάρχουν δύο μπλοκ που μπορούν να διακόψουν προσωρινά το σενάριο, "καθυστέρηση" και "παύση".
Το μπλοκ "καθυστέρηση" χρησιμοποιείται για καθυστερήσεις χιλιοστού του δευτερολέπτου ή μικροδευτερόλεπτου. Αυτό το μπλοκ διατηρεί αυστηρά το χρονικό διάστημα, εμποδίζοντας τη λειτουργία ολόκληρης της συσκευής.
Το μπλοκ "παύσης" χρησιμοποιείται για δεύτερες (ή λιγότερες) καθυστερήσεις και δεν εμποδίζει την εκτέλεση άλλων διεργασιών στη συσκευή.
Εάν το ίδιο το σενάριο περιέχει έναν άπειρο βρόχο, το σώμα του οποίου δεν περιέχει "παύση", ο διερμηνέας ξεκινά ανεξάρτητα μια σύντομη παύση.
Εάν η εκχωρηθείσα στοίβα μνήμης εξαντληθεί, ο διερμηνέας θα σταματήσει να εκτελεί μια τέτοια δέσμη ενεργειών (να είστε προσεκτικοί με τις αναδρομικές συναρτήσεις).

Βήμα 3: Εντοπισμός σφαλμάτων σεναρίων

Για να εντοπίσετε σφάλματα σε ένα σενάριο που έχει ήδη φορτωθεί στη συσκευή, μπορείτε να εκτελέσετε μια παρακολούθηση προγράμματος βήμα προς βήμα. Αυτό μπορεί να είναι εξαιρετικά χρήσιμο όταν η συμπεριφορά του σεναρίου αποδείχθηκε διαφορετική από αυτή που σκόπευε ο συγγραφέας. Σε αυτήν την περίπτωση, η ανίχνευση επιτρέπει στον συγγραφέα να βρει γρήγορα την πηγή του προβλήματος και να διορθώσει το σφάλμα στο σενάριο.

Σενάριο υπολογισμού παραγοντικού σε λειτουργία εντοπισμού σφαλμάτων:
Οπτικός προγραμματισμός για το Sonoff Basic

Το εργαλείο εντοπισμού σφαλμάτων είναι πολύ απλό και αποτελείται από τρία κύρια κουμπιά: «έναρξη», «ένα βήμα προς τα εμπρός» και «σταμάτημα» (ας μην ξεχνάμε επίσης τη λειτουργία εντοπισμού σφαλμάτων «enter» και «exit»). Εκτός από την ανίχνευση βήμα προς βήμα, μπορείτε να ορίσετε ένα σημείο διακοπής σε οποιοδήποτε μπλοκ (κάνοντας κλικ στο μπλοκ).
Για να εμφανίσετε τις τρέχουσες τιμές των παραμέτρων (αισθητήρες, ρελέ) στην οθόνη, χρησιμοποιήστε το μπλοκ "εκτύπωση".
Εδώ επισκόπηση βίντεο σχετικά με τη χρήση του προγράμματος εντοπισμού σφαλμάτων.

Ενότητα για τους περίεργους. Τι υπάρχει κάτω από την κουκούλα;

Για να λειτουργήσουν τα σενάρια στη συσκευή-στόχο, αναπτύχθηκαν ένας διερμηνέας bytecode και ένας assembler με 38 οδηγίες. Ο πηγαίος κώδικας του Blockly έχει ενσωματωμένη μια εξειδικευμένη γεννήτρια κώδικα που μετατρέπει οπτικά μπλοκ σε οδηγίες συναρμολόγησης. Στη συνέχεια, αυτό το πρόγραμμα assembler μετατρέπεται σε bytecode και μεταφέρεται στη συσκευή για εκτέλεση.
Η αρχιτεκτονική αυτής της εικονικής μηχανής είναι αρκετά απλή και δεν έχει ιδιαίτερο νόημα η περιγραφή της· στο Διαδίκτυο θα βρείτε πολλά άρθρα σχετικά με το σχεδιασμό των απλούστερων εικονικών μηχανών.
Συνήθως διαθέτω 1000 byte για τη στοίβα της εικονικής μου μηχανής, τα οποία είναι αρκετά για εξοικονόμηση. Φυσικά, οι βαθιές αναδρομές μπορούν να εξαντλήσουν οποιαδήποτε στοίβα, αλλά είναι απίθανο να έχουν πρακτική χρήση.

Ο bytecode που προκύπτει είναι αρκετά συμπαγής. Για παράδειγμα, ο bytecode για τον υπολογισμό του ίδιου παραγοντικού είναι μόνο 49 byte. Αυτή είναι η οπτική του μορφή:
Οπτικός προγραμματισμός για το Sonoff Basic

Και αυτό είναι το πρόγραμμα assembler του:

shift -1
ldi 10
call factorial, 1
print
exit
:factorial
ld_arg 0
ldi 1
gt
je 8
ld_arg 0
ld_arg 0
ldi 1
sub
call factorial, 1
mul
ret
ldi 1
ret

Εάν η μορφή συναρμολόγησης της αναπαράστασης δεν έχει καμία πρακτική αξία, τότε η καρτέλα "javascrit", αντίθετα, δίνει μια πιο οικεία εμφάνιση από τα οπτικά μπλοκ:

function factorial(num) {
  if (num > 1) {
    return num + factorial(num - 1);
  }
  return 1;
}

window.alert(factorial(10));

Σχετικά με την απόδοση. Όταν έτρεξα το πιο απλό σενάριο flasher, έλαβα ένα τετραγωνικό κύμα 47 kHz στην οθόνη του παλμογράφου (με ταχύτητα ρολογιού επεξεργαστή 80 MHz).
Οπτικός προγραμματισμός για το Sonoff BasicΟπτικός προγραμματισμός για το Sonoff Basic
Νομίζω ότι αυτό είναι ένα καλό αποτέλεσμα, τουλάχιστον αυτή η ταχύτητα είναι σχεδόν δέκα φορές μεγαλύτερη από αυτή Λουά и Εσπρουίνο.

Το τελευταίο μέρος

Συνοψίζοντας, θα πω ότι η χρήση σεναρίων μας επιτρέπει όχι μόνο να προγραμματίζουμε τη λογική της λειτουργίας μιας ξεχωριστής συσκευής, αλλά καθιστά επίσης δυνατή τη σύνδεση πολλών συσκευών σε έναν ενιαίο μηχανισμό, όπου ορισμένες συσκευές επηρεάζουν τη συμπεριφορά άλλων.
Σημειώνω επίσης ότι η επιλεγμένη μέθοδος αποθήκευσης σεναρίων (απευθείας στις ίδιες τις συσκευές και όχι στον διακομιστή) απλοποιεί την εναλλαγή συσκευών που ήδη λειτουργούν σε άλλο διακομιστή, για παράδειγμα σε ένα οικιακό Raspberry, εδώ εντολή.

Αυτό είναι όλο, θα χαρώ να ακούσω συμβουλές και εποικοδομητική κριτική.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο