Mündəricat:

ESP8266-01: 3 addımlarının 4 pinindən istifadə
ESP8266-01: 3 addımlarının 4 pinindən istifadə

Video: ESP8266-01: 3 addımlarının 4 pinindən istifadə

Video: ESP8266-01: 3 addımlarının 4 pinindən istifadə
Video: Как сделать 4-канальное реле Wi-Fi ESP8266 ESP01 | ESP01 Домашняя автоматизация | УдаленныйXY 2024, Iyul
Anonim
ESP8266-01-in 4 pinindən istifadə etməklə
ESP8266-01-in 4 pinindən istifadə etməklə
ESP8266-01-in 4 pinindən istifadə etməklə
ESP8266-01-in 4 pinindən istifadə etməklə
ESP8266-01-in 4 pinindən istifadə etməklə
ESP8266-01-in 4 pinindən istifadə etməklə

Qeyd: Bu layihə, əsasən, yalnız 2 sancaqdan istifadə olunan əvvəlcədən öyrədilənin bir uzantısıdır. ESP8266-01 üzərindəki GPIO pinlərinin məhdud sayı (4) hər hansı bir ciddi tətbiq üçün maneə kimi görünə bilər. Ağıllı bir şəkildə, yalnız bu 4 pinlə çox şey etmək mümkündür. Son təlimatlarımda ESP8266-01 ilə DHT11, DS18B20, OLED, RTC və BMP180 istifadəsini göstərdim. Bu təlimatda 4 sensordan və bir ekrandan istifadə etməyi, eyni zamanda əldə edilmiş məlumatları Thingspeak -a yükləməyi qərara aldım. Əslində toyuq yuvamdakı və ətrafımdakı atmosferi izləmək layihəsini genişləndirir. Bəli, bunu bir hava istasyonu adlandıra bilərsiniz, ancaq 4 sancağın istifadəsini göstərmək üçün başqa yolla başqa bir şey düzəldə bilərsiniz. DHT11 üçün OneWire protokol1 pimi ESP8266-01-də bütün pinləri istifadə olunsa da, OneWire protokolu və/və ya I2C protokolu vasitəsi ilə daha çox sensoru (və ya aktuatoru) əlavə edə bilərəm. Buna görə bizə nə lazımdır: BOM

  • ESP8266-01
  • 2x DS18B20
  • 1 x DHT11
  • 1x BMP180
  • OLED (isteğe bağlı)

və əlbəttə ki, bir çörək taxtası, 3.3 V PSU və bəzi çörək taxtası telləri və Thingspeak hesabı

AMB ilə bağlı bəzi fikirlər:

  • Şübhəsiz ki, layihə məhdud ESP8266-01 pinlərindən istifadə etməkdir, amma yenə də satın almaq lazımdırsa, daha çox sancağı olan bir ESP8266-12 hesab edə bilərsiniz.
  • DHT11A ucuz bütün məqsədli rütubət və temperatur sensoru. Çox dəqiq deyil, amma edəcək. Hələ də satın almalısınızsa, guya daha dəqiq olan DHT22 -ni seçə bilərsiniz, ancaq AMS2321 -i də seçə bilərsiniz. Bu, I2C üçün uyğun olan bir növ DHT22, beləliklə başqa bir pin azad edir
  • BMP180 temperatur və hava təzyiqini ölçür. BMP085 -in varisidir, lakin indi də bəzi superssorsun özü var. BMP280 (daha ucuz) var, ancaq temperaturu, havanı və rütubəti ölçən BME280 -i də seçə bilərsiniz. Bu yolla DHT/AMS sensoruna qənaət edə bilərsiniz
  • OLEDI istifadə etdi, buna görə sensorların oxunub oxunmadığını tez bir zamanda görə bildim, ancaq Thingspeak -də yoxlaya bilərsiniz. Bütün oxunan dəyərləri çap etmək üçün OLED çox kiçikdir

Addım 1: Dövrə

Dövrə
Dövrə

ESP8266-nın 4 sancağı PCB-də belə göstərilmir və əksər şəkillər yalnız GPIO0 və GPIO2-ni açıq şəkildə ifadə edir, lakin ESP826-01-də aa GPIO1 pin (Tx pin) və GPIO3 pin (Rx pin) var.i bu pinləri aşağıdakı kimi istifadə edəcək

  • GPIO0 -> I2C portunun SDA pimi
  • GPIO1 -> DHT11
  • GPIO2-> I2C portunun SCL pimi
  • GPIO3-> OneWire Avtobusu

I2C modullarımda artıq çəkmə rezistorları olduğu üçün oraya heç bir I2C çəkmə rezistoru əlavə etməyəcəyəm. DS18B20 -nin hələ də 4k7 istifadə etdiyim bir çəkmə rezistoruna ehtiyacı var, amma bu o qədər də kritik deyil, 10k da yaxşıdır. Guya DHT11-in də çəkmə rezistoruna ehtiyacı var, amma onsuz da işləmədiyini gördüm. 4k7 rezistor əlavə etmək oxunuşların heç birini dəyişmədi, buna görə də buraxdım. 3 pinli DHT11 modullarının bir çoxunda, artıq modulun üzərinə 10 k lehimlənmiş, yalnız başa düşdüm ki, OLED üçün əlaqələri çəkməmişəm. Bunun səbəbi, yalnız sürətli bir yoxlama üçün bağladığımdır, ancaq əlavə etmək istəsəniz, bu sadəcə SDA -nı SDA -ya SCL -ə SCL -ə bağlamaqdır … və əlbəttə ki, yer və Vcc sancaqlarını həmkarlarına

Addım 2: Proqram

Proqram olduqca sadədir. Əvvəlcə kitabxanalar və sensorlar qurur, DHT11 -i pin 1 -ə (Tx) və DS18B20 üçün OnWire avtobusunu pin 3 -ə (Rx) bağlayır. OneWire avtobusunda 1 -dən çox DS18B20 sensoru istifadə etmək üçün onların 'unikal ünvanlarını' bilməlisiniz. Əgər bu yoxdursa, o ünvanları oxumaq üçün bir proqrama ehtiyacınız var. Proqramda hələ də Thingspeak Kanalınız üçün WiFi məlumatlarınızı və API yazmağı təmin etməlisiniz.

/*

Sahə 1 temp roost (DHT11) Sahə 2 rütubət yuvası (DHT11) sahə 3 Coop temperaturu (DS18B20) sahə 4 torpaq temperaturu (DS18B20) sahə 5 Hava təzyiqi (bmp180) sahə 6 Xarici temperatur (bmp180) * */ #include #include // https://www.pjrc.com/teensy/td_libs_OneWire.html #include // https://milesburton.com/Main_Page?title=Dallas_Tem… #include #include #include "SSD1306.h" SSD1306 ekranı (0x3c, 0, 2); #define DHTPIN 1 // GPIO1 (Tx) #define DHTTYPE DHT11 #deinefine ONE_WIRE_BUS 3 // GPIO3 = Rx const char* ssid = "YourSSID"; const char* parol = "Şifrənizi"; const char* host = "api.thingspeak.com"; const char* writeAPIKey = "W367812985"; // SİZİN WriteApi istifadə edin // DHT11 məhsulları float temperatur_buiten; üzmə temperaturu_buiten2; DHT dht (DHTPIN, DHTTYPE, 15); // DS18b20 məhsulları OneWire oneWire (ONE_WIRE_BUS); // OneWire nümunəsi hər hansı bir OneWire cihazı ilə əlaqə qurmaq üçün DallasTemperature sensorlar (& oneWire); // OneWire nümunəmizin ünvanını Dallas Temperaturuna ötürün. DeviceAddress Probe01 = {0x28, 0x0F, 0x2A, 0x28, 0x00, 0x00, 0x80, 0x9F}; DeviceAddress Probe02 = {0x28, 0x10, 0xA4, 0x57, 0x04, 0x00, 0x00, 0xA9}; // bmp180 məhsulları Adafruit_BMP085 bmp; void setup () {// I2C stuff Wire.pins (0, 2); Wire.begin (0, 2); // Sensorları işə salın // dht 11 şey dht.begin (); // ds18b20 stuff sensors.begin (); // ds18b20 // qətnaməni 10 bit olaraq təyin edin (9 ilə 12 bit ola bilər.. aşağı daha sürətli) sensorlar.setResolution (Probe01, 10); sensorlar.setResolution (Probe02, 10); // bmp180 məhsulları əgər (! bmp.begin ()) {// Serial.println ("BMP180 /BMP085 yoxdur"); // while (1) {}} // OLED məhsulları display.init (); display.flipScreenVertically (); display.setFont (ArialMT_Plain_10); gecikmə (1000); // WiFi şəbəkəsinə qoşul WiFi.begin (ssid, parol); while (WiFi.status ()! = WL_CONNECTED) {gecikmə (500); }} void loop () {// ds18b20stuff ------------------- sensors.requestTemperatures (); // temperaturu əldə etmək üçün əmr göndərin temperatur_buiten = sensorlar.getTempC (Probe01); // temperatur_buiten2 = sensorlar.getTempC (Probe02); // // dht11 məhsulları ---------------- ---- üzən rütubət = dht.readHumidity (); üzmə temperaturu = dht.readTemperature (); if (isnan (rütubət) || isnan (temperatur)) {qayıt; } // bmp məhsulları ------------------------- String t = String (bmp.readTemperature ()); String p = String (bmp.readPressure ()); // OLED məhsulları -------------------------- display.clear (); display.drawString (0, 10, p); // bmp təzyiq göstəricisi.drawString (0, 24, String (temperatur_buiten)); // ds18b20 display.drawString (0, 38, String (rütubət)); // dht11 göstəricisi. ekran (); // WiFiClient müştəri ilə TCP əlaqələri qurmaq; const int httpPort = 80; if (! client.connect (host, httpPort)) {return; } String url = "/update? Key ="; url += writeAPIKey; url += "& field1 ="; url += String (temperatur); // roost (DHT1) url += "& field2 ="; url += String (rütubət); // roost (DHT11) url += "& field3 ="; url += String (temperature_buiten); // cox temperaturu (DS18B20 nr 1) url += "& field4 ="; url += String (temperatur_buiten2); // torpaq temperaturu (DS18B29 nr 2) url += "& field5 ="; url += String (bmp.readTemperature ()); Xarici temperatur (BMP180) url += "& field6 ="; url += String (bmp.readPressure ()); // Hava təzyiqi (BMP180) url += "\ r / n"; // Serverə sorğu göndərin.print (String ("GET") + url + "HTTP/1.1 / r / n" + "Host:" + host + "\ r / n" + "Connection: close / r / n / r / n "); gecikmə (1000); }

……..

Addım 3: Daha çox

Hal -hazırda bu proqram yalnız izləyir, ancaq axşam və ya səhər olub olmadığını ölçmək üçün BH1750 I2C işıq sensoru əlavə etməyinizə nə mane olur və ya günün vaxtını bilmək və yuvanın qapısını avtomatik olaraq açmaq və bağlamaq. PCF8574 I2C I/O genişləndirmə kartı və ya bağçada olduğu kimi, torpağın rütubətini ölçmək və lazım olduqda nasosu işə salmaq üçün PCF8591 və ya ADS1115 AD çeviricisi əlavə edin. Və ya temperatur sıfırın altına düşəndə su hövzəsi qızdırıcısını işə sala bilərsiniz, əgər bunun üçün bir I2 C çipi varsa, ESP8266 ehtimal ki istifadə edə bilər.

Əhəmiyyətli bir qeyd: Proqram olduğu kimi yaxşı işləyir, ancaq Rx və ya Tx -ə digər sensorlar əlavə etsəniz, xüsusən də onları çıxışlara çevirsəniz, pinlər birdən -birə əslində GPIO sancaqları olmadığını xatırlaya bilər. İştirakçılara GPIO pin olduqlarını əvvəldən söyləmək daha yaxşıdır, bunu aşağıdakı ifadələri qurmağa qoyaraq edir:

pinMode (1, FUNCTION_3);

pinMode (3, FUNCTION_3);

Tövsiyə: