Πίνακας περιεχομένων:

WiFi LED Strip + Αισθητήρας θερμοκρασίας με ESP8266: 6 βήματα
WiFi LED Strip + Αισθητήρας θερμοκρασίας με ESP8266: 6 βήματα

Βίντεο: WiFi LED Strip + Αισθητήρας θερμοκρασίας με ESP8266: 6 βήματα

Βίντεο: WiFi LED Strip + Αισθητήρας θερμοκρασίας με ESP8266: 6 βήματα
Βίντεο: F&Home Radio #7, czujnik ruchu z sondą temperatury rH-P1T1 2024, Ιούλιος
Anonim
WiFi LED Strip + Αισθητήρας θερμοκρασίας με ESP8266
WiFi LED Strip + Αισθητήρας θερμοκρασίας με ESP8266

Αυτό το σεμινάριο περιγράφει τα βήματα για να ρυθμίσετε ένα ESP8266 και να το μιλήσετε τόσο σε αισθητήρα θερμοκρασίας όσο και σε λωρίδα LED, ενώ μπορείτε επίσης να λαμβάνετε είσοδο και να στέλνετε έξοδο με MQTT μέσω WiFi. Το έργο έγινε για μια πορεία που πραγματοποιήθηκε στο Cal Poly San Luis Obispo το Φθινόπωρο 2016- CPE 439: Ενσωματωμένα συστήματα σε πραγματικό χρόνο. Ο γενικός στόχος ήταν να καταδειχθεί η ευκολία δημιουργίας ενός «αντικειμένου» συνδεδεμένου στο Διαδίκτυο με φθηνό υλικό.

Προμήθειες/Απαιτούμενος εξοπλισμός:

  • NodeMCU ESP8266 dev board
  • Λωρίδα LED WS2812B
  • MAX31820 Αισθητήρας θερμοκρασίας
  • Breadboard
  • Αντίσταση 4,7K ohm
  • Αντίσταση 220 ohm
  • καλώδια βραχυκυκλωτήρων
  • καλώδιο micro-usb
  • PC (ή VM) που εκτελεί linux (π.χ. Ubuntu)

Υποθέσεις/Προϋποθέσεις:

  • εμπειρία στη χρήση εργαλείων γραμμής εντολών και εγκατάσταση πακέτων σε διανομή που βασίζεται σε debian
  • βασική κατανόηση της σύνταξης Makefile
  • καλώδια σύνδεσης

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

Για να φτιάξετε το έργο, θα χρειαστεί να εγκαταστήσετε το esp-open-sdk στο μηχάνημά σας. Ακολουθήστε τον σύνδεσμο και διαβάστε τις οδηγίες κατασκευής. Εν ολίγοις, θα κάνετε κάποιες εντολές sudo apt-get για να εγκαταστήσετε εξαρτήσεις, έναν κλώνο git-αναδρομικό για κλωνοποίηση/λήψη esp-open-sdk και τέλος μια εντολή make για την κατασκευή esp-open-sdk.

Κοίτα με

Βήμα 2: Λήψη πηγαίου κώδικα, διαμόρφωση και δημιουργία

Τώρα που έχει δημιουργηθεί το esp-open-sdk, κλωνοποιήστε το αποθετήριο έργου.

git clone

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

cd esp-rtos-tests

mkdir -p.τοπικές ρυθμίσεις cp.example.mk.local/settings.mk

Τώρα ανοίξτε.local/settings.mk με οποιονδήποτε επεξεργαστή κειμένου και αλλάξτε τις ακόλουθες ρυθμίσεις:

  • OPENSDK_ROOT: Η απόλυτη διαδρομή για τη θέση του esp-open-sdk που δημιουργήσατε στο βήμα 1
  • WIFI_SSID: Το SSID του δικτύου WiFi σας
  • WIFI_PASS: Ο κωδικός πρόσβασης του δικτύου WiFi σας
  • PIXEL_COUNT: Ο αριθμός των εικονοστοιχείων στη λωρίδα LED WS2812B

Σημείωση: Δεδομένου ότι αυτό το έργο χρησιμοποιεί SPI για την οδήγηση των LED και χρησιμοποιεί το NodeMCU 3.3v για την παροχή τους, πιθανότατα δεν θα μπορείτε να οδηγήσετε περισσότερα από ~ 60 LED.

Σημείωση: Οι άλλες ρυθμίσεις δεν χρειάζεται να αλλάξουν, αλλά μπορούν να αλλάξουν αν το επιθυμείτε. Συνιστάται να τηρείτε τη σειρά των προτεραιοτήτων εργασίας. Όσο χαμηλότερος είναι ο αριθμός προτεραιότητας, τόσο χαμηλότερη είναι η προτεραιότητα της εργασίας.

Τώρα φτιάξτε το έργο:

make -C παραδείγματα/cpe439

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

Δημιουργήθηκε επιτυχώς το "firmware/cpe439.bin"

Κοίτα με

Βήμα 3: Συνδέστε εξαρτήματα υλικού

Συνδέστε εξαρτήματα υλικού
Συνδέστε εξαρτήματα υλικού

Τώρα που ο κώδικας έχει καταρτιστεί, ήρθε η ώρα να συνδέσουμε τα περιφερειακά μας.

Πρώτα, κολλήστε το NodeMCU στο breadboard και, στη συνέχεια, χρησιμοποιήστε καλώδια jumper για να κάνετε τις συνδέσεις όπως φαίνεται στο διάγραμμα.

Δυο πράγματα που πρέπει να γνωρίζετε:

  1. Σημαντικό: Η γραμμή δεδομένων WS2812B δεν είναι αμφίδρομη. Αν κοιτάξετε προσεκτικά τα σημάδια στην πλευρά LED της λωρίδας, θα δείτε μικρά βέλη που δείχνουν προς μία κατεύθυνση. Η έξοδος από το D7 του NodeMCU πρέπει να κατευθύνεται προς το WS2812B με τον ίδιο τρόπο όπως ο δείκτης κατεύθυνσης, τον οποίο μπορείτε να δείτε στο διάγραμμα αν κοιτάξετε προσεκτικά.
  2. Ανάλογα με το είδος των συνδετήρων που διαθέτει το WS2812B, μπορεί να χρειαστεί να κάνετε κάποιες τροποποιήσεις για να συνδεθείτε με ασφάλεια στο breadboard. Μπορείτε επίσης να χρησιμοποιήσετε κλιπ αλιγάτορα για να τα συνδέσετε σε καλώδια με βραχυκυκλωτήρα με δυνατότητα ψωμιού.
  3. Οι καρφίτσες MAX31820 έχουν μικρότερο βήμα και είναι λεπτότερες από τους τυπικούς βραχυκυκλωτήρες 0,1 "/2,54 mm, καθιστώντας τους δύσκολο να συνδεθούν. Ένας τρόπος για να το χρησιμοποιήσετε είναι να χρησιμοποιήσετε σύρματα από jumper-to-jumper, να αφαιρέσετε την πλαστική θήκη από τη γυναικεία πλευρά, στη συνέχεια, χρησιμοποιήστε μερικές πένσες για να σφίξετε τις άκρες των γυναικών με βραχυκυκλωτήρα σφιχτά γύρω από τις μικρότερες καρφίτσες MAX31820.

Ελέγξτε ξανά τις συνδέσεις πριν ενεργοποιήσετε το NodeMCU για να μην καταστρέψετε τα εξαρτήματα.

Βήμα 4: Flash και Εκτέλεση

Αναβοσβήνει

Με όλο το συνδεδεμένο υλικό, συνδέστε το NodeMCU και αναβοσβήνετε με την ακόλουθη εντολή:

κάντε φλας -C παραδείγματα/cpe439 ESPPORT =/dev/ttyUSB0

Το/dev/ttyUSB0 είναι το σειριακό com στο οποίο πρέπει να εμφανιστεί το NodeMCU. Εάν έχετε συνδέσει άλλες σειριακές συσκευές, μπορεί να εμφανιστεί ως /dev /ttyUSB1 ή κάποιος άλλος αριθμός. Για να ελέγξετε, μπορείτε να εκτελέσετε αυτήν την εντολή δύο φορές, μία με το NodeMCU αποσυνδεδεμένο και μία φορά με αυτήν συνδεδεμένο και να συγκρίνετε τη διαφορά:

ls /dev /ttyUSB*

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

  1. Προσθέστε τον χρήστη σας στην ομάδα dialout:

    sudo adduser dialout $ (whoami)

  2. chmod ή chown τη συσκευή:

sudo chmod 666 /dev /ttyUSB0 sudo chown $ (whoami): $ (whoami) /dev /ttyUSB0Η πρώτη μέθοδος προτιμάται καθώς είναι μόνιμη λύση.

Τρέξιμο

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

python3 -m serial.tools.miniterm --eol CRLF --exit -char 003 /dev /ttyUSB0 500000 --raw -q

Για να εξοικονομήσετε χρόνο, μπορείτε να το προσθέσετε στο αρχείο ~/.bashrc:

ψευδώνυμο nodemcu = "python3 -m serial.tools.miniterm --eol CRLF --exit -char 003 /dev /ttyUSB0 500000 --raw -q"

..που σας επιτρέπει απλά να πληκτρολογήσετε "nodemcu" ως ψευδώνυμο για αυτήν την εντολή.

Εάν όλα έχουν ρυθμιστεί σωστά, η λωρίδα LED σας θα ανάψει πράσινη και στο σειριακό θα δείτε τη σύνδεση WiFi, τη λήψη μιας διεύθυνσης IP, τη σύνδεση στο MQTT και τα μηνύματα που εξάγουν δεδομένα θερμοκρασίας.

συνδεδεμένο με το MyWiFiSSID, έναρξη προγράμματος -πελάτη καναλιού 1dhcp… wifi_task: status = 1wifi_task: status = 1ip: 192.168.2.23, mask: 255.255.255.0, gw: 192.168.2.1ws2812_spi_init okRequest temp OKwifi_tasktkue_tkue: (Επανασύνδεση) με τον διακομιστή MQTT test.mosquitto.org… xQueueReceive +25,50xQueueSend ok doneΣτείλτε MQTT σύνδεση… MQTTv311donexQueueReceive +25,56 xQueueSend ok

Βήμα 5: Αλληλεπίδραση

Αν υποθέσουμε ότι η συσκευή σας έχει συνδεθεί με WiFi και ο μεσίτης MQTT με επιτυχία, θα μπορείτε να στέλνετε και να λαμβάνετε δεδομένα από το NodeMCU με MQTT. Εάν δεν το έχετε κάνει ήδη, εγκαταστήστε το πακέτο mosquitto clients:

sudo apt-get install mosquitto-clients

Θα πρέπει τώρα να μπορείτε να χρησιμοποιείτε τα προγράμματα mosquitto_pub και mosquitto_sub από το κέλυφος σας.

Λήψη ενημερώσεων θερμοκρασίας

Για να λάβουμε δεδομένα θερμοκρασίας, θα θέλουμε να χρησιμοποιήσουμε την εντολή mosquitto_sub για να εγγραφούμε στο θέμα στο οποίο δημοσιεύει το NodeMCU.

mosquitto_sub -h test.mosquitto.org -t /cpe439 /temp

Θα πρέπει να δείτε δεδομένα θερμοκρασίας (σε Κελσίου), που φτάνουν στο τερματικό.

+25.87+25.93+25.68…

Ρύθμιση του χρώματος της λωρίδας LED από απόσταση

Μια απλή μορφή μηνύματος χρησιμοποιείται για την αποστολή τιμών RGB στο NodeMCU μέσω MQTT. Η μορφή της εντολής μοιάζει με αυτήν:

r: RRRg: GGGb: BBB ~

Όπου τα RRR, GGG, BBB αντιστοιχούν σε τιμές RGB (0-255) του χρώματος που θέλετε να στείλετε. Για να στείλουμε την εντολή μας, θα χρησιμοποιήσουμε την εντολή mosquitto_pub. Ορίστε μερικά παραδείγματα:

mosquitto_pub -h test.mosquitto.org -t /cpe439 /rgb -m 'r: 255g: 0b: 0 ~' # redmosquitto_pub -h test.mosquitto.org -t /cpe439 /rgb -m 'r: 0g: 255b: 0 ~ ' # greenmosquitto_pub -h test.mosquitto.org -t /cpe439 /rgb -m' r: 0g: 0b: 255 # ' # μπλε

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

Πρόσεχε

Τα θέματα σε αυτό το έργο έχουν οριστεί σε /cpe439 /rgb και /cpe439 /temp σε δημόσιο μεσίτη MQTT, πράγμα που σημαίνει ότι δεν υπάρχει τίποτα που να εμποδίζει κάποιον άλλο να δημοσιεύσει ή να εγγραφεί στα ίδια θέματα με εσάς. Για να δοκιμάσετε πράγματα, η χρήση ενός δημόσιου μεσίτη είναι καλή, αλλά για πιο σοβαρά έργα θα θέλετε να συνδεθείτε σε έναν μεσίτη με προστασία κωδικού πρόσβασης ή να εκτελέσετε τον δικό σας μεσίτη σε διακομιστή.

Βήμα 6: Λεπτομέρειες εφαρμογής

Onewire

Το ESP8266 έχει μόνο 1 πυρήνα, οπότε οι εργασίες αποκλεισμού, όπως η αναμονή 750ms για τον αισθητήρα θερμοκρασίας για να εκτελέσει μια μέτρηση θερμοκρασίας θα είχε ως αποτέλεσμα το WiFi να μην λειτουργεί καλά, και ίσως ακόμη και μια συντριβή. Στο παράδειγμα του FreeRTOS, καλείτε το vTaskDelay () για να χειριστεί αυτές τις μεγάλες αναμονές, αλλά υπάρχουν επίσης πολλές μικρότερες αναμονές που απαιτούνται μεταξύ ανάγνωσης και εγγραφής που είναι μικρότερες από το τσιμπούρι του συστήματος FreeRTOS και επομένως δεν μπορούν να αποφευχθούν με το vTaskDelay (). Για να τα ξεπεράσετε αυτά, ο οδηγός onewire σε αυτό το έργο γράφτηκε για να τελειώσει από ένα μηχάνημα κατάστασης που οδηγείται από το χρονόμετρο υλικού του ESP8266, το οποίο μπορεί να ενεργοποιήσει γεγονότα τόσο χαμηλά όσο κάθε 10 μικρο δευτερόλεπτα, το οποίο συμβαίνει να είναι το συντομότερο Απαιτείται χρόνος μεταξύ των διαδικασιών ανάγνωσης/εγγραφής. Οι περισσότερες άλλες εφαρμογές χρησιμοποιούν μια κλήση αποκλεισμού για να καθυστερήσουν το_us () ή παρόμοιο για να το χειριστούν, αλλά αν λαμβάνετε συνεχώς ενημερώσεις θερμοκρασίας, όλες αυτές οι καθυστερήσεις αρχίζουν να αθροίζονται, με αποτέλεσμα μια λιγότερο αποκριτική εφαρμογή. Η πηγή για αυτό το τμήμα κώδικα βρίσκεται στο φάκελο extras/onewire.

WS2812B

Το ESP8266 δεν διαθέτει τυπικές επιλογές υλικού για PWM αρκετά γρήγορα ώστε να οδηγεί λωρίδες LED στα 800KHz. Για να το ξεπεράσετε, αυτό το έργο χρησιμοποιεί τον πείρο SPI MOSI για να οδηγήσει τα LED. Ρυθμίζοντας την ταχύτητα ρολογιού του SPI και αλλάζοντας το ωφέλιμο φορτίο SPI, μπορείτε να επιτύχετε αρκετά αξιόπιστο έλεγχο κάθε μεμονωμένης λυχνίας LED. Αυτή η μέθοδος δεν είναι χωρίς ατέλειες- για ένα, τα LED θα πρέπει να τροφοδοτούνται με πηγή 5V και θα πρέπει να προστεθεί ένας επιλογέας στάθμης στην έξοδο του πείρου SPI. Αλλά το 3.3V λειτουργεί. Δεύτερον, υπάρχουν δυσλειτουργίες που συμβαίνουν λόγω ατελούς χρονισμού χρησιμοποιώντας τη μέθοδο SPI. Και τρίτον, τώρα δεν μπορείτε να χρησιμοποιήσετε το SPI για οτιδήποτε άλλο. Πρόσθετο υπόβαθρο για αυτήν τη μέθοδο μπορείτε να βρείτε εδώ και η πηγή για αυτό το τμήμα κώδικα βρίσκεται στο φάκελο extras/ws2812.

Μια πιο αξιόπιστη μέθοδος για την οδήγηση λωρίδων LED είναι η χρήση i2s. Ωστόσο, αυτή η μέθοδος έχει πολλές επιθέσεις για συγκεκριμένα τσιπ, οπότε το SPI φάνηκε να είναι μια καλύτερη επιλογή ως μαθησιακή άσκηση.

Συνιστάται: