İçindekiler:

ESP8266-01'in 4 Pinini Kullanma: 3 Adım
ESP8266-01'in 4 Pinini Kullanma: 3 Adım

Video: ESP8266-01'in 4 Pinini Kullanma: 3 Adım

Video: ESP8266-01'in 4 Pinini Kullanma: 3 Adım
Video: 4 Kanallı ESP8266 ESP01 Wi-Fi Rölesi Nasıl Yapılır | ESP01 Ev Otomasyonu | RemoteXY | FLProg 2024, Kasım
Anonim
ESP8266-01'in 4 Pinini Kullanma
ESP8266-01'in 4 Pinini Kullanma
ESP8266-01'in 4 Pinini Kullanma
ESP8266-01'in 4 Pinini Kullanma
ESP8266-01'in 4 Pinini Kullanma
ESP8266-01'in 4 Pinini Kullanma

Not: Bu proje temelde sadece 2 pin kullanılan önceki bir talimatın bir uzantısıdır. ESP8266-01'deki sınırlı sayıda (4) GPIO pini herhangi bir ciddi uygulama için bir engel gibi görünebilir. akıllıca bir yol, sadece bu 4 pinle çok şey yapmak çok iyi. Son talimatlarımdan bazılarında, ESP8266-01 ile bir DHT11, DS18B20, bir OLED, bir RTC ve bir BMP180 kullanımını gösterdim. Bu talimatta, elde edilen verileri Thingspeak'e yüklerken 4 sensör ve bir ekran kullanmaya başladım. Aslında tavuk kümesimin içindeki ve çevresindeki atmosferi izleme projesi üzerinde genişliyor. Evet, buna meteoroloji istasyonu diyebilirsiniz, ancak bu sadece 4 pinin kullanımını göstermek içindir, bu şekilde kolayca başka bir şey yapabilirsiniz. I2C (BMP180 ve OLED) için 2 pin kullanacağım 2 DS18B20 sensörü için 1 pin DHT11 için OneWire protokolü1 pini ESP8266-01 artık tüm pinlerini kullanmış olsa da, OneWire protokolü ve/veya I2C protokolü aracılığıyla hala daha fazla sensör (veya aktüatör) ekleyebilirim. Öyleyse, neye ihtiyacımız var: Malzeme Listesi

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

ve tabii ki bir devre tahtası, bir 3.3 V PSU ve bazı devre tahtası kabloları ve bir Thingspeak hesabı

Malzeme Listesi ile ilgili sadece bazı açıklamalar:

  • ESP8266-01Açıkçası proje ESP8266-01'in sınırlı pinlerini kullanmakla ilgili, ancak yine de bir tane satın almanız gerekiyorsa, daha fazla pini olan bir ESP8266-12'yi düşünebilirsiniz.
  • DHT11A ucuz çok amaçlı nem ve sıcaklık sensörü. Çok doğru değil ama yapacak. Hala bir tane satın almanız gerekiyorsa, sözde daha doğru olan DHT22'yi tercih edebilirsiniz, ancak AMS2321'i de tercih edebilirsiniz. Bu, I2C için uygun olan bir çeşit DHT22'dir, böylece başka bir pini serbest bırakır.
  • BMP180, sıcaklık ve Hava basıncını ölçer. BMP085'in halefidir, ancak şimdi kendisinin de bazı talipleri vardır. (Daha ucuz) BMP280 var, ancak sıcaklık, hava basıncı VE nemi ölçen BME280'i de tercih edebilirsiniz. Bu şekilde DHT/AMS sensöründen tasarruf edebilirsiniz
  • OLEDI bunu kullandı, böylece sensörlerin okunup okunmadığını hızlıca görebildim, ancak bunu Thingspeak'te kontrol edebilirsiniz. OLED, tüm okunan değerleri yazdırmak için zaten çok küçük

Adım 1: Devre

Devre
Devre

ESP8266'nın 4 pimi PCB'de bu şekilde gösterilmemiştir ve çoğu resim yalnızca GPIO0 ve GPIO2'yi açıkça belirtir. Ancak ESP826-01'de bir GPIO1 pimi (Tx pimi) ve bir GPIO3 pimi (Rx pimi) bulunur.i bu pinleri aşağıdaki gibi kullanacak

  • GPIO0 -> I2C portunun SDA pini
  • GPIO1 ->DHT11
  • GPIO2-> I2C portunun SCL pini
  • GPIO3-> OneWire Veri Yolu

I2C modüllerimde zaten çekme dirençleri olduğundan, oraya herhangi bir I2C çekme direnci eklemeyeceğim. DS18B20'nin hala 4k7 kullandığım bir yukarı çekme direncine ihtiyacı var, ancak gerçekten o kadar kritik değil, 10k da iyi. DHT11'in ayrıca bir pull-up direncine de ihtiyacı var ama ben onun bir direnç olmadan da çalıştığını gördüm. 4k7 direnç eklemek, okumaların hiçbirini değiştirmedi, bu yüzden onu dışarıda bıraktım. 3 pinli DHT11 modüllerinin çoğu zaten modül üzerine 10 k lehimlidir. OLED için bağlantıları ben çizmediğimi şimdi fark ettim. Bunun nedeni, onu sadece hızlı bir kontrol için bağladım, ancak eklemek isterseniz, bu sadece SDA'yı SDA'ya ve SCL'yi SCL'ye bağlama meselesi… ve tabii ki toprak ve Vcc pinlerini muadillerine

2. Adım: Program

Program oldukça basittir. Önce kütüphaneleri ve sensörleri kurar. DHT11'i pim 1'e (Tx) ve DS18B20 için OnWire veri yolunu pim 3'e (Rx) bağlar. OneWire bus üzerinde 1'den fazla DS18B20 sensörü kullanabilmek için onların 'benzersiz adresini' bilmeniz gerekir. Eğer buna sahip değilseniz, bu adresleri okumak için bir programa ihtiyacınız var. Kolaylık için bunu bir arduino üzerinde yapın. Programda hala WiFi kimlik bilgilerinizi ve Thingspeak Kanalınız için yazma API'sini sağlamanız gerekir.

/*

Alan 1 sıcaklık tünek (DHT11) Alan 2 nem tünek (DHT11) alan 3 Kümes sıcaklığı (DS18B20) alan 4 toprak sıcaklığı (DS18B20) alan 5 Hava basıncı (bmp180) alan 6 Dış sıcaklık (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 #define ONE_WIRE_BUS 3 // GPIO3=Rx const char* ssid = "SSID'niz"; const char* şifre = "Parolanız"; const char* ana bilgisayar = "api.thingspeak.com"; const char* writeAPIKey = "W367812985"; // SİZİN writeApi'nizi kullanın //DHT11 malzeme kayan nokta sıcaklığı_buiten; yüzer sıcaklık_buiten2; DHT dht(DHTPIN, DHTTYPE, 15); //DS18b20 OneWire oneWire(ONE_WIRE_BUS); //oneWire örneği, herhangi bir OneWire cihazıyla iletişim kurmak için DallasTemperature sensörleri(&oneWire);// oneWire örneğimizin adresini Dallas Sıcaklığına iletin. DeviceAddress Probe01 = { 0x28, 0x0F, 0x2A, 0x28, 0x00, 0x00, 0x80, 0x9F}; DeviceAddress Probe02={0x28, 0x10, 0xA4, 0x57, 0x04, 0x00, 0x00, 0xA9}; // bmp180 malzeme Adafruit_BMP085 bmp; void setup() { //I2C öğeleri Wire.pins(0, 2); tel.başla(0, 2); // Sensörleri başlat //dht 11 şeyler dht.begin(); //ds18b20 stock sensor.begin();//ds18b20 // çözünürlüğü 10 bit olarak ayarlayın (9 ila 12 bit olabilir.. daha düşük daha hızlıdır) sensor.setResolution(Probe01, 10); sensörler.setResolution(Probe02, 10); //bmp180 şeyler if (!bmp.begin()) { // Serial.println("BMP180 Yok / BMP085"); // while (1) {} } //OLED öğeleri display.init(); display.flipScreenVertically(); display.setFont(ArialMT_Plain_10); gecikme(1000); // WiFi ağına bağlanın WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { gecikme(500); } } void loop() { //ds18b20stuff------------------- sensörler.requestTemperatures(); // Sıcaklıkları almak için komutu gönderin sıcaklık_buiten = sensor.getTempC(Probe01);// sıcaklık_buiten2 = sensor.getTempC(Probe02);// //dht11 malzeme---------------- ---- kayan nem = dht.readHumidity(); kayan nokta sıcaklığı = dht.readTemperature(); if (isnan(nem) || isnan(sıcaklık)) { dönüş; } //bmp öğeleri------------------------- String t= String(bmp.readTemperature()); String p=String(bmp.readPressure()); //OLED öğeleri-------------------------- display.clear(); display.drawString(0, 10, p);//bmp basınç display.drawString(0, 24, String(temperature_buiten));//ds18b20 display.drawString(0, 38, String(nem));//dht11 display. Görüntüle(); // TCP bağlantılarını yapın WiFiClient istemcisi; const int httpPort = 80; if (!client.connect(host, httpPort)) { return; } Dize url = "/update?key="; url += writeAPIKey; url += "&alan1="; url += Dize(sıcaklık);// tünek (DHT1) url += "&field2="; url += Dize(nem);// tünek (DHT11) url += "&field3="; url += String(temperature_buiten);//coop sıcaklığı (DS18B20 nr 1) url += "&field4="; url += Dize(sıcaklık_buiten2); //toprak sıcaklığı (DS18B29 nr 2) url +="&field5="; url +=String(bmp.readTemperature());Dış sıcaklık (BMP180) url +="&field6="; url +=String(bmp.readPressure());// Hava Basıncı (BMP180) url += "\r\n"; // Sunucuya istek gönder client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Ana Bilgisayar: " + ana bilgisayar + "\r\n" + "Bağlantı: kapat\r \n\r\n"); gecikme(1000); }

……..

3. Adım: Daha Fazla

Şu anda bu program sadece izliyor, ancak akşam mı yoksa sabah mı olduğunu ölçmek için bir BH1750 I2C ışık sensörü veya günün saatini bilmek için bir RTC eklemekten ve yardımı ile kümes kapısını otomatik olarak açıp kapatmaktan sizi alıkoyan nedir? bir PCF8574 I2C I/O genişletme kartı veya zaten bahçede olduğu için, toprak nemini ölçmek ve gerektiğinde bir pompayı etkinleştirmek için bir PCF8591 veya ADS1115 AD dönüştürücü ekleyin. Veya sıcaklık sıfırın altına düştüğünde şofben ısıtıcısını çalıştırabilir, bunun için bir I2 C çipi varsa, ESP8266 muhtemelen onu kullanabilir.

Yine de önemli bir not: Program olduğu gibi iyi çalışıyor, ancak Rx veya Tx'e başka sensörler eklerseniz, özellikle bunları çıkışlara yaparsanız, pinler aniden onların gerçekten GPIO pinleri olmadığını hatırlayabilir. Pinlere artık GPIO pinleri olduklarını en baştan söylemek daha iyidir. Biri bunu kuruluma aşağıdaki ifadeleri koyarak yapar:

pinMode(1, FUNCTION_3);

pinMode(3, FUNCTION_3);

Önerilen: