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

Χρήση των 4 ακίδων του ESP8266-01: 3 βήματα
Χρήση των 4 ακίδων του ESP8266-01: 3 βήματα

Βίντεο: Χρήση των 4 ακίδων του ESP8266-01: 3 βήματα

Βίντεο: Χρήση των 4 ακίδων του ESP8266-01: 3 βήματα
Βίντεο: P2 ESP01 4CH Relay Module (Subtittled) 2024, Νοέμβριος
Anonim
Χρήση των 4 ακίδων του ESP8266-01
Χρήση των 4 ακίδων του ESP8266-01
Χρήση των 4 ακίδων του ESP8266-01
Χρήση των 4 ακίδων του ESP8266-01
Χρήση των 4 ακίδων του ESP8266-01
Χρήση των 4 ακίδων του ESP8266-01

Σημείωση: Αυτό το έργο είναι βασικά μια επέκταση ενός προγενέστερου οδηγού που χρησιμοποιούσε μόνο 2 ακίδες. Ο περιορισμένος αριθμός (4) καρφιτσών GPIO στο ESP8266-01 μπορεί να φαίνεται εμπόδιο, για οποιαδήποτε σοβαρή εφαρμογή. Ωστόσο, αν κάποιος χρησιμοποιεί τις καρφίτσες με έναν έξυπνο τρόπο είναι πολύ πιθανό να κάνουμε πολλά μόνο με αυτές τις 4 καρφίτσες. Σε μερικές από τις πρόσφατες οδηγίες μου, έδειξα τη χρήση ενός DHT11 ενός DS18B20, ενός OLED, ενός RTC και ενός BMP180 με το ESP8266-01. Σε αυτό το διδακτικό ξεκίνησα να χρησιμοποιώ 4 αισθητήρες και μια οθόνη, ενώ ανεβάζω επίσης τα αποκτηθέντα δεδομένα στο Thingspeak. Στην πραγματικότητα επεκτείνεται σε ένα έργο παρακολούθησης της ατμόσφαιρας μέσα και γύρω από το κοτέτσι μου. Ναι, θα μπορούσατε να το αποκαλέσετε αυτό ως ανεμιστήρας καιρού, αλλά είναι απλώς για να απεικονίσετε τη χρήση των 4 ακίδων, θα μπορούσατε εύκολα να κάνετε κάτι άλλο με αυτόν τον τρόπο Θα χρησιμοποιήσω 2 ακίδες για I2C (BMP180 και OLED) 1 ακίδα για 2 αισθητήρες DS18B20 μέσω του Αν και το ESP8266-01 έχει πλέον χρησιμοποιήσει όλους τους πείρους, μπορώ να προσθέσω περισσότερους αισθητήρες (ή ενεργοποιητές) μέσω του πρωτοκόλλου OneWire ή/και μέσω του πρωτοκόλλου I2C. Λοιπόν, τι χρειαζόμαστε: BOM

  • ESP8266-01
  • 2x DS18B20
  • 1x DHT11
  • 1x BMP180
  • OLED (προαιρετικό)

και φυσικά ένα breadboard, ένα τροφοδοτικό 3,3 V και μερικά καλώδια breadboard και έναν λογαριασμό Thingspeak

Μερικές μόνο παρατηρήσεις σχετικά με το BOM:

  • Προφανώς το έργο αφορά τη χρήση των περιορισμένων ακίδων του ESP8266-01, αλλά αν εξακολουθείτε να χρειάζεται να αγοράσετε ένα, θα μπορούσατε να εξετάσετε ένα ESP8266-12 που έχει περισσότερες καρφίτσες
  • Φθηνός αισθητήρας υγρασίας και θερμοκρασίας DHT11A για όλες τις χρήσεις. Δεν είναι εξαιρετικά ακριβές αλλά θα το κάνει. Εάν εξακολουθείτε να χρειάζεται να αγοράσετε ένα, μπορείτε να επιλέξετε το DHT22 που υποτίθεται ότι είναι πιο ακριβές, αλλά μπορείτε επίσης να επιλέξετε το AMS2321. Αυτό είναι ένα είδος DHT22 που είναι κατάλληλο για I2C, απελευθερώνοντας έτσι έναν άλλο πείρο
  • Το BMP180μετρά τη θερμοκρασία και την πίεση αέρα. Είναι ο διάδοχος του BMP085, αλλά τώρα έχει επίσης και κάποιους suverssors. Υπάρχει το (φθηνότερο) BMP280, αλλά θα μπορούσατε επίσης να επιλέξετε το BME280 που μετρά τη θερμοκρασία, τον αέρα και την υγρασία. Με αυτόν τον τρόπο μπορείτε να εξοικονομήσετε χρήματα στον αισθητήρα DHT/AMS
  • Το OLEDI το χρησιμοποίησε έτσι ώστε να μπορώ γρήγορα να δω αν οι αισθητήρες έχουν διαβαστεί, αλλά μπορείτε επίσης να το ελέγξετε στο Thingspeak. Το OLED είναι πολύ μικρό έτσι κι αλλιώς για να εκτυπώσει όλες τις τιμές ανάγνωσης

Βήμα 1: Το κύκλωμα

Το Κύκλωμα
Το Κύκλωμα

Οι 4 ακίδες του ESP8266 δεν υποδεικνύονται ως τέτοιες στο PCB και οι περισσότερες εικόνες αναφέρουν σαφώς μόνο GPIO0 και GPIO2. Ωστόσο, το ESP826-01 διαθέτει aa GPIO1 pin (το pin Tx) και έναν GPIO3 pin (τον Rx pin).i θα χρησιμοποιήσει αυτές τις ακίδες ως εξής

  • GPIO0 -> καρφίτσα SDA της θύρας I2C
  • GPIO1 -> DHT11
  • GPIO2-> SCL pin της θύρας I2C
  • GPIO3-> OneWire Bus

Καθώς οι μονάδες I2C μου έχουν ήδη αντιστάσεις έλξης, δεν θα προσθέσω εκεί αντιστάσεις έλξης I2C. Το DS18B20 χρειάζεται ακόμα αντίσταση έλξης για το οποίο χρησιμοποίησα ένα 4k7, αλλά δεν είναι πραγματικά τόσο κρίσιμο, ένα 10k είναι επίσης καλό. Το DHT11 υποτίθεται ότι χρειάζεται επίσης αντίσταση έλξης, αλλά το βρήκα να λειτουργεί και χωρίς αυτό. η προσθήκη αντίστασης 4k7 δεν άλλαξε καμία από τις ενδείξεις, οπότε το άφησα εκτός. Πολλές από τις μονάδες 3 ακίδων DHT11, έχουν ήδη κολλήσει 10 k στη μονάδα. Μόλις κατάλαβα ότι δεν σχεδίασα τις συνδέσεις για το OLED. Αυτό οφείλεται στο γεγονός ότι το συνέδεσα μόνο για έναν γρήγορο έλεγχο, αλλά αν θέλετε να το προσθέσετε, είναι απλώς θέμα σύνδεσης του SDA με το SDA και του SCL με το SCL… και φυσικά τις καρφίτσες του εδάφους και του Vcc με τους ομολόγους τους

Βήμα 2: Το πρόγραμμα

Το πρόγραμμα είναι αρκετά απλό. Πρώτα ρυθμίζει τις βιβλιοθήκες και τους αισθητήρες. Συνδέει το DHT11 στο pin 1 (Tx) και το δίαυλο OnWire για το DS18B20 στο pin 3 (Rx). Για να χρησιμοποιήσετε περισσότερους από 1 αισθητήρες DS18B20 στο δίαυλο OneWire, πρέπει να γνωρίζετε τη «μοναδική διεύθυνση» του. Εάν δεν το έχετε, τότε χρειάζεστε ένα πρόγραμμα για να διαβάσετε αυτές τις διευθύνσεις. Κάντε το με arduino για ευκολία. Στο πρόγραμμα πρέπει ακόμα να δώσετε τα διαπιστευτήριά σας WiFi καθώς και το API εγγραφής για το Thingspeak Channel σας

/*

Πεδίο 1 temp roost (DHT11) Πεδίο 2 Roost υγρασίας (DHT11) πεδίο 3 Temperature coop (DS18B20) πεδίο 4 θερμοκρασία εδάφους (DS18B20) πεδίο 5 Airpressure (bmp180) πεδίο 6 Εξωτερική θερμοκρασία (bmp180) * */ #include #include // https://www.pjrc.com/teensy/td_libs_OneWire.html #include // https://milesburton.com/Main_Page?title=Dallas_Tem… #include #include #include #include "SSD1306.h" SSD1306 0 (0x3c, 0, 2)? #define DHTPIN 1 // GPIO1 (Tx) #define DHTTYPE DHT11 #define ONE_WIRE_BUS 3 // GPIO3 = Rx const char* ssid = "YourSSID"; const char* password = "YourPassword"; const char* host = "api.thingspeak.com"; const char* writeAPIKey = "W367812985"; // χρησιμοποιήστε το δικό σας writeApi // DHT11 stuff float temperature_buiten? float temperature_buiten2; DHT dht (DHTPIN, DHTTYPE, 15); // DS18b20 πράγματα OneWire oneWire (ONE_WIRE_BUS); // παράδειγμα OneWire για επικοινωνία με οποιεσδήποτε συσκευές OneWire αισθητήρες DallasTemperature (& oneWire); // Διαβιβάστε τη διεύθυνση της παρουσίας μας στο OneWire στη θερμοκρασία του Ντάλας. DeviceAddress Probe01 = {0x28, 0x0F, 0x2A, 0x28, 0x00, 0x00, 0x80, 0x9F}; DeviceAddress Probe02 = {0x28, 0x10, 0xA4, 0x57, 0x04, 0x00, 0x00, 0xA9}; // bmp180 πράγματα Adafruit_BMP085 bmp; void setup () {// I2C stuff Wire.pins (0, 2); Wire.begin (0, 2); // Αρχικοποίηση αισθητήρων // dht 11 πράγματα dht.begin (); // ds18b20 stuff sensors.begin (); // ds18b20 // ορίστε την ανάλυση στα 10 bit (Μπορεί να είναι 9 έως 12 bits.. το χαμηλότερο είναι ταχύτερο) sensors.setResolution (Probe01, 10); sensors.setResolution (Probe02, 10); // bmp180 πράγματα αν (! bmp.begin ()) {// Serial.println ("No BMP180 /BMP085"); // while (1) {}} // OLED stuff display.init (); display.flipScreenVertically (); display.setFont (ArialMT_Plain_10); καθυστέρηση (1000)? // Σύνδεση σε δίκτυο WiFi WiFi.begin (ssid, κωδικός πρόσβασης); while (WiFi.status ()! = WL_CONNECTED) {καθυστέρηση (500); }} void loop () {// ds18b20stuff ------------------- sensors.requestTemperatures (); // Στείλτε την εντολή για να λάβετε θερμοκρασίες temperature_buiten = sensors.getTempC (Probe01); // temperature_buiten2 = sensors.getTempC (Probe02); // // dht11 stuff ---------------- ---- υγρασία επίπλευσης = dht.readHumidity (); θερμοκρασία πλωτήρα = dht.readTemperature (); εάν (ισνάνη (υγρασία) || ισνάνη (θερμοκρασία)) {επιστροφή? } // πράγματα bmp ------------------------- String t = String (bmp.readTemperature ()); String p = String (bmp.readPressure ()); // OLED πράγματα -------------------------- display.clear (); display.drawString (0, 10, p); // bmp display display.drawString (0, 24, String (temperature_buiten)); // ds18b20 display.drawString (0, 38, String (υγρασία)); // οθόνη dht11.απεικόνιση(); // πραγματοποιήστε συνδέσεις TCP πελάτη WiFiClient. const int httpPort = 80; if (! client.connect (host, httpPort)) {return? } String url = "/update? Key ="; url += writeAPIKey; url += "& field1 ="; url += String (θερμοκρασία); // roost (DHT1) url += "& field2 ="; url += String (υγρασία); // roost (DHT11) url += "& field3 ="; url += String (temperature_buiten); // θερμοκρασία coop (DS18B20 nr 1) url += "& field4 ="; url += String (temperature_buiten2); // θερμοκρασία εδάφους (DS18B29 nr 2) url += "& field5 ="; url += String (bmp.readTemperature ()); Εξωτερική θερμοκρασία (BMP180) url += "& field6 ="; url += String (bmp.readPressure ()); // Airpressure (BMP180) url += "\ r / n"; // Αποστολή αιτήματος στο διακομιστή client.print (String ("GET") + url + "HTTP/1.1 / r / n" + "Host:" + host + "\ r / n" + "Connection: close / r / n / r / n "); καθυστέρηση (1000)? }

……..

Βήμα 3: Περισσότερα

Προς το παρόν αυτό το πρόγραμμα παρακολουθεί μόνο, αλλά τι είναι αυτό που σας εμποδίζει να προσθέσετε έναν αισθητήρα φωτός BH1750 I2C για να μετρήσετε εάν είναι βράδυ ή πρωί ή RTC για να γνωρίζετε την ώρα της ημέρας και να ανοίγετε και να κλείνετε αυτόματα την πόρτα του κοτέτσι με τη βοήθεια μια κάρτα επέκτασης PCF8574 I2C I/O, ή όπως είναι ήδη στον κήπο, προσθέστε έναν μετατροπέα PCF8591 ή ADS1115 AD για να μετρήσετε την υγρασία του εδάφους και να ενεργοποιήσετε μια αντλία όταν είναι απαραίτητο. Or ίσως να ενεργοποιήσετε το θερμοσίφωνα λεκάνης νερού όταν η θερμοκρασία πέσει κάτω από το μηδέν εάν υπάρχει ένα τσιπ I2 C για αυτό, το ESP8266 πιθανότατα μπορεί να το χρησιμοποιήσει.

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

pinMode (1, FUNCTION_3);

pinMode (3, FUNCTION_3);

Συνιστάται: