Αυτοκίνητο με βιντεοκάμερα. Έλεγχος WiFi. Έλεγχος μηχανής μέσω WiFi χρησιμοποιώντας ESP8266 Nodemcu

Αυτή είναι μια μικρή ιστορία για το πώς να οικοδομήσουμε ένα ρομπότ με τη μορφή ενός αυτοκινήτου παιχνιδιών με μια βιντεοκάμερα που μπορεί να ελεγχθεί χρησιμοποιώντας έναν υπολογιστή ή ένα smartphone στο Android OS μέσω WiFi. Η συσκευή δεν έχει αυτονομία με την έννοια της συμπεριφοράς της (όπως η αναγνώριση οτιδήποτε), ο έλεγχος είναι μόνο από ένα άτομο, οπότε το "ρομπότ" δεν είναι μια εντελώς κατάλληλη λέξη στον τίτλο.
Όλοι άρχισαν με το γεγονός ότι η ιδέα της διαχείρισης των συσκευών παιχνιδιών πρώτου προσώπου (το λεγόμενο FPV) φαινόταν εξαιρετικά ενδιαφέρον από την άποψη της ίδιας της διαδικασίας. Μετά από όλα, μπορούμε έτσι να συνειδητοποιήσουμε την παρουσία μας, όχι στο Εικονικός κόσμος, και πραγματικά.
Είναι ευκολότερο και ταχύτερο να εφαρμόσει αυτή την ιδέα σε αυτοκίνητα παιχνιδιών ή μοντέλων. Οι τρέχουσες τεχνολογίες πρέπει να δώσουν σε αυτόν τον κλάδο και να προσφέρουν πολλά παρόμοια πράγματα. Ωστόσο, η πρόταση αυτή ήταν αρκετά ακριβή σε σύγκριση με αυτό που θα μπορούσε να γίνει.
Δεδομένου ότι αυτό είναι το πρώτο μου έργο, δεν ήμουν σε θέση να προγραμματίσω τίποτα κανονικά και αποφάσισα να αναζητήσω πρώτα τους ανθρώπους και τις λύσεις τους σε αυτό το καθήκον.
Ξεκινώντας τη μελέτη των επιλογών, πώς μπορώ να εφαρμόσω αυτή την ιδέα, βρήκα ένα πολύ Λεπτομερής περιγραφή Ένα τέτοιο έργο . Ο συγγραφέας του με βοήθησε με χαρά να καταλάβω τα προβλήματα που προκύπτουν κατά τη δημιουργία ενός ρομπότ.
Έτσι πρώτα και βρήκα τι ... Duino. Δεδομένου ότι ήταν η έτοιμη έκδοση του μικροελεγκτή, όπου δεν ήταν απαραίτητο να συγκεντρωθεί η ταινία προς αυτόν, το επέλεξα. Επίσης, μου άρεσε επίσης την παρουσία ενός bootloader που σας επιτρέπει να αναβοσβήνετε ένα μικροελεγκτή χωρίς προγραμματιστές.

Για να εφαρμόσετε αυτό το έργο, θα χρειαστείτε:

  • Arduino Microcontroller (οποιοσδήποτε: Nano, Uno, Mega)
  • Μπαταρία 9,6volt
  • Κινεζική μηχανή στον ραδιοεπικοινωνιακό έλεγχο
  • Router dir320 (ή οποιοδήποτε άλλο υλικολογικό λογισμικό ανοικτής γραφής)
  • Logitech C310 Webcam ή οποιοδήποτε άλλο με ρεύμα UVC






Προγράμματα πέντε: στον υπολογιστή, στο Android, στο δρομολογητή (Server Control και το βίντεο), και στον μικροεπεξεργαστή.
Σχέδιο εργασίας: Σύνδεση επιτραπέζιος υπολογιστής (Laptop, τότε PC) με δρομολογητή WiFi. Στον δρομολογητή, όταν είναι ενεργοποιημένη, τα προγράμματα 2E φορτώνονται αυτόματα:
1) διακομιστής. Αυτό το πρόγραμμα ανοίγει την υποδοχή (σύνδεση) σε μια συγκεκριμένη θύρα και περιμένει όταν ο πελάτης συνδέεται με αυτή τη θύρα με αυτό (οποιοδήποτε πρόγραμμα που επικοινωνεί με αυτή τη θύρα και επίσης θα ενημερώσει συγκεκριμένα στο διακομιστή ότι είναι έτοιμο να εργαστεί μέσω μιας ανοικτής υποδοχής). Στη συνέχεια, μετά την εγκατάσταση της σύνδεσης, όλα όσα προέρχονται από τον πελάτη θα ανακατευθυνθούν από μια συγκεκριμένη διαδρομή, για εμάς είναι μια θύρα COM, ένας μικροεπεξεργαστής συνδέεται σε αυτή τη θύρα. Και αντίθετα, όλα όσα προέρχονται από τη θύρα COM θα επισκευαστούν από τον πελάτη.
2) Το πρόγραμμα επεξεργασίας βίντεο καταγράφει με Κάμερα USB και στείλτε σε μια συγκεκριμένη θύρα. Για να το δείτε, απλά πρέπει να έχετε μια σύνδεση με το δρομολογητή σε αυτό το λιμάνι.
Αφού εγκατασταθεί η σύνδεση WiFi μεταξύ του υπολογιστή και του δρομολογητή, εκτελέστε το πρόγραμμα ελέγχου ρομπότ στον υπολογιστή (ο ίδιος πελάτης), αυτό το πρόγραμμα συνδέεται με το πρόγραμμα διακομιστή στο δρομολογητή. Το ίδιο ή άλλο πρόγραμμα μεταδίδει βίντεο από δρομολογητή WiFi.
Στη συνέχεια, ο χρήστης μπορεί να ελέγξει το αυτοκίνητο και να πιέζει, για παράδειγμα, το κουμπί "forward". Το πρόγραμμα PC αναφέρεται στην εντολή "Προώθηση" απευθείας στο δρομολογητή, στην IP του, αλλά σε μια συγκεκριμένη θύρα. Στο δρομολογητή, αυτή η εντολή εισέρχεται στο πρόγραμμα διακομιστή, επειδή Αποστέλλεται στο λιμάνι του και μέσα στην ανοιχτή πρίζα. Το πρόγραμμα διακομιστή, χωρίς να κάνει τίποτα με αυτή την ομάδα, απλά το στέλνει στη θύρα COM. Έτσι, η ομάδα "προς τα εμπρός" αποδεικνύεται ότι βρίσκεται στον μικροεπεξεργαστή, η οποία ως απάντηση σε αυτό δίνει το σήμα "προς τα εμπρός σε ένα από τα συμπεράσματά του. Σε τέτοια συμπεράσματα, το κύκλωμα ελέγχου κινητήρα είναι συνδεδεμένο, επειδή Ο ίδιος ο μικροεπεξεργαστής μπορεί να τους διαχειριστεί λόγω της χαμηλής κατανάλωσης.
Ελέγξτε την εκτελεστική συσκευή μέσω του δρομολογητή, χωρίς μικροεπεξεργαστή δεν θα λειτουργήσει, επειδή Ο μικροεπεξεργαστής μπορεί να σχηματίσει σήματα "1" (τάση\u003e 2.5V) ή "0" (λιγότερο υποδεικνυόμενη) σε οποιαδήποτε από τις δωδεκάδες άλλα συμπεράσματα. Ο δρομολογητής δεν έχει συμπεράσματα, υπάρχουν μόνο θύρες I / O, όπως USB ή COM (σειριακό), στο οποίο 2-3 καλώδια.
Τώρα μέρος είναι πρακτικό. Θα πω εκ των προτέρων ότι παρά τις φαινομενικές δυσκολίες, όλα είναι πραγματικά απλά, αν μιλάμε για μια απλή αντιγραφή αυτού του έργου - τελικά, όλα έχουν ήδη γίνει και έργα. Απλά πρέπει να εκτελέσετε αυτήν την οδηγία ακριβώς.
Αρχικά, ο μικροελεγκτής ήταν freeduino maxserial ο οποίος είχε μια θύρα COM, η οποία ήταν μία από τις λίγες (όπως το θεωρούσαμε) για να συνδεθείτε με το δρομολογητή UART, γι 'αυτό χρειάζεστε για να κολλήσετε τον προσαρμογέα με το uarta στο com για να το συνδέσετε στο δρομολογητή. Δεν ήθελα πραγματικά να το πάρω, καθώς εξακολουθεί να υπάρχει Arduino, και ο Freeduino στην Ουκρανία δεν είναι.



Όπως σκέφτηκα αργότερα, ήταν απλώς ένα υπερβολικό ταξίδι του σχεδίου. Μπορείτε να κάνετε μόνο με 1 καλωδίωση που θα μεταβεί από το δρομολογητή TX (στο σχήμα) σε Rx (0 PIN) του μικροελεγκτή.
Δεν είναι σαφές γιατί αποδείχθηκε ότι είναι TX στο TX στο Freduin. Πιθανότατα, ο χαρακτηρισμός απλώς εφαρμόζεται εσφαλμένα. (εδώ 0 pin tx) Είναι καλύτερα να πάρετε το πρωτότυπο .
Αγόρασα μια καλή γραφομηχανή, αν και κινέζικα



Το μηχάνημα ήταν πολύ ισχυρό, 5 κιλά σε μια επίπεδη επιφάνεια τράβηξε πολύ σίγουρη. Επίσης, περιλάμβανε την μπαταρία για 6 βολτ. Όσον αφορά τα ηλεκτρονικά, η γραφομηχανή έχει ήδη ένα έτοιμο οδηγό οδήγησης, το οποίο μπορεί να υποβληθεί από τους διαχειριστές των εξόδων χαμηλής τάσης από ένα μικροελεγκτή (αν δεν ήταν τυχεροί με το μηχάνημα - ο οδηγός του κινητήρα θα μπορούσε επίσης να ληφθεί από το Arduino)
Ο δρομολογητής απαιτεί το υλικολογισμικό OpenWRT και τη λίστα των συσκευασιών που καθορίζονται στο σχήμα.



Ο δρομολογητής μπορεί να ρυθμιστεί ως σημείο πρόσβασης που μπορεί να συνδεθεί οποιαδήποτε συσκευή WiFi. Και ακόμα κι αν δεν υπάρχει λογισμικό Για τον έλεγχο του μηχανήματος - Χρησιμοποιήστε το ως ένα ασύρματο θάλαμο παρακολούθησης βίντεο.
Η κάμερα C310 συνδέεται ακριβώς θύρα USB Στον δρομολογητή και δεν απαιτεί συγκόλληση, απαιτεί μικρές ρυθμίσεις στο δρομολογητή. Το έργο έχει 2 αλυσίδες ισχύος, 1 αλυσίδα τροφοδοτείται από 9,6 βολτ - δρομολογητή και μικροελεγκτή, 2 αλυσίδα που τροφοδοτείται από 6 βολτ - μονάδα δίσκου και διεύθυνσης. Μπορείτε να κάνετε συνολικά 1 πηγή ισχύος 9,6 βολτ, αλλά πιο χωρητικότητας. Ο δρομολογητής καταναλώνει 2α, ο μικροελεγκτής καταναλώνει σχεδόν ανεπαίσθητα, το μηχάνημα 4α.
Το πρόγραμμα MicroController επεξεργάζεται τα μηνύματα που προέρχονται από τη σειριακή θύρα του δρομολογητή, η επεξεργασία απογειώνεται από το PORTB Arduino, για παράδειγμα, αν ήρθε στο δρομολογητή 2, στη συνέχεια, μεταφράζοντας Δυαδικό σύστημα Παίρνουμε 00000010 - τι αντιστοιχεί σε 2 ακίδες στο PORB. Μια τέτοια λύση σάς επιτρέπει να διαχειρίζεστε ταυτόχρονα πολλαπλούς καρφίτσες. Αυτό συνέβη στο τέλος:




Εφαρμογή για το Android:



Εφαρμογή PC:




Το έργο αυτό δεν έχει ακόμη ολοκληρωθεί και συνεχίζει να βελτιώνεται.
Στα σχέδια που χρησιμοποιούν το Arduino Mega, το δρομολογητή MR3020, για να αφήσετε έναν webakamer όπως είναι (είναι δυνατόν να προσθέσετε ένα σφαιρικό φακό για μεγαλύτερη προβολή), χρησιμοποιήστε το PWM για ομαλό και ακριβές έλεγχο, χρησιμοποιήστε τη μονάδα Servo για να προσθέσετε μια σειρά . Προσθέστε βίντεο στο Android.



- Πλήρης κατάλογος του διοικητικού συμβουλίου

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

Επισκόπηση έργου

Μπορείτε να εφαρμόσετε αυτό το σύστημα όπου πρέπει να ενεργοποιήσετε το φορτίο DC Μια συγκεκριμένη ώρα. Σε αυτό θα σας βοηθήσει App androidχωρίς να απαιτείται διεπαφή υλικού, πληκτρολόγιο και Οθόνη LCD.

αξεσουάρ

ESP8266 Συγκρότημα φυτών Mackety

ESP8266 - ένα φθηνό τσιπ SOC με ένα ενσωματωμένο μικροελεγκτή και μια πλήρη στοίβα πρωτοκόλλου TCP / IP, πράγμα που σημαίνει ότι μπορεί να έχει άμεση πρόσβαση σε σας Δίκτυο Wi-Fi.

Δεδομένου ότι αυτό το τσιπ έχει το δικό του μικροελεγκτή, μπορείτε να τοποθετήσετε τον κώδικα της εφαρμογής σας ή μπορείτε να χρησιμοποιήσετε την ενότητα σαν έναν πομποδέκτη Wi-Fi που θα κάνουμε σε αυτό το έργο. Θα χρησιμοποιούσε πιο αποτελεσματικά αυτή τη μονάδα και ως πομποδέκτης και ως ελεγκτής, αλλά για μαθησιακούς σκοπούς θα αλληλεπιδρούμε με την ενότητα χρησιμοποιώντας το Arduino.

Το τσιπ ESP8266 έρχεται μέσα Διαφορετικές μονάδες. Θα χρησιμοποιήσουμε τη μονάδα ESP-01. Φυσικά, μπορείτε να χρησιμοποιήσετε οποιαδήποτε άλλη μονάδα.

Πρώτον, θα πρέπει να γνωρίζετε ότι η μονάδα λειτουργεί με τάση 3,3 V και η τάση υψηλής λογικής στάθμης από το Arduino πρέπει να είναι το ίδιο να μην βλάψει την ενότητα μας. Αυτό απαιτεί τον μετατροπέα στάθμης τάσης μεταξύ της πλακέτας Arduino (το οποίο εκτελείται 5 V) και η μονάδα. Τα καλά νέα είναι ότι μόνο η έξοδος για τη μετάδοση στο Arduino θα χρειαστεί στον μετατροπέα, καθώς η έξοδος λήψης αναγνωρίζει συνήθως λογικά σήματα με τάση 3,3 V από ESP8266.

Ένας από τους απλούστερους τρόπους για να εκτελέσετε αυτή τη μετατροπή είναι ένα σχέδιο από το Sparkfun. Μπορείτε να παραγγείλετε μια έτοιμη μονάδα.

Μετατροπέας επιπέδου 5V → 3.3V

Το παρακάτω σχήμα δείχνει το punout της μονάδας μας στο ESP8266:

ΠαραγωγήΣκοπός
UTXD.Μεταφορά δεδομένων μέσω UART
URXD.Λαμβάνοντας δεδομένα μέσω UART. Η έξοδος στην οποία συνδέεται πρέπει να είναι 3,3 V.
Ch_pd.Shutdown: Το χαμηλό επίπεδο εισόδου απενεργοποιεί το τσιπ, υψηλό επίπεδο Στην είσοδο το περιλαμβάνει. Για κανονική λειτουργία της μονάδας, πρέπει να το σφίξετε στη γραμμή τροφοδοσίας.
Gpio0.Κατά τη φόρτωση: πρέπει να υπάρχει υψηλό επίπεδο για να εισαγάγετε τον κανονικό τρόπο φόρτωσης. Το χαμηλό επίπεδο εισέρχεται Ειδικοί τρόποι Λήψεις.
Gpio2.Κατά τη φόρτωση: το χαμηλό επίπεδο προκαλεί το bootloader να εισάγει τη λειτουργία Flash Memory Load. Το υψηλό επίπεδο προκαλεί την κανονική λειτουργία φόρτωσης.
RstΕπαναφορά; Το ενεργό επίπεδο είναι χαμηλό.
GND.Γη.
VCC.Power / 3.3V.

Χρησιμοποίησα LM317, προσαρμόσιμο γραμμικό ρυθμιστή τάσης με ρεύμα εξόδου μέχρι 1,5 Α, για να δώσει μια ενότητα με κατάλληλη πηγή ισχύος 3,3 V.

Σημείωση: Μην χρησιμοποιείτε την έξοδο 3.3 V από το Arduino, καθώς ο σταθεροποιητής τάσης 3.3 V στην πλακέτα Arduino δεν μπορεί να παράσχει την τρέχουσα τιμή για την ενότητα, ειδικά όταν η κατανάλωση ενέργειας είναι κορυφή κατά τη διάρκεια της μετάδοσης.

Χρησιμοποίησα BS170 (αντί του BSS138) για τον λογικό επίπεδο μετατροπέα. Και οι δύο λειτουργούν καλά.

Τώρα μπορείτε να συνδέσετε τη μονάδα σας σε έναν υπολογιστή χρησιμοποιώντας έναν μετατροπέα USB-TTL και να το δοκιμάσετε.

Συνέλευση του αναμεταδότη

Για τον έλεγχο του ρελέ, χρησιμοποίησα ένα διπολικό Transistor NPN BC337 με αντίσταση 1 COM με βάση. Προστασία από την αντίστροφη τάση του πηνίου, χρησιμοποίησα τη δίοδο 1N4007.

Κανονικά κλειστός (NC) Επικοινωνήστε με το ρελέ επαφής αποφάσισα να συνδεθώ με το έδαφος.

Arduino κώδικας

Τώρα αντιμετωπίζουμε ένα πρόβλημα. Το ESP8266 χρησιμοποιεί το UART ως μια διεπαφή εντολών και το Arduino Uno (το οποίο χρησιμοποιεί ATMEGA328) έχει μόνο μία θύρα UART. Αυτή η θύρα συνδέεται ήδη στη γέφυρα USB-TTL, καθώς και στα συμπεράσματα 0 και 1.

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

Πολλοί άνθρωποι (συμπεριλαμβανομένου μου) αναφέρουν προβλήματα με ένα πρόγραμμα διαδοχικής θύρας όταν Υψηλές ταχύτητες Μεταδόσεις - όπως και για εκείνους που θα χρησιμοποιήσουμε με ESP8266, 115200 bits / s. Μπορώ να πω ότι έχετε το 50% των δεδομένων που δημιουργούνται από την ενότητα θα υποστούν βλάβη εάν χρησιμοποιείτε ένα λογισμικό UART και από τα δεδομένα που μεταδίδονται από το Arduino έως τη μονάδα δεδομένων σχεδόν 100% θα είναι σωστή. Έλαβα αυτά τα αποτελέσματα μετά από τα σήματα παρακολούθησης στις γραμμές RX και TX.

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

// Αφαιρέστε το σειριακό. ***, εάν θέλετε να χρησιμοποιήσετε μια σειριακή θύρα υλικού για επικοινωνία με ESP // Unlock ESP8266. *** Εάν θέλετε να χρησιμοποιήσετε το ESP για να χρησιμοποιήσετε μια σειριακή θύρα λογισμικού (3.3 συμπεράσματα) #DEFINE ESP8266_AVAILIBLE () Serial.Alial () //resp8266. Ifind () #DEFINE ESP8266_FIND (ARG) Serial.Find (ARG) //ESP8266.Find () #DEFINE () Serial.READ () // ESP8266. ) #DEFINE ESP8266_WRITE (Arg1, Arg2) Serial.Write (Arg1, Arg2) //resp8266.Write (//resp8266.write_arg1,rg2) #DEFINE ESP8266_Print (Arg) Serial.Print (ARG) //ESP8266.Print )

Στην πηγή θα βρείτε ένα μέρος του κώδικα που ορίζει την ενότητα με το δρομολογητή σας:

SendCommand ("στο + rst \\ r \\ n", 2000, debug). // Επανεκκινήστε τη μονάδα SendCommand ("στο + cwmode \u003d 1 \\ r \\ n", 1000, debug). // Διαμορφώστε ως σημείο πρόσβασης SendCommand ("AT + CWJAP \u003d \\" TUR \\ ", \\" 341983 # TUR \\ "\\ R \\ N", 3000, Debug). // **** Αλλάξτε το SSID και τον κωδικό πρόσβασης σύμφωνα με το δίκτυό σας ****** // καθυστέρηση (10.000). SendCommand ("στο + cifsr \\ r \\ n", 1000, debug). // Αποκτήστε τη διεύθυνση IP SendCommand ("στο + cipmux \u003d 1 \\ r \\ n", 1000, debug). // Διαμορφώστε για αρκετές συνδέσεις sendCommand ("at + cipserver \u003d 1.1337 \\ r \\ n", 1000, debug). // ενεργοποιήστε τον διακομιστή στη θύρα 1337

Το σκίτσο του κύκλου περιμένει την εντολή να έρθει Σύνδεση Wi-Fi. Επί του παρόντος, υποστηρίζονται οι ακόλουθες εντολές:

  • «Con» για να αποκτήσετε μια κατάσταση συμπερασμάτων, ένα υψηλό ή χαμηλό λογικό επίπεδο.
  • 'On \u003d' περιλαμβάνουν την κατάλληλη παραγωγή.
  • 'Of \u003d' Απενεργοποιήστε την αντίστοιχη έξοδο.
  • Το 'TM \u003d N / FS' ρυθμίζει τον χρονοδιακόπτη ισχύος (n) ή το κλείσιμο (F) της κατάλληλης παραγωγής.

Όλες οι εντολές έχουν απάντηση επιβεβαίωσης.

Σημειώσεις:

  • Ορισμένα τμήματα του σκίτσου βασίζονται.
  • Εάν χρησιμοποιείτε μονάδες με παλιό SDK, ενδέχεται να έχετε τα ίδια λάθη όπως έχω. Η μόνη λύση σε αυτή την περίπτωση είναι η ενημέρωση του υλικολογισμικού σας Τελευταία έκδοση. Κοιτάξτε, για να λάβετε βοήθεια στην ενημέρωση του υλικολογισμικού της μονάδας σε ESP8266. Ενημέρωσα το υλικολογισμικό από την έκδοση 1.3 έως 1.5.4.

Πλήρης κωδικός προγράμματος:

#Περιλαμβάνω. #DEFINE DEBUG 0 // Εάν χρησιμοποιείτε μια σειριακή θύρα υλικού για επικοινωνία με ESP, αλλάξτε την τιμή στο 0 # Espbaudrate 115200 #DEFINE HWSBAUDRATE 115200 #DEFINE HWSBAUDRATE 115200 #DEFINE EXPUT1 11 #DEFINE Έξοδος2 12 #define Έξοδος3 13 // Unlock Serial. ** * Εάν θέλετε να χρησιμοποιήσετε μια σειριακή θύρα υλικού για επικοινωνία με το ESP // UNSEET ESP8266. *** Εάν θέλετε να χρησιμοποιήσετε μια σειριακή θύρα λογισμικού για να επικοινωνήσετε με το ESP (2,3) #DEFINE ESP8266_AVAILIBLE () SERIAL.ARIAL.ALIAL () //resp8266.Χωρίς () #DEFINE ESP8266_FIND (ARG) Serial.Find (ARG) //ESP8266.Find () #DEFINE ESP8266_READ () SERIAL.READ () //ESP8266.READ (ARG1 , Arg2) serial.write (arg1, arg2) //resp8266.write_arg1.026_print (arg) serial.print (arg) //resp8266.print (/ desp8266.print( make) // , Μια γραμμή TX Arduino με μια έξοδο 3. // Αυτό σημαίνει ότι πρέπει να συνδέσετε τη γραμμή TX από την ESP στην έξοδο 2 Arduino, // γραμμή RX από την ESP στην έξοδο 3 Arduino. Softwareserial ESP8266 (2, 3). / ************* / byte overtstate; Byte outputtmrisset; Byte εξόδου. Μακρύ εξάπλωση. / ************* / / *** εντολές ** / string getstate \u003d "con"? // Σειρά ερωτημάτων από μια εφαρμογή κινητής τηλεφωνίας για να μάθετε την κατάσταση κάθε seton seton εξόδου \u003d "on \u003d"; // μια σειρά από ένα ερώτημα από μια εφαρμογή κινητής τηλεφωνίας για να ενεργοποιήσετε την έξοδο setoff \u003d "of \u003d". // Σειρά ενός ερωτήματος από μια εφαρμογή για κινητά για να απενεργοποιήσετε το χρονόμετρο String \u003d "TM \u003d" Έξοδος, // Σειρά ερωτήματος από μια εφαρμογή για κινητά για να ορίσετε ένα χρονοδιακόπτη για έξοδο / ************* / VOID SETUP (SERIAL.BEGIN (HWSBAUTE); // Σειριακή θύρα για την αποστολή μηνυμάτων Από το Arduino στον υπολογιστή ESP8266.BEGIN (ESPBAUDRATE); // Προγραμματισμός σειριακή θύρα για την αποστολή μηνυμάτων από Arduino έως ESP8266 PinMode (έξοδος1, έξοδος). digitalwrite (έξοδος1, χαμηλή) · pinmode (έξοδος2, έξοδος). digitalwrite (έξοδος2, χαμηλή) · Pinmode (έξοδος3, έξοδος) · digitalwrite (έξοδος3, χαμηλή) · // επανεκκίνηση της μονάδας sendCommand ("στο + rst \\ r \\ n", 2000, debug) · // διαμορφώστε ως σημείο πρόσβασης sendCommand ("at + cwmode \u003d 1 \\ r \\ n ", 1000, debug), // **** αλλάξτε το SSID και τον κωδικό πρόσβασης σύμφωνα με το δίκτυό σας ****** // sendCommand (" + cwjap \u003d \\ "tur \\" "341983 # Tur \\" \\ r \\ n ", 3000, debug); καθυστέρηση (10.000); // πάρτε τη διεύθυνση IP sendCommand (" στο + cifsr \\ r \\ n ", 1000, debug); // διαμορφώστε για πολλά Συγκεκριμένες συνδέσεις ("στο + cipmux \u003d 1 \\ r \\ n", 1000, debug); // ενεργοποιήστε τον διακομιστή στη θύρα 1337 sendCommand ("at + cipserver \u003d 1,1337 \\ r \\ αν (debug \u003d\u003d true) serial.println ("Server Ready"). ) Void Loop () (αν (ESP8266_AVAILABLE ()) // Ελέγξτε εάν αποστέλλεται ένα μήνυμα ESP (εάν (usp8266_find ("+ IPD")) (// περιμένετε όταν θα πληρωθεί το σειριακό ρυθμιστικό (όλα τα σειριακά δεδομένα) 1000) · // Πάρτε το αναγνωριστικό σύνδεσης έτσι ώστε να μπορούμε να αποσυνδέσουμε int σύνδεση \u003d ESP8266_READ () - 48; // αφαιρέστε 48 επειδή η λειτουργία ανάγνωσης () επιστρέφει // δεκαδική θέση στην ASCII και 0 (πρώτα δεκαδικός αριθμός) Ξεκινά με 48 closecommand \u003d "at + cipclose \u003d"; // Δημιουργία μιας Closecommand + \u003d Connection Connection Connection. // προσθέστε το αναγνωριστικό σύνδεσης Closecommand + \u003d "\\ r \\ n" αναγνωριστικό σύνδεσης. ESP8266_FIND ("?"); // Αυτό το σύμβολο καθορίζει την αρχή της εντολής του σώματος του Message String Inteam. Instream \u003d (Char) ESP8266_READ (); + \u003d (Char) ESP8266_READ (); + \u003d (Char) ESP8266_READ (); αν (debug \u003d\u003d true) serial.println (Instram). Εάν (intream.equals (getstate)) (// απάντηση στην εντολή κατάστασης \u003d<состояние_выхода_1><состояние_выхода_2><состояние_выхода_3> Απάντηση στοιχειοσειράς \u003d "status \u003d"; Απόκριση + \u003d εξόδου; Απόκριση + \u003d εξόδου; Απόκριση + \u003d εξόδου; Sendhttpresponse (σύνδεση, απάντηση). SendCommand (Closecommand, 1000, Debug). // Κλείσιμο σύνδεσης) αλλιώς αν (Int Pinnumber \u003d (ESP8266_READ () - 48); // Πάρτε το πρώτο ψηφίο, δηλ. Εάν η έξοδος 13, τότε το 1ο ψηφίο είναι 1 int δευτερεύουσα χρήση \u003d () - 48). Αν (δευτερεύουσα * \u003d 0 && δευτερεύουσα<= 9) { pinNumber *= 10; pinNumber += secondNumber; // получить вторую цифру, т.е., если вывод 13, то 2-ая цифра равна 3, // и добавить ее к первой цифре } if (pinNumber == OUTPUT1) OUTPUTstate = 1; else if (pinNumber == OUTPUT2) OUTPUTstate = 1; else if (pinNumber == OUTPUT3) OUTPUTstate = 1; digitalWrite(pinNumber, 1); String response = "Confg="; // Отклик на команду Confg=<номер_вывода> Απάντηση + \u003d pinnumber? Sendhttpresponse (σύνδεση, απάντηση); SendCommand (Closecommand, 1000, Debug). // κλείσιμο σύνδεσης) αλλιώς εάν (int pinnumber \u003d (ESP8266_READ () - 48); // Πάρτε το πρώτο ψηφίο, δηλ. Εάν η έξοδος 13, τότε το 1ο ψηφίο είναι 1 int δευτερεύουσα χρήση \u003d () - 48). Αν (δευτερεύουσα * \u003d 0 && δευτερεύουσα<= 9) { pinNumber *= 10; pinNumber += secondNumber; // получить вторую цифру, т.е., если вывод 13, то 2-ая цифра равна 3, // и добавить ее к первой цифре } if (pinNumber == OUTPUT1) OUTPUTstate = 0; else if (pinNumber == OUTPUT2) OUTPUTstate = 0; else if (pinNumber == OUTPUT3) OUTPUTstate = 0; digitalWrite(pinNumber, 0); // изменить состояние вывода String response = "Confg="; // Отклик на команду Confg=<номер_вывода> Απάντηση + \u003d pinnumber? Sendhttpresponse (σύνδεση, απάντηση). SendCommand (Closecommand, 1000, Debug). // Κλείσιμο σύνδεσης) αλλιώς αν (Int Pinnumber \u003d (ESP8266_READ () - 48); // Πάρτε το πρώτο ψηφίο, δηλ. Εάν η έξοδος 13, τότε το 1ο ψηφίο είναι 1 int δευτερεύουσα χρήση \u003d () - 48). Αν (δευτερεύουσα * \u003d 0 && δευτερεύουσα<= 9) { pinNumber *= 10; pinNumber += secondNumber; // получить вторую цифру, т.е., если вывод 13, то 2-ая цифра равна 3, // и добавить ее к первой цифре } if (esp8266_Read() == "n") { if (DEBUG == true) Serial.println("on"); if (pinNumber == OUTPUT1) OUTPUTTMRState = 1; else if (pinNumber == OUTPUT2) OUTPUTTMRState = 1; else if (pinNumber == OUTPUT3) OUTPUTTMRState = 1; } else { if (DEBUG == true) Serial.println("off"); if (pinNumber == OUTPUT1) OUTPUTTMRState = 0; else if (pinNumber == OUTPUT2) OUTPUTTMRState = 0; else if (pinNumber == OUTPUT3) OUTPUTTMRState = 0; } int j = 0; byte Atime; // Таймер может настроен на максимальное значение в 1 сутки // поэтому программа может принять 5 цифр, так как 1 сутки равны 86400 секундам long Time; // Прочитать секунды, значение имеет переменное количество цифр, поэтому читать, пока не получим "s", // что является символом завершения в теле моего сообщения от мобильного телефона while (1) { Time = esp8266_Read(); if (Time == "s") break; Atime[j] = Time - 48 ; j++; } switch (j) // секунды... { case 1: // одна цифра Time = Atime; break; case 2: // две цифры Time = Atime * 10 + Atime; break; case 3: // три цифры Time = Atime * 100 + Atime * 10 + Atime; break; case 4: // четыре цифры Time = Atime * 1000 + Atime * 100 + Atime * 10 + Atime; break; case 5: // пять цифр Time = Atime * 10000 + Atime * 1000 + Atime * 100 + Atime * 10 + Atime[j]; break; } if (DEBUG == true) { Serial.println("Timer:"); Serial.println(Time); } Time = Time * 1000 + millis(); if (DEBUG == true) { Serial.println("Pin:"); Serial.println(pinNumber); } if (pinNumber == OUTPUT1) { OUTPUTTMRIsSet = 1; OUTPUTTimer = Time; } else if (pinNumber == OUTPUT2) { OUTPUTTMRIsSet = 1; OUTPUTTimer = Time; } else if (pinNumber == OUTPUT3) { OUTPUTTMRIsSet = 1; OUTPUTTimer = Time; } String response = "tConfg="; // Отклик на команду tConfg=<номер_вывода> Απάντηση + \u003d pinnumber? Sendhttpresponse (σύνδεση, απάντηση). SendCommand (Closecommand, 1000, Debug). // Κλείσιμο σύνδεσης) ΑΛΛΑ // υιοθετήθηκε μη υποστηριζόμενη εντολή (απόκριση συμβολοσειρών \u003d "Σφάλμα". Sendhttpresponse (σύνδεση, απάντηση); sendCommand (closecommand, 1000, debug); // close connection))) / ***** Για κάθε έξοδο ****** / IF (OutputTmrisset! \u003d 0 && (εξάξεων εξόδου< millis())) { digitalWrite(OUTPUT1, OUTPUTTMRState); OUTPUTstate = OUTPUTTMRState; OUTPUTTMRIsSet = 0; } if (OUTPUTTMRIsSet != 0 && (OUTPUTTimer < millis())) { digitalWrite(OUTPUT2, OUTPUTTMRState); OUTPUTstate = OUTPUTTMRState; OUTPUTTMRIsSet = 0; } if (OUTPUTTMRIsSet != 0 && (OUTPUTTimer < millis())) { digitalWrite(OUTPUT3, OUTPUTTMRState); OUTPUTstate = OUTPUTTMRState; OUTPUTTMRIsSet = 0; } /***************************************/ } /* Name: sendData Description: Функция, используемая для отправки данных на ESP8266. Params: command - данные/команда для отправки; timeout - время ожидания отклика; debug - печатать в консоль?(true = да, false = нет) Returns: Отклик от esp8266 (если есть отклик) */ String sendData(String command, const int timeout, boolean debug) { String response = ""; int dataSize = command.length(); char data; command.toCharArray(data, dataSize); esp8266_Write(data, dataSize); // передача символов на esp8266 if (debug) { Serial.println("\r\n====== HTTP Response From Arduino ======"); Serial.write(data, dataSize); Serial.println("\r\n========================================"); } long int time = millis(); while ((time + timeout) > Millis ()) (ενώ (ESP8266_AVAILable ()) (// ESP έχει δεδομένα, έτσι να τα εξαγάγετε στην κονσόλα CHAR C \u003d ESP8266_READ (). // Διαβάστε το ακόλουθο σύμβολο. Απόκριση + C;)) εάν (debug)) Σειριακή .Print (απόκριση);) απόκριση επιστροφής; ) / * Όνομα: sendhtttpresponse Περιγραφή: Μια λειτουργία που στέλνει http 200, html UTF-8 απάντηση * / voidgettpresponse (int σύνδεση, περιεχόμενο συμβολοσειράς) (// Δημιουργία συμβολοσειράς απόκρισης httpresponse; Strtpheader; // http httpheader \u003d "http http / 1.1 200 OK \\ R \\ NCOTent-Τύπος: Κείμενο / HTML; charset \u003d utf-8 \\ r \\ n "; httpheader + \u003d" Μήκος περιεχομένου: "; httpheader + \u003d content.length (); httpheader + \u003d \\ \\ r \\ n "; httpheader + \u003d" connect: κλείστε \\ r \\ n \\ r \\ n "; httpresponse \u003d httpheader + περιεχόμενο +" "// εδώ στον κωδικό σφάλματος: ο τελευταίος χαρακτήρας στο" περιεχόμενο "δεν αποστέλλεται, Έτσι πρόσθεσα ένα επιπλέον sendcipdata (σύνδεση, httpresponse);) / * Όνομα: sendcipdata Περιγραφή: Στείλτε εντολή cipsend \u003d ,<данные> * / Void sendcipdata (int σύνδεση, δεδομένα συμβολοσειράς) (string cipsend \u003d "at + cipsend \u003d"; cipsend + \u003d σύνδεση, cipsend + \u003d ","; cipsend + \u003d data.length (); cipsend + \u003d "\\ r \\ n ", sendCommand (cipsend, 1000, debug). senddata (δεδομένα, 1000, debug);) / * Όνομα: sendCommand Περιγραφή: Η λειτουργία που χρησιμοποιείται για την αποστολή δεδομένων σε ESP8266. Παραμέτρους: εντολή - δεδομένα / εντολή για αποστολή. Timeout - Χρόνος αναμονής απόκρισης. Debug - Εκτύπωση στην κονσόλα; (TRUE \u003d Ναι, FALSE \u003d NO) Επιστρέφει: Απάντηση από το ESP8266 (εάν υπάρχει απάντηση) * / string conneccommand (εντολή string, const const int timeout, boolean debug) (απόκριση συμβολοσειρών \u003d "". ESP8266_Print (Εντολή); // Μεταφορά χαρακτήρων σε usp8266 Long INT Time \u003d Millis (); Ενώ (((Time + Timeout)\u003e Millis ()) (ενώ (ESP8266_AVAIL) C κονσόλα \u003d ESP8266_READ (); // διαβάστε το ακόλουθο σύμβολο. Απόκριση + \u003d C;)) εάν (debug)) (serial.print (απόκριση);)

App android

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

Σημείωση: Η εφαρμογή απαιτεί Android 4.0 (Icecreamsandwich) ή υψηλότερη.

  • Πρώτα απ 'όλα, πρέπει να γνωρίζετε τη διεύθυνση IP της μονάδας σας. Εάν χρησιμοποιήσατε μια σειριακή θύρα λογισμικού, η διεύθυνση IP θα εκτυπωθεί στην κονσόλα. Εάν χρησιμοποιήσατε σειριακή θύρα υλικού, τότε πρέπει να χρησιμοποιήσετε ένα καλώδιο για να παρακολουθείτε δεδομένα στις γραμμές RX και TX για να δείτε τη διεύθυνση IP. Πρέπει επίσης να γνωρίζετε τον αριθμό θύρας, το οποίο καθορίστηκε στο σκίτσο για το Arduino. Μετά από αυτό, πατήστε "Σύνδεση" για να πάρετε την κατάσταση και των τριών εξόδων. Πρέπει να βεβαιωθείτε ότι σας Wi-Fi Router Ενεργοποιημένη και είστε συνδεδεμένοι στο τοπικό δίκτυο.
  • Τώρα κάντε κλικ σε οποιοδήποτε διακόπτη θέλετε να ενεργοποιήσετε / απενεργοποιήσετε. Κάθε φορά που θέλετε, μπορείτε να κάνετε κλικ στο "Refresh" για να ενημερώσετε την κατάσταση όλων των εξόδων.
  • Στην καρτέλα Χρονοδιακόπτες, μπορείτε να ορίσετε οποιαδήποτε από αυτές τις τρεις εξόδους για να ενεργοποιήσετε / απενεργοποιήσετε σε ένα συγκεκριμένο χρονικό διάστημα (από 0 έως 24 ώρες).
  • Μετά από οποιαδήποτε ενέργεια, θα λάβετε ένα μήνυμα με επιβεβαίωση του κατά πόσο η ομάδα ήταν επιτυχής, ή κάποιο σφάλμα προέκυψε.

Βίντεο επίδειξης

Αυτό είναι όλο! Ελπίζω ότι το άρθρο αποδείχθηκε χρήσιμο. Αφήστε σχόλια!

Έτσι θα ελέγξουμε δύο αναστρέψιμες (περιστροφή προς τις δύο κατευθύνσεις): το κύριο και το τιμόνι. Θα προκληθεί από την μπαταρία 3,7 V, αλλά μπορείτε επίσης να εφαρμόσετε σε 12 V κατ 'αρχήν εάν συμφωνείτε με την ισχύ του ελεγκτή ή να το οργανώσετε με ξεχωριστή μπαταρία.

Στο τμήμα ισχύος χρησιμοποιούμε το απλούστερο Μικροσκοπικός οδηγός Stepper Motor L9110s ή μπορείτε να χρησιμοποιήσετε τη συναρμολόγηση στο L293 \\ 8 Ή οποιαδήποτε λιγότερο ισχυρή θα βρείτε. Σε γενικές γραμμές, ζωγράφισα τα πάντα στην εικόνα.

Μπορείτε να αγοράσετε εξαρτήματα για το έργο στο Alexpress:

Ο ελεγκτής WiFi χρησιμοποίησε το αγαπημένο μου Nodemcu 0,9 ESP8266.αλλά μπορεί να χρησιμοποιήσει και Μικρό μέγεθος Wemos d1 mini.

Η μπαταρία μπορεί να φορτιστεί μέσω ενός μικρού USB, μετά την οποία τροφοδοτεί τον οδηγό κινητήρα απευθείας και ο ελεγκτής WiFi μέσω Αυξημένος μετατροπέας μέχρι 5 V.

Κωδικός προγράμματος:

#Περιλαμβάνω.
const char * ssid \u003d "Το όνομα του δικτύου σας Wi-Fi";
const char char * κωδικός πρόσβασης \u003d "Ο κωδικός πρόσβασης δικτύου".
int up \u003d 2; // διακριτές εξόδους
int down \u003d 14;
int αριστερά \u003d 4;
int δεξιά \u003d 12;
// Δημιουργήστε μια εμφάνιση του διακομιστή
// Καθορίστε το λιμάνι για να ακούσετε ως ένα επιχείρημα
Ο διακομιστής Wifiserver (80);
κενή εγκατάσταση () (
Serial.begin (9600);
Καθυστέρηση (10);
// Προετοιμασία των εξόδων
PinMode (επάνω, έξοδος);
Digitalwrite (επάνω, 0);
Pinmode (κάτω, έξοδος);
Digitalwrite (κάτω, 0);
Pinmode (αριστερά, έξοδος);
Digitalwrite (αριστερά, 0);
Pinmode (δεξιά, έξοδος);
Digitalwrite (δεξιά, 0);

// Συνδεθείτε στο δίκτυο WiFi
Serial.println ();
Serial.println ();
Serial.print ("σύνδεση με");
Serial.println (SSID);

Wifi.begin (SSID, κωδικός πρόσβασης);

Ενώ (wifi.status ()! \u003d Wl_connexed) (
Καθυστέρηση (500).
Serial.print (".");
}
Serial.println ("");
Serial.println ("συνδεδεμένο wifi");

// Έναρξη διακομιστή
Server.begin ();
Serial.println ("ξεκίνησε");
// Ενημερώστε τη διεύθυνση IP στην οθόνη Port
Serial.println (wifi.localip ());
}
κενό βρόχο () (
// Έλεγχος εάν συνδεθεί ο πελάτης
Wifullient client \u003d server.available ();
Αν (! Πελάτης) (
ΕΠΙΣΤΡΟΦΗ;
}

// αναμένετε ότι ο πελάτης δεν θα στείλει κανένα στοιχείο
Serial.println ("νέος πελάτης").
Ενώ (! Client.available ()) (
Καθυστέρηση (1);
}

// Διαβάστε την πρώτη συμβολοσειρά ερωτήματος
String req \u003d client.readstringuntil ("\\ r");
Serial.println (req);
client.flush ();

// επεξεργασία ομάδας
Εάν (req.indexof ("/ gpio / up")! \u003d -1) (
Digitalwrite (Up, 1);
Digitalwrite (κάτω, 0);
Καθυστέρηση (1000).
Digitalwrite (επάνω, 0);
Digitalwrite (κάτω, 0);
}
Αλλιώς εάν (req.indexof ("/ gpio / down")! \u003d -1) (
Digitalwrite (επάνω, 0);
Digitalwrite (κάτω, 1);
Καθυστέρηση (1000).
Digitalwrite (επάνω, 0);
Digitalwrite (κάτω, 0);
}
Αλλιώς εάν (req.indexof ("/ gpio / αριστερά")! \u003d -1) (
Digitalwrite (Up, 1);
Digitalwrite (κάτω, 0);
Digitalwrite (αριστερά, 1);
Digitalwrite (δεξιά, 0);
Καθυστέρηση (1000).
Digitalwrite (επάνω, 0);
Digitalwrite (κάτω, 0);
Digitalwrite (αριστερά, 0);
Digitalwrite (δεξιά, 0);
}
Αλλιώς εάν (req.indexof ("/ gpio / δεξιά")! \u003d -1) (
Digitalwrite (Up, 1);
Digitalwrite (κάτω, 0);
Digitalwrite (αριστερά, 0);
Digitalwrite (δεξιά, 1);
Καθυστέρηση (1000).
Digitalwrite (επάνω, 0);
Digitalwrite (κάτω, 0);
Digitalwrite (αριστερά, 0);
Digitalwrite (δεξιά, 0);
}
Αλλιώς (
Serial.println ("Μη έγκυρο αίτημα").
}

Client.flush ();
// Προετοιμασία για την απάντηση
String S \u003d "http / 1,1 200 ok \\ r \\ n \\ ncontent-type: κείμενο / html \\ r \\ n \\ n\\ r \\ n \\ r \\ n ";

S + \u003d "


Πάνω.
";
s + \u003d "
Αριστερά ";
S + \u003d "δεξιά
";
s + \u003d "
Κάτω ";
s + \u003d "
\\ n ";
// Στείλτε την απάντηση στον πελάτη
client.print (s);
Καθυστέρηση (1);
Serial.println ("αποσύνδεση πελάτη");
) Το πρόγραμμα είναι γραμμένο σε Arduino ide. Πώς να διαμορφώσετε το Arduino IDE για να εργαστείτε με τον ελεγκτή NODEMCU 0,9 ESP8266 Κοιτάξτε τη σύνδεση. Μετά τη λήψη του προγράμματος στον ελεγκτή, η οθόνη θύρας μπορεί να διαβαστεί από τη διεύθυνση IP, την οποία θα λάβει η πλακέτα μετά τη σύνδεση με το δρομολογητή WiFi. Στο πρόγραμμα περιήγησης του υπολογιστή είναι απαραίτητο Γραμμή διεύθυνσης Καταχωρίστε αυτή τη διεύθυνση και μεταβείτε στη σελίδα που θα δημιουργήσει το πρόγραμμα ελεγκτή. Θα μοιάζει με αυτό:

Κάτω.

Όταν κάνετε κλικ στο σύνδεσμο UP, το μηχάνημα θα προχωρήσει προς τα εμπρός για το 1SEK και το STOP. Όταν κάνετε κλικ στο κάτω, το μηχάνημα 1 δευτερόλεπτο θα επιστρέψει. Αριστερά - Ο κινητήρας περιστροφής θα γυρίσει τον τροχό προς τα αριστερά και το μηχάνημα θα οδηγήσει 1 δευτερόλεπτα. Το ίδιο και δεξιά όταν κάνετε κλικ δεξιά.

Όλο αυτό το σύστημα θα συνεργαστεί μόνο με ένα διαμορφωμένο σημείο πρόσβασης WiFi (WiFi-router), αλλά στο μέλλον αναρωτιέμαι να παίζω με nodemcu 0,9 ελεγκτή ESP8266Ποια θα διοργανώσει το σημείο πρόσβασης και θα εκτελέσει τη λειτουργία Web Server, ακόμα και όταν εισάγετε το IP του από το πρόγραμμα περιήγησης, θα δούμε μια ιστοσελίδα με στοιχεία ελέγχου. Είναι επίσης ενδιαφέρον να διοργανώσετε τη μεταφορά δεδομένων από έναν τέτοιο ελεγκτή σε άλλο μέσω του αυτόνομου δικτύου WiFi.

Σε αυτό το άρθρο, πληροφορίες σχετικά με τον τρόπο συλλογής της δεξαμενής σας εξοπλισμένο με κάμερα Web και διαχειρίσιμο από το δρομολογητή WiFi.

Απαραόμενα υλικά:

  1. Κάμερα Web.
  2. TP-LINK TL-MR3020 δρομολογητή
  3. Servos SG90 - 2pcs
  4. Πλατφόρμα κάμερας Αντι-δόνηση
  5. Συσσωρευτής 7.2V 5000mAh
  6. Μπαταρία 5V 2000mAh
  7. Nano 3.0 Atmel Atmega328
  8. L298N Οδηγός κινητήρα
  9. Καλώδια, θερμικούς σωλήνες, κόμβος USB, διόδους και πολλά άλλα.
  10. Πλατφόρμα για το γούστο σας, επέλεξα το DD1-1

Συναρμολόγηση του τέρας μας
Ρύθμιση του δρομολογητή MR3020.
Πρώτα απ 'όλα, ας ξεκινήσουμε με το δρομολογητή. Σκέφτηκα για μεγάλο χρονικό διάστημα να επιλέξω ή-wrt ή cyberwrt. Ή-WRT Flexs στις ρυθμίσεις, αλλά όλες οι επεξεργασίες και η πραγματοποίηση των ρυθμίσεών σας πραγματοποιούνται μέσω του τερματικού με τη βοήθεια του προγράμματος Putty. Και αφού φοβόμουν να δουλέψω σε αυτές τις μητέρες μέσα από το τερματικό σταθμό, επέλεξα όπου υπάρχει γραφική διασύνδεση είναι η Cyberwrt, συν αυτό είναι δυνατό να συνδεθείτε μέσω της θύρας USB.
Για να αλλάξετε το υλικολογισμικό του δρομολογητή μας, πρέπει να κατεβάσετε το firmware Cyberwrt MR3020.

Όπως κατεβάσαμε, κάντε τα εξής:

1) Ενεργοποιήστε το δρομολογητή και περιμένετε τη λήψη.
2) Πηγαίνετε και συνδεθείτε στο 192.168.0.254 (προεπιλεγμένος admin \\ admin)
3) Βρείτε στο μενού στα εργαλεία του αριστερού συστήματος, υπάρχει το σημείο αναβάθμισης του συστήματος και ρίξτε το υλικολογισμικό μέσω της φόρμας Web
4) Περιμένετε να κάνετε επανεκκίνηση (περίπου 4 λεπτά)
Ο δρομολογητής είναι έτοιμος για διαμόρφωση.

Μπορείτε να επιλέξετε μία από τις λειτουργίες: "Σημείο πρόσβασης" και "πελάτης δικτύου Wi-Fi". Για να διαμορφώσετε τη λειτουργία πελάτη:
- Επιλέξτε τη λειτουργία πελάτη δικτύου Wi-Fi
- Η διεύθυνση IP της συσκευής σας (η συσκευή σας θα είναι διαθέσιμη σε αυτή τη διεύθυνση. Προσπαθήστε να επιλέξετε μια ακατοίκητη IP. Για παράδειγμα: 192.168.1.100)
- Μάσκα υποδικτύου (255.255.255.0)
- Πύλη (για παράδειγμα, IP του δρομολογητή ή πύλης στο σπίτι σας - 192.168.1.1)
- Τύπος κρυπτογράφησης (τύπος κρυπτογράφησης που χρησιμοποιείται στο οικιακό σας δίκτυο)
- Κωδικός πρόσβασης (κωδικός πρόσβασης, πρόσβαση στο οικιακό σας δίκτυο)

Εάν κάνατε τα πάντα σωστά, τότε θα πάτε rss string στο κάτω μέρος της οθόνης.

Όταν όλα τα κέρδη, θα έχετε ενότητες τμήματος, εκεί θα βρείτε τη μονάδα "ρομπότ". Εγκαθιστώ. Ετοιμος.

Συνδέστε το L298N, Arduino Nano, MR3020, κάμερα και άλλα

Στην εικόνα, όλα φαίνονται σαφώς, αλλά μόνο σε περίπτωση που θα γράψω.

Arduino Digital 4 - σε Pine Module Pine.
Arduino Digital 5 Έξοδος - σε Pine Module Inst.
Συμπέρασμα Arduino Ψηφιακή 6 - σε μονάδα PIN IN3.
Συμπέρασμα Arduino Digital 7 - σε Pine Module Pine.
Έξοδος Arduino GND - στο τερματικό μονάδας GND.
Μονάδα GND Clem - Μείωση Μπαταρία.
7.2V τερματικό μονάδας μονάδας - συν μπαταρία.
Το Clem Clem είναι ο σωστός κινητήρας.
Μονάδα LM Clem - αριστερός κινητήρας.
USB Λιμάνι Arduino. - Συνδεθείτε στο USB Hub
Web Camera - Συνδεθείτε στο Hub USB
USB HUB - Συνδεθείτε με το δρομολογητή USB

Γεύματα που λένε έτσι την εφοδιαστική, που πραγματοποιούνται από τη δεύτερη μπαταρία. Χωρητικότητα 2000 MA / H 5V, για να μην κάψουμε το δρομολογητή. Ναι, και με δύο μπαταρίες, το ρομπότ λειτουργεί σταθερά. Έτσι, το συνδέουμε απλά στην υποδοχή Micro USB. Μέσω ενός κόμβου USB που συνδέεται με τη διατροφή των ριζών παίρνει ήδη την κάμερα και το Arduux μας.

Σκίτσο για arduino nano
Πρέπει να κατεβάσετε τη βιβλιοθήκη Cyberlib, προορίζεται μόνο για το ATMEGA 328.

/ * Έκδοση 1.5 WiFi Tanka σε DD1-1 Εφαρμοσμένη: 1) Κίνηση κάμερας μέσω x και y 2) Βρεφείς 3) Προβολείς 4) Ήχος όταν είναι ενεργοποιημένη * / #Include // Συνδέστε τη βιβλιοθήκη #include // Συνδέστε τη βιβλιοθήκη Servo MyServo1 Servo Drive. Σέρβο myservo2; Μακρύς προηγούμενος σωλήνας. // ανάγκη για το INT LEDSTEP \u003d 0 χρονοδιακόπτη. // μετρητής για LED int i; #define robot_go (d4_high; d5_hipe;) #define robot_bow, d6_hipe; d5_low; d6_hipe; d7_low; d6_hipe; d5_low; d6_HOW; D5_LOW; D6_HOW; D5_LOW; D6_HOW; D5_LOW; ·) #DEFINE ρομπότ_Rotation_Left (D18_HIP;) #DEFINE LED_OF (D13_HOW;) #DEFINE LED_OFF (D13_LOW;) #DEFINE HEADLAMP_ON (D18_LOW;) #DEFINE HEADLAMP_OF (D8_HAW;) #DEFINE BUZZER (TONE (11 , 494, 500).) #DEFINE Init (D4_OUT, D5_OUT, D6_OUT, D18_OUT; D13_OUT;) Uint8_T Inbyte; (myservo1.attach (9); // Σύνδεση σερβοκινητήρα στη θύρα MyServo2.Tach (10); // Σύνδεση σερβοκινητήρα στη θύρα D11_Out; D11_LOW; // Speaker Headlamp_off; // Φλόγα προεπιλεγμένους προβολείς (Uint8_T I \u003d 0; Ε<12; i++) beep(80, random(100, 2000)); //звуковое оповещение готовности робота init; // Инициализация портов //Buzzer; // Инициализация портов динамика UART_Init(57600);// Инициализация порта для связи с роутером wdt_enable (WDTO_500MS); } void loop() { unsigned long currentMillis = millis(); // Обновление таймера if (LedStep == 0 && currentMillis - previousMillis > 500) (// καθυστέρηση 0,5 δευτερόλεπτα) προηγούμενηMillis \u003d trenionmillis; // Update Led_on; // ενεργοποιήστε το LEDSTEP \u003d 1; // Step Counter) ifstep \u003d\u003d 1 && currentmillis - Προηγούμενηλία\u003e 500) (// καθυστέρηση 0.5 δευτερόλεπτα) \u003d trenionmillis, // Ενημέρωση Timer LED_OFF, // απενεργοποιήστε το LEDSTEP \u003d 2; // Step Counter) ifstep \u003d\u003d 2 && CurrentMillis - PreviOSMillis\u003e 500) (// καθυστέρηση 0,5 δευτερόλεπτα) ledstep \u003d 0; // Step) εάν (Uart_Readbyte (Inbyte)) // Exly κάτι ήρθε (switch (inbyte) // παρακολούθηση ποια εντολή ήρθε (περίπτωση "x": // osontovka robot_stop ρομπότ; break; περίπτωση "w": // μετακίνηση προς τα εμπρός robot_go; break; περίπτωση "D": // Swing προς το αριστερό robot_rotation_left; break; περίπτωση "a": // περιστρέψτε robot_rotation_right; break; περίπτωση "s": // κίνηση πίσω robot_back; break; περίπτωση "u": // servo αυξάνεται myservo1. Γράψτε (i - \u003d 20); break; περίπτωση "j": // servo μειώνεται από myservo1.Write (I + \u003d 20); σπάσιμο; περίπτωση "h": // servo περιστρέφεται αριστερά myservo2. Γράψτε (i + \u003d 20); Διακοπή; Περίπτωση "k": // servo περιστρέφεται στα δεξιά myservo2.write (i - \u003d 20). Διακοπή; Περίπτωση "y": // servo περιστρέφεται 85 myservo1.write (85). Myservo2.write (85). Διακοπή; Περίπτωση "F": // ενεργοποιήστε τους προβολείς προβολέων. Διακοπή; Περίπτωση "V": // απενεργοποιήστε τους προβολείς του κεφαλιού_off. Διακοπή; Περίπτωση "I": // Buzzer Hodk; Διακοπή; )) WDT_RESET (); )

Κάνοντας αλλαγές στο δρομολογητή
Για να ελέγξετε τις κάμερες, έγιναν αλλαγές στη βιβλιοθήκη δρομολογητή. Θα χρειαστεί να κατεβάσετε τον αλλαγμένο κώδικα και να αντικαταστήσετε τα αρχεία προέλευσης σε αυτά.

Το Channel Vetal Channel έδειξε πώς να κάνει μια γραφομηχανή στον έλεγχο από σχεδόν οποιοδήποτε Android smartphone. Ταυτόχρονα, δεν θα χρησιμοποιήσουμε το "Arduino", πάρτε ένα μικροελεγκτή από τον κινέζικο κατασκευαστή "Esspandive" "ESP 8266", το πράγμα είναι το "Arduino" Plus Wi-Fi Module.
Όλα τα ραδιοφωνικά εξαρτήματα και οι μονάδες σε αυτό το κινεζικό κατάστημα.

Θυμηθείτε "Arduino Uno", είναι μεγάλο, και εδώ είναι ένα μικρό πράγμα, στο οποίο υπάρχει Wi-Fi, οι δυνατότητες του "Arduino". Σε αυτόν τον μικροελεγκτή, οι Κινέζοι έχουν αναπτύξει μια τέτοια ασπίδα. Είναι βολικό: μπορείτε να συνδέσετε 2 κινητήρες ή ακόμα και 4, ενώ μπορείτε να χρησιμοποιήσετε 11 συμπεράσματα. Θα πάρουμε επίσης 2 κινητήρες, 2 τυποποιημένους τροχούς "Arduino".

Όταν εισάγετε το "Arduino" στο "AliExpress" στην αναζήτηση, όχι μόνο τα τέλη ανοιχτά, αλλά, τα συνακόλουθη αγαθά. Ενδιαφέροντα στοιχεία, πρέπει να βρείτε κάτι ενδιαφέρον, δοκιμάστε.

Πάρτε 2 μπαταρίες 18650 στην εξουσία, είναι εγκιβωτίζοντας για 2 ACB, θα πάρουμε επίσης 2 γωνίες, οι διαστάσεις περίπου 5 ίντσες, δεν είναι τόσο σημαντικό, καθώς και ένα μείον μισό ένα κάνει, ίντσες. Το γεγονός είναι ότι ο σχεδιασμός μπορεί να είναι δικός σας, αλλά τα πνευματικά δικαιώματα είναι επιτυχημένα στο βίντεο είναι απλή.

Παίρνουμε 2 γωνίες, με τη βοήθεια των βιδών, πρέπει να συνδεθούν, έτσι ώστε η ασπίδα να μπορεί να ταιριάζει ασφαλώς. Τρυπήστε, η διάμετρος του οποίου είναι 3 mm, κάνει 4 τρύπες. Παίρνουμε μικροσκοπικές βίδες, σφιγκτήρα, συνδέστε αυτόν τον σχεδιασμό. Τέτοια αιθάλη λαμβάνεται, αντοχή Αυτή η ένωση Για μια τέτοια γραφομηχανή, όπως κάνουμε, αφθονούν.

Στο πλάι του δέντρου βίντεο τρυπά μια οπή με διάμετρο 8 mm, λαμβάνεται ένας σχεδιασμός, αλλά είναι απαραίτητο να κάνετε ακόμα 3 τρύπες με διάμετρο 3 mm: ένα για αυτή την προεξοχή, για αυτές τις οπές των συνδετήρων 2 περισσότερο.

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

Δεν αλλάζουμε τίποτα, εκτός από εδώ, όπου το Tick είναι, επιλέξτε τη διεύθυνση στο αρχείο που θα ρίξουμε, στη συνέχεια, επιλέξτε την επιθυμητή θύρα COM, πατήστε το κουμπί Έναρξη. Επίσης, κάτω από το βίντεο υπάρχει ένας σύνδεσμος προς το πρόγραμμα που θέλετε να εγκαταστήσετε στο αγαπημένο σας Android.

Εξασφάλισε αυτή την αμοιβή, εισάγετε ένα μικροελεγκτή. Συνδέουμε τα καλώδια από τους κινητήρες, κοιτάζουμε αν ο πυθμένας θα είναι "a-", τότε από αυτή την πλευρά "b-" θα είναι η κορυφή. Ήρθε η ώρα να επισυνάψετε τους τροχούς. Έγινε εύκολα, καθώς οι τροχοί των κινητήρων είναι ένα κιτ. Σε αυτό το μέρος, τρυπήστε μια τρύπα με διάμετρο 4 mm, τοποθετήστε τη βίδα. Κάνουμε μια τόσο απλή λειτουργία, ρυθμίζουμε το ύψος, ακόμη και κάτω από εσάς, κάτι που αποδείχθηκε ότι είναι μια βίδα που έσκυψε έντονα. Είναι υπερβολικό. Αποδεικνύεται ότι η συσκευή είναι ακριβότερη σε μια δεκάρα που, γενικά, δεν χρειάζεται, με κάποιο τρόπο μοιάζει με ένα Κορυτό.

Ας δούμε λοιπόν πώς λαμβάνεται η συσκευή, η οποία θα ελέγχεται από το Android σε απόσταση μέσω WiFi. Φυσικά, ένα καλύτερο πράγμα. Διαμέρισμα μπαταριών Επισυνάψτε τη θερμοκάθεια, λαμβάνεται το μηχάνημα.

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


Πρόγραμμα και Skatch http://bbs.smartarduino.com/showthread.php?tid\u003d2013
Αίτηση διαχείρισης https://play.google.com/store/apps/details?id\u003dcom.doit.carset

Συνεχίζοντας το θέμα:
Λειτουργός

Έχω μια υπηρεσία Web που εγγράφηκα μέσω "Προσθέστε έναν σύνδεσμο στην υπηρεσία" για την οποία απαιτείται https και πιστοποιητικό. Παρακάτω είναι ο κώδικας μου για τη δημιουργία μιας στιγμής ...

Νέα άρθρα
/
Δημοφιλής