Spisu treści:

Korzystanie z 4 pinów ESP8266-01: 3 kroki
Korzystanie z 4 pinów ESP8266-01: 3 kroki

Wideo: Korzystanie z 4 pinów ESP8266-01: 3 kroki

Wideo: Korzystanie z 4 pinów ESP8266-01: 3 kroki
Wideo: Jak zrobić 4-kanałowy przekaźnik Wi-Fi ESP8266 ESP01 | ESP01 Automatyka domowa | RemoteXY | FLProg 2024, Listopad
Anonim
Korzystanie z 4 pinów ESP8266-01
Korzystanie z 4 pinów ESP8266-01
Korzystanie z 4 pinów ESP8266-01
Korzystanie z 4 pinów ESP8266-01
Korzystanie z 4 pinów ESP8266-01
Korzystanie z 4 pinów ESP8266-01

Uwaga: ten projekt jest w zasadzie rozszerzeniem wcześniejszej instrukcji, która używała tylko 2 pinów. Ograniczona liczba (4) pinów GPIO w ESP8266-01 może wydawać się przeszkodą w każdej poważnej aplikacji. Jeśli jednak użyje się pinów w w sprytny sposób bardzo dobrze można zrobić wiele tylko z tymi 4 pinami. W niektórych moich ostatnich instrukcjach pokazałem użycie DHT11, DS18B20, OLED, RTC i BMP180 z ESP8266-01. W tej instrukcji postanowiłem użyć 4 czujników i wyświetlacza, jednocześnie przesyłając zebrane dane do Thingspeak. Właściwie rozszerza się o projekt monitorowania atmosfery w moim kurniku i wokół niego. Tak, można to nazwać stacją pogodową, ale to tylko po to, aby zilustrować użycie 4 pinów, możesz łatwo zrobić coś innego w ten sposób. Będę używał 2 pinów dla I2C (BMP180 i OLED) 1 pin dla 2 czujników DS18B20 poprzez Protokół OneWire1 pin dla DHT11Chociaż ESP8266-01 ma teraz wszystkie używane piny, nadal mogę dodać więcej czujników (lub siłowników) za pomocą protokołu OneWire i/lub protokołu I2C. Więc czego potrzebujemy: BOM

  • ESP8266-01
  • 2x DS18B20
  • 1x DHT11
  • 1x BMP180
  • OLED (opcjonalnie)

i oczywiście płytka stykowa, zasilacz 3,3 V i kilka przewodów do płytek stykowych i konto Thingspeak

Tylko kilka uwag dotyczących BOM-u:

  • ESP8266-01Oczywiście projekt polega na wykorzystaniu ograniczonych pinów ESP8266-01, ale jeśli nadal musisz je kupić, możesz rozważyć ESP8266-12, który ma więcej pinów
  • DHT11A tani uniwersalny czujnik wilgotności i temperatury. Nie jest to bardzo dokładne, ale wystarczy. Jeśli nadal musisz go kupić, możesz wybrać DHT22, który jest podobno dokładniejszy, ale możesz również wybrać AMS2321. To rodzaj DHT22, który jest odpowiedni dla I2C, uwalniając w ten sposób kolejny pin
  • BMP180 mierzy temperaturę i ciśnienie powietrza. Jest następcą BMP085, ale teraz ma też kilka suwerenów. Jest (tańszy) BMP280, ale możesz również wybrać BME280, który mierzy temperaturę, ciśnienie powietrza ORAZ wilgotność. W ten sposób możesz zaoszczędzić na czujniku DHT/AMS
  • OLEDI właśnie to wykorzystało, więc szybko mogłem zobaczyć, czy czujniki zostały odczytane, ale równie dobrze można to sprawdzić na Thingspeak. OLED i tak jest za mały, aby wydrukować wszystkie odczytane wartości

Krok 1: Obwód

Obwód
Obwód

4 piny ESP8266 nie są oznaczone jako takie na płytce drukowanej, a większość obrazów wyraźnie pokazuje tylko GPIO0 i GPIO2. Jednak ESP826-01 ma pin GPIO1 (pin Tx) i pin GPIO3 (pin Rx). będzie używał tych szpilek w następujący sposób

  • GPIO0 -> pin SDA portu I2C
  • GPIO1 -> DHT11
  • GPIO2->SCL pin portu I2C
  • GPIO3-> Magistrala OneWire

Ponieważ moje moduły I2C mają już rezystory podciągające, nie dodam tam żadnych rezystorów podciągających I2C. DS18B20 nadal potrzebuje rezystora podciągającego, dla którego użyłem 4k7, ale to naprawdę nie jest tak krytyczne, 10k też jest dobre. DHT11 podobno również potrzebuje rezystora podciągającego, ale odkryłem, że działa również bez niego. dodanie rezystora 4k7 nie zmieniło żadnego z odczytów, więc go pominąłem. Wiele z 3-pinowych modułów DHT11 ma już przylutowane 10k do modułu. Właśnie zdałem sobie sprawę, że nie narysowałem połączeń dla OLED. To dlatego, że podłączyłem go tylko do szybkiego sprawdzenia, ale jeśli chcesz go dodać, to tylko kwestia podłączenia SDA do SDA i SCL do SCL… i oczywiście piny masy i Vcc do ich odpowiedników

Krok 2: Program

Program jest dość prosty. Najpierw konfiguruje biblioteki i czujniki. Podłącza DHT11 do pinu 1 (Tx) i magistralę OnWire dla DS18B20 do pinu 3 (Rx). Aby użyć więcej niż 1 czujnika DS18B20 na magistrali OneWire, musisz znać ich „unikalny adres”. Jeśli tego nie masz, potrzebujesz programu do odczytywania tych adresów. Zrób to na arduino dla ułatwienia. W programie nadal musisz podać swoje dane uwierzytelniające Wi-Fi, a także API zapisu dla swojego kanału Thingspeak

/*

Pole 1 Przest. temp. (DHT11) Pole 2 Przek. wilgotności (DHT11) Pole 3 Temperatura koop (DS18B20) Pole 4 Temperatura gleby (DS18B20) Pole 5 Ciśnienie powietrza (bmp180) Pole 6 Temperatura zewnętrzna (bmp180) * */ #włącz #włącz // https://www.pjrc.com/teensy/td_libs_OneWire.html #include // https://milesburton.com/Main_Page?title=Dallas_Tem… #include #include #include „SSD1306.h” wyświetlacz SSD1306 (0x3c, 0, 2); #define DHTPIN 1 //GPIO1 (Tx) #define DHTTYPE DHT11 #define ONE_WIRE_BUS 3 // GPIO3=Rx const char* ssid = "YourSSID"; const char* hasło = "TwojeHasło"; const char* host = "api.thingspeak.com"; const char* writeAPIKey = "W367812985"; //użyj SWOJEGO writeApi //DHT11 stuff float temperature_buiten; temperatura pływaka_buiten2; DHT dht(DHTPIN, DHTTYPE, 15); //DS18b20 zapakuj OneWire oneWire(ONE_WIRE_BUS); //instancja oneWire do komunikacji z dowolnymi urządzeniami OneWire Czujniki temperatury Dallas(&oneWire);// Przekaż adres naszej instancji oneWire do Dallas Temperature. DeviceAddress Probe01 = { 0x28, 0x0F, 0x2A, 0x28, 0x00, 0x00, 0x80, 0x9F}; DeviceAddress Probe02={0x28, 0x10, 0xA4, 0x57, 0x04, 0x00, 0x00, 0xA9}; // bmp180 stuff Adafruit_BMP085 bmp; void setup() { //I2C stuff Wire.pins(0, 2); Wire.begin(0, 2); // Inicjalizacja czujników //dht 11 stuff dht.begin(); //ds18b20 stuff sensors.begin();//ds18b20 // ustawienie rozdzielczości na 10 bitów (może być od 9 do 12 bitów.. niższa jest szybsza) sensors.setResolution(Probe01, 10); sensory.setResolution(Probe02, 10); //bmp180 stuff if (!bmp.begin()) { // Serial.println("Brak BMP180 / BMP085"); // while (1) {} } //OLED rzeczy display.init(); display.flipScreenPionowo(); display.setFont(ArialMT_Plain_10); opóźnienie (1000); // Połącz z siecią Wi-Fi WiFi.begin(ssid, hasło); while (WiFi.status() != WL_CONNECTED) { delay(500); } } void loop() { //ds18b20stuff------------------- sensors.requestTemperature(); // Wyślij polecenie, aby uzyskać temperatury temperature_buiten = sensors.getTempC(Probe01);// temperature_buiten2 = sensors.getTempC(Probe02);// //dht11 stuff---------------- ---- wilgotność pływaka = dht.readHumidity(); temperatura pływaka = dht.odczytajTemperatura(); if (isnan(wilgotność) || isnan(temperatura)) { return; } //bmp stuff------------------------- String t= String(bmp.readTemperature()); String p=String(bmp.readPressure()); //OLED--------------------------- display.clear(); display.drawString(0, 10, p);//bmp display pressure display.drawString(0, 24, String(temperature_buiten));//ds18b20 display.drawString(0, 38, String(wilgotność));//dht11 display.wyświetlacz(); // nawiąż połączenia TCP Klient WiFiClient; const int httpPort = 80; if (!client.connect(host, httpPort)) { return; } String url = "/update?key="; url += writeAPIKey; url += "&field1="; url += String(temperatura);// roost (DHT1) url += "&field2="; url += String(wilgotność);// roost (DHT11) url += "&field3="; url += String(temperature_buiten);//temperatura współpracy (DS18B20 nr 1) url += "&field4="; url += String(temperatura_buiten2); //temperatura gleby (DS18B29 nr 2) url +="&field5="; url +=String(bmp.readTemperature());Temperatura zewnętrzna (BMP180) url +="&field6="; url +=String(bmp.readPressure());// Ciśnienie powietrza (BMP180) url += "\r\n"; // Wyślij żądanie do serwera client.print(String("GET") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Połączenie: zamknij\r \n\r\n"); opóźnienie (1000); }

……..

Krok 3: Więcej

Obecnie ten program tylko monitoruje, ale co ma powstrzymać Cię przed dodaniem czujnika światła BH1750 I2C do pomiaru, czy jest wieczór czy rano lub RTC, aby poznać porę dnia i automatycznie otwierać i zamykać drzwi kurnika za pomocą kartę rozszerzeń we/wy PCF8574 I2C lub, gdy jest już w ogrodzie, dodaj konwerter PCF8591 lub ADS1115 AD, aby mierzyć wilgotność gleby i uruchamiać pompę, gdy jest to konieczne. A może włączenie grzałki do basenu gdy temperatura spadnie poniżej zera jeśli jest do niej chip I2 C to ESP8266 prawdopodobnie może z niego skorzystać.

Ważna uwaga: program działa dobrze, ale jeśli dodasz inne czujniki do Rx lub Tx, zwłaszcza jeśli zrobisz je na wyjściach, piny mogą nagle przypomnieć sobie, że tak naprawdę nie są pinami GPIO. Lepiej jest powiedzieć pinom od początku, że są teraz pinami GPIO. Można to zrobić, umieszczając następujące instrukcje w konfiguracji:

pinMode(1, FUNCTION_3);

pinMode(3, FUNCTION_3);

Zalecana: