Съдържание:

Използване на 4-те пина на ESP8266-01: 3 стъпки
Използване на 4-те пина на ESP8266-01: 3 стъпки

Видео: Използване на 4-те пина на ESP8266-01: 3 стъпки

Видео: Използване на 4-те пина на ESP8266-01: 3 стъпки
Видео: How to Make 2-Channel ESP8266 ESP-01 Wi-Fi Relay | ESP-01 Home Automation | RemoteXY | FLProg 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 чрез OneWire протокол 1 щифт за DHT11 Въпреки че ESP8266-01 вече използва всички свои пинове, все още мога да добавя още сензори (или задвижващи механизми) чрез протокола OneWire и/или чрез протокола I2C. И така, какво ни е необходимо: BOM

  • ESP8266-01
  • 2x DS18B20
  • 1x DHT11
  • 1x BMP180
  • OLED (по избор)

и разбира се макет, 3.3 V захранващо устройство и някои проводници за платка и акаунт на Thingspeak

Само някои забележки по отношение на спецификацията:

  • ESP8266-01 Очевидно проектът е за използване на ограничените щифтове на ESP8266-01, но ако все пак трябва да закупите такъв, можете да помислите за ESP8266-12, който има повече щифтове
  • DHT11A евтин универсален сензор за влажност и температура. Не е много точен, но ще стане. Ако все пак трябва да си купите такъв, можете да изберете DHT22, който се предполага, че е по -точен, но можете да изберете и AMS2321. Това е един вид DHT22, който е подходящ за I2C, като по този начин освобождава друг щифт
  • BMP180 измерва температурата и въздушното налягане. Той е наследник на BMP085, но сега има и някои сувесори. Има (по -евтиният) BMP280, но можете да изберете и BME280, който измерва температурата, въздушното налягане и влажността. По този начин можете да спестите от сензора DHT/AMS
  • OLEDI просто използва това, за да мога бързо да видя дали сензорите са прочетени, но също така можете да го проверите на Thingspeak. OLED така или иначе е твърде малък, за да отпечата всички прочетени стойности

Стъпка 1: Веригата

Веригата
Веригата

4-те пина на ESP8266 не са посочени като такива на печатната платка, а повечето изображения само ясно посочват GPIO0 и GPIO2. Въпреки това ESP826-01 има aa GPIO1 щифт (Tx пина) и GPIO3 щифт (Rx пина). I ще използва тези щифтове, както следва

  • GPIO0 -> SDA щифт на I2C порта
  • GPIO1 -> DHT11
  • GPIO2-> SCL щифт на I2C порта
  • GPIO3-> OneWire шина

Тъй като моите I2C модули вече имат издърпващи резистори, няма да добавя никакви I2C издърпващи резистори там. DS18B20 все още се нуждае от издърпващ резистор, за който използвах 4k7, но наистина не е толкова критичен, 10k също е добър. Предполага се, че DHT11 също се нуждае от издърпващ се резистор, но открих, че работи и без такъв. добавянето на резистор 4k7 не промени нито едно от показанията, затова го пропуснах. Много от 3 -пиновите DHT11 модули вече имат спойка от 10 k върху модула. Току -що разбрах, че не съм нарисувал връзките за OLED. Това е така, защото го закачих само за бърза проверка, но ако искате да го добавите, става въпрос само за свързване на SDA към SDA и SCL към SCL … и разбира се заземяването и Vcc пиновете към техните колеги

Стъпка 2: Програмата

Програмата е доста ясна. Първо, той настройва библиотеките и сензорите. Той свързва DHT11 към пин 1 (Tx) и шината OnWire за DS18B20 към пин 3 (Rx). За да използвате повече от 1 сензор DS18B20 на шината на OneWire, трябва да знаете техния „уникален адрес“. Ако нямате това, имате нужда от програма за четене на тези адреси. Направете това на arduino за улеснение. В програмата все още трябва да предоставите вашите идентификационни данни за WiFi, както и API за запис за вашия канал Thingspeak

/*

Поле 1 temp roost (DHT11) Field 2 roost (DHT11) field 3 Temperature Coop (DS18B20) field 4 температура на почвата (DS18B20) field 5 Въздушно налягане (bmp180) field 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 "SSD1306.h" SSD1306 дисплей (0x3c, 0, 2); #дефинирайте DHTPIN 1 // GPIO1 (Tx) #дефинирайте DHTTYPE DHT11 #дефинирайте 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 неща float temperature_buiten; температура на поплавъка_buiten2; DHT dht (DHTPIN, DHTTYPE, 15); // DS18b20 неща OneWire oneWire (ONE_WIRE_BUS); // oneWire екземпляр за комуникация с всякакви устройства на OneWire DallasTemperature сензори (& oneWire); // Предаване на адреса на нашия екземпляр oneWire на Dallas Temperature. 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 неща Wire.pins (0, 2); Wire.begin (0, 2); // Инициализиране на сензори // dht 11 неща dht.begin (); // ds18b20 stuff sensors.begin (); // ds18b20 // задайте разделителната способност на 10 бита (Може да бъде от 9 до 12 бита.. по -ниското е по -бързо) sensors.setResolution (Probe01, 10); sensors.setResolution (Probe02, 10); // bmp180 неща if (! bmp.begin ()) {// Serial.println ("Няма BMP180 /BMP085"); // while (1) {}} // OLED неща display.init (); display.flipScreenVertical (); 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 неща ---------------- ---- влажност на поплавъка = dht.readHumidity (); температура на поплавък = dht.readTemperature (); if (isnan (влажност) || isnan (температура)) {връщане; } // bmp неща ------------------------- String t = String (bmp.readTemperature ()); Низ p = Низ (bmp.readPressure ()); // OLED неща -------------------------- display.clear (); display.drawString (0, 10, p); // bmp налягане display.drawString (0, 24, String (temperature_buiten)); // ds18b20 display.drawString (0, 38, String (влажност)); // dht11 дисплей.display (); // прави 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); // температура на кошарата (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 ()); // Въздушно налягане (BMP180) url += "\ r / n"; // Изпращане на заявка до сървъра client.print (String ("GET") + url + "HTTP/1.1 / r / n" + "Host:" + host + "\ r / n" + "Връзка: затваряне / r / n / r / n "); забавяне (1000); }

……..

Стъпка 3: Още

Понастоящем тази програма само наблюдава, но какво ще ви попречи да добавите светлинен сензор BH1750 I2C, за да измерите дали е вечер или сутрин или RTC, за да знаете часа на деня и да отваряте и затваряте вратата на кошарата автоматично с помощта на PCF8574 I2C I/O разширителна карта, или тъй като вече е в градината, добавете PCF8591 или ADS1115 AD конвертор, за да измерите влажността на почвата и да активирате помпа, когато е необходимо. Или може би включването на нагревателя на водния басейн, когато температурата падне под нулата, ако има чип I2 C за него, ESP8266 вероятно може да го използва.

Важна забележка обаче: Програмата, както е, работи добре, но ако добавите други сензори към Rx или Tx, особено ако ги превърнете в изходи, изводите може изведнъж да запомнят, че всъщност не са GPIO щифтове. По -добре е да кажете на пиновете от самото начало, че те вече са GPIO пинове. Един прави това, като поставя следните инструкции в настройката:

pinMode (1, FUNCTION_3);

pinMode (3, FUNCTION_3);

Препоръчано: