Talaan ng mga Nilalaman:

Gamit ang 4 na Pins ng ESP8266-01: 3 Mga Hakbang
Gamit ang 4 na Pins ng ESP8266-01: 3 Mga Hakbang

Video: Gamit ang 4 na Pins ng ESP8266-01: 3 Mga Hakbang

Video: Gamit ang 4 na Pins ng ESP8266-01: 3 Mga Hakbang
Video: Paano Gumawa ng 4-Channel ESP8266 ESP01 Wi-Fi Relay | ESP01 Home Automation | RemoteXY | FLProg 2024, Hulyo
Anonim
Gamit ang 4 na Pins ng ESP8266-01
Gamit ang 4 na Pins ng ESP8266-01
Gamit ang 4 na Pins ng ESP8266-01
Gamit ang 4 na Pins ng ESP8266-01
Gamit ang 4 na Pins ng ESP8266-01
Gamit ang 4 na Pins ng ESP8266-01

Tandaan: Ang proyektong ito ay karaniwang isang extension ng isang naunang itinuro na gumagamit lamang ng 2 mga pin. Ang limitadong bilang (4) ng mga GPIO pin sa ESP8266-01 ay maaaring parang isang balakid, para sa anumang seryosong aplikasyon. Gayunpaman kung ang isang gumagamit ng mga pin sa isang matalinong paraan posible na gumawa ng marami sa mga 4 na pin lamang na iyon. Sa ilan sa aking mga kamakailan-lamang na instruksyon, ipinakita ko ang paggamit ng isang DHT11 isang DS18B20, isang OLED, isang RTC at isang BMP180 sa ESP8266-01. Sa itinuturo na ito nagtakda ako upang gumamit ng 4 na mga sensor at isang display, habang ina-upload din ang nakuha na data sa Thingspeak. Ito ay talagang lumalawak sa isang proyekto ng pagsubaybay sa kapaligiran sa loob at paligid ng aking manukan. Oo, maaari mo itong tawaging isang Weatherstation, ngunit upang mailarawan lamang ang paggamit ng 4 na mga pin, madali kang makagawa ng ibang bagay sa ganitong paraan Gumagamit ako ng 2 mga pin para sa I2C (BMP180 at OLED) 1 pin para sa 2 DS18B20 sensor sa pamamagitan ng Kahit na ang ESP8266-01 ngayon ay ginagamit ang lahat ng mga pin nito, maaari pa rin akong magdagdag ng higit pang mga sensor (o actuators) sa pamamagitan ng OneWire protocol at / o sa pamamagitan ng I2C protocol. Kaya, ano ang kailangan namin: BOM

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

at umikot ng isang breadboard, isang 3.3 V PSU at ilang mga wire ng breadboard at isang bagay na Thingspeak

Ilang mga pangungusap lamang tungkol sa BOM:

  • Malinaw na ang proyekto ay tungkol sa paggamit ng mga limitadong mga pin ng ESP8266-01, ngunit kung kailangan mo pa ring bumili ng isa, maaari mong isaalang-alang ang isang ESP8266-12 na may maraming mga pin
  • DHT11A mura ang lahat ng layunin ng kahalumigmigan at temperatura sensor. Ito ay hindi masyadong tumpak ngunit gagawin ito. Kung kailangan mo pa ring bumili ng isa, maaari kang pumili para sa DHT22 na mas wastong mas wasto, ngunit maaari mo ring mag-opt para sa AMS2321. Iyon ay isang uri ng DHT22 na angkop para sa I2C, sa gayon ay nagpapalaya ng isa pang pin
  • BMP180 sukat ng temperatura at Airpressure. Ito ang kahalili ng BMP085, ngunit mayroon din itong ilang mga suvessors mismo. Mayroong (mas murang) BMP280, ngunit maaari mo ring mag-opt para sa BME280 na sumusukat sa temperatura, airpresure AT halumigmig. Sa ganoong paraan makaka-save ka sa sensor ng DHT / AMS
  • Ginamit lang iyon ng OLEDI kaya't mabilis kong nakita kung nabasa ang mga sensor, ngunit maaari mo ring suriin ito sa Thingspeak. Ang OLED ay masyadong maliit pa rin upang mai-print ang lahat ng mga binasang halaga

Hakbang 1: Ang Circuit

Ang Circuit
Ang Circuit

Ang 4 na mga pin ng ESP8266 ay hindi ipinahiwatig na tulad sa PCB, at ang karamihan sa mga imahe ay malinaw lamang na isinasaad ang GPIO0 at GPIO2. Gayunpaman ang ESP826-01 ay mayroong aa GPIO1 pin (ang Tx pin) at isang GPIO3 pin (ang Rx pin). gagamitin ang mga pin na tulad ng sumusunod

  • GPIO0 -> SDA pin ng I2C port
  • GPIO1 -> DHT11
  • GPIO2-> SCL pin ng I2C port
  • GPIO3-> OneWire Bus

Tulad ng aking mga module na I2C na mayroon nang mga pull up resistor, hindi ako magdagdag ng anumang I2C pullup resistors doon. Ang DS18B20 ay nangangailangan pa rin ng isang pull up risistor na kung saan ginamit ko ang isang 4k7, ngunit ito ay talagang hindi na kritikal, isang 10k ay mabuti din. Kailangan din ng DHT11 ng isang pull-up risistor ngunit nahanap kong gumana ito nang wala rin. ang pagdaragdag ng isang 4k7 risistor ay hindi nagbago ng anumang mga pagbabasa, kaya't iniwan ko ito. Marami sa mga module ng 3 pin DHT11, mayroon nang 10 k na solder sa module. Napagtanto ko na hindi ko iginuhit ang mga koneksyon para sa OLED. Iyon ay dahil na-hook ko lamang ito para sa isang mabilis na pagsusuri, ngunit kung nais mong idagdag ito, ito ay isang bagay lamang ng pagkonekta sa SDA sa SDA at SCL sa SCL … at pag-iskedyul ang mga ground at Vcc pin sa kanilang mga katapat

Hakbang 2: Ang Programa

Ang programa ay medyo prangka. Una nitong itinatakda ang mga aklatan at sensor. Nakakabit nito ang DHT11 upang i-pin ang 1 (Tx) at ang OnWire bus para sa DS18B20 upang i-pin ang 3 (Rx). Upang magamit ang higit sa 1 sensor ng DS18B20 sa OneWire bus, kailangan mong malaman ang kanilang 'natatanging adress'. Kung wala ka nito kailangan mo ng isang programa upang mabasa ang mga address. Gawin iyon sa isang arduino para sa kadalian. Sa programa kailangan mo pa ring ibigay ang iyong mga kredensyal sa WiFi pati na rin ang isulat ang API para sa iyong Thingspeak Channel

/*

Patlang 1 temp roost (DHT11) Patlang 2 kahalumigmigan roost (DHT11) patlang 3 Coop temperatura (DS18B20) patlang 4 temperatura ng lupa (DS18B20) patlang 5 Airpressure (bmp180) patlang 6 Sa labas ng temperatura (bmp180) * * / # isama ang # isama // https://www.pjrc.com/teensy/td_libs_OneWire.html #include // https://milesburton.com/Main_Page?title=Dallas_Tem… #include #include #include "SSD1306.h" display na 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 * password = "YourPassword"; const char * host = "api.thingspeak.com"; const char * writeAPIKey = "W367812985"; // use HIS writeApi // DHT11 bagay float temperatura_buiten; float temperatura_buiten2; DHT dht (DHTPIN, DHTTYPE, 15); // DS18b20 bagay na OneWire oneWire (ONE_WIRE_BUS); // oneWire instance upang makipag-usap sa anumang mga aparato ng OneWire na DallasTemperature sensor (& oneWire); // Pass address ng aming oneWire instance sa Dallas Temperature. DeviceAddress Probe01 = {0x28, 0x0F, 0x2A, 0x28, 0x00, 0x00, 0x80, 0x9F}; DeviceAddress Probe02 = {0x28, 0x10, 0xA4, 0x57, 0x04, 0x00, 0x00, 0xA9}; // bmp180 bagay Adafruit_BMP085 bmp; void setup () {// I2C bagay na Wire.pins (0, 2); Wire.begin (0, 2); // Initialize sensors // dht 11 bagay dht.begin (); // ds18b20 bagay sensors.begin (); // ds18b20 // itakda ang resolusyon sa 10 bit (Maaaring 9 hanggang 12 bits.. mas mababa ang mas mabilis) sensors.setResolution (Probe01, 10); sensors.setResolution (Probe02, 10); // bmp180 bagay kung (! bmp.begin ()) {// Serial.println ("Walang BMP180 / BMP085"); // habang (1) {}} // OLED bagay na display.init (); display.flipScreenVertically (); display.setFont (ArialMT_Plain_10); pagkaantala (1000); // Kumonekta sa WiFi network WiFi.begin (ssid, password); habang (WiFi.status ()! = WL_CONNected) {pagkaantala (500); }} void loop () {// ds18b20stuff ------------------- sensors.requestTemperature (); // Ipadala ang utos upang makakuha ng temperatura ng temperatura_buiten = sensors.getTempC (Probe01); // temperatura_buiten2 = sensors.getTempC (Probe02); // // dht11 bagay ---------------- ---- float halumigmig = dht.readHumidity (); temperatura ng float = dht.readTemperature (); kung (isnan (halumigmig) || isnan (temperatura)) {bumalik; } // bmp bagay-bagay ----------------- String t = String (bmp.readTemperature ()); String p = String (bmp.readPressure ()); // OLED bagay-bagay ---- display.clear (); display.drawString (0, 10, p); // display ng bmp pressure.drawString (0, 24, String (temperatura_buiten)); // ds18b20 display.drawString (0, 38, String (halumigmig)); // display ng dht11. ipakita (); // gumawa ng mga koneksyon sa TCP WiFiClient client; const int httpPort = 80; kung (! client.connect (host, httpPort)) {return; } String url = "/ update? Key ="; url + = writeAPIKey; url + = "& field1 ="; url + = String (temperatura); // roost (DHT1) url + = "& field2 ="; url + = String (halumigmig); // roost (DHT11) url + = "& field3 ="; url + = String (temperatura_buiten); // temperatura ng coop (DS18B20 nr 1) url + = "& field4 ="; url + = String (temperatura_buiten2); // temperatura ng lupa (DS18B29 nr 2) url + = "& field5 ="; url + = String (bmp.readTemperature ()); Sa labas ng temperatura (BMP180) url + = "& field6 ="; url + = String (bmp.readPressure ()); // Airpressure (BMP180) url + = "\ r / n"; // Send request to the server client.print (String ("GET") + url + "HTTP / 1.1 / r / n" + "Host:" + host + "\ r / n" + "Connection: close / r / n / r / n "); pagkaantala (1000); }

……..

Hakbang 3: Dagdag pa

Sa kasalukuyan ang program na ito ay sinusubaybayan lamang, ngunit ano ang pipigilan ka sa pagdaragdag ng isang ilaw ng BH1750 I2C upang sukatin kung gabi o umaga o isang RTC upang malaman ang oras ng araw at upang buksan at isara ang pintuan ng coop nang may tulong ng isang PCF8574 I2C I / O expansion card, o dahil nasa hardin na ito, magdagdag ng isang PCF8591 o ADS1115 AD converter upang masukat ang halumigmig sa lupa at buhayin ang isang bomba kung kinakailangan. O baka ang paglipat sa pampainit ng palanggana ng tubig kapag ang temperatura ay bumaba sa ibaba zeroif mayroong isang chip na I2 C para dito, maaaring magamit ito ng ESP8266.

Gayunpaman, isang mahalagang tala: Ang programa ay gumagana nang maayos, ngunit kung magdagdag ka ng iba pang mga sensor sa Rx o Tx, lalo na kung gagawin mo itong mga output, maaaring biglang matandaan ng mga pin na hindi talaga sila GPIO pin. Mas mahusay na sabihin sa mga pin mula sa simula na sila ngayon ay mga GPIO pin. Ginagawa iyon ng isa sa pamamagitan ng paglalagay ng mga sumusunod na pahayag sa pag-setup:

pinMode (1, FUNCTION_3);

pinMode (3, FUNCTION_3);

Inirerekumendang: