Spisu treści:
Wideo: Korzystanie z 4 pinów ESP8266-01: 3 kroki
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:30
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
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:
4-cyfrowy 7-segmentowy wyświetlacz 14 pinów z Arduino: 3 kroki
4-cyfrowy 7-segmentowy wyświetlacz 14 pinów z Arduino: Zawsze dobrym pomysłem jest sprawdzenie, czy urządzenie działa poprawnie, czy nie, jeśli ten komponent ma bardzo dużą liczbę pinów. W tym projekcie przetestowałem mój 4-cyfrowy 7-segmentowy 14-pinowy wyświetlacz. Wszystkie 7 segmentów będą jednocześnie wyświetlać od 0 do 9
Sterowanie wieloma diodami LED za pomocą Pythona i pinów GPIO Raspberry Pi: 4 kroki (ze zdjęciami)
Kontrolowanie wielu diod LED za pomocą Pythona i pinów GPIO Raspberry Pi: Ta instrukcja pokazuje, jak kontrolować wiele pinów GPIO na RaspberryPi, aby zasilać 4 diody LED. Wprowadzi Cię również do parametrów i instrukcji warunkowych w Pythonie. Nasze poprzednie instrukcje używania pinów GPIO Twojego Raspberry Pi do Con
Miganie LED z Raspberry Pi - Jak korzystać z pinów GPIO na Raspberry Pi: 4 kroki
Miganie LED z Raspberry Pi | Jak korzystać z pinów GPIO na Raspberry Pi: Cześć, w tej instrukcji dowiemy się, jak korzystać z GPIO Raspberry pi. Jeśli kiedykolwiek używałeś Arduino, to prawdopodobnie wiesz, że możemy podłączyć przełącznik LED itp. do jego pinów i sprawić, by działał tak. spraw, aby dioda LED mrugała lub uzyskaj dane wejściowe z przełącznika, aby
ESP8266 przy użyciu pinów GPIO0/GPIO2/GPIO15: 4 kroki
ESP8266 Używanie pinów GPIO0/GPIO2/GPIO15: aktualizacja 1 lipca 2018 r. - Dodano uwagę na temat ponownego programowania, gdy GPIO0 jest wyjściem Jest to bardzo krótka uwaga na temat korzystania z pinów GPIO0 / GPIO2 i GPIO15 w module ESP8266. Aktualizacja: Sprawdź również out Jak używać pinów ESP8266-01WprowadzenieESP8266 to niski
Gniazdo ISP od 6 pinów do 8 pinów: 4 kroki
Gniazdo ISP od 6 do 8 pinów: Głównym powodem, dla którego zbudowałem ten projekt, było zaprogramowanie ATTiny45, który ma 8-pinowe połączenie, podczas gdy mój USBtinyISP (od Ladyada) ma tylko 10-pinowe i 6-pinowe połączenie. Po szperaniu w Internecie przez około 3-4 tygodnie nie znalazłem nic, co