Inhoudsopgave:

De 4 pinnen van de ESP8266-01 gebruiken: 3 stappen
De 4 pinnen van de ESP8266-01 gebruiken: 3 stappen

Video: De 4 pinnen van de ESP8266-01 gebruiken: 3 stappen

Video: De 4 pinnen van de ESP8266-01 gebruiken: 3 stappen
Video: Hoe maak je een 4-kanaals ESP8266 ESP01 wifi-relais | ESP01 Domotica | Op afstandXY | FLProg 2024, Juli-
Anonim
De 4 pinnen van de ESP8266-01 gebruiken
De 4 pinnen van de ESP8266-01 gebruiken
De 4 pinnen van de ESP8266-01 gebruiken
De 4 pinnen van de ESP8266-01 gebruiken
De 4 pinnen van de ESP8266-01 gebruiken
De 4 pinnen van de ESP8266-01 gebruiken

Opmerking: dit project is in feite een uitbreiding van een eerdere instructable die slechts 2 pinnen gebruikte. Het beperkte aantal (4) GPIO-pinnen op de ESP8266-01 lijkt misschien een obstakel voor elke serieuze toepassing. op een slimme manier is het heel goed mogelijk om veel te doen met alleen die 4 pinnen. In sommige van mijn recente instructables heb ik het gebruik van een DHT11, een DS18B20, een OLED, een RTC en een BMP180 met de ESP8266-01 laten zien. In deze instructable ben ik begonnen met het gebruik van 4 sensoren en een display, terwijl ik ook de verkregen gegevens naar Thingspeak uploadde. Het is eigenlijk een uitbreiding van een project om de atmosfeer in en rond mijn kippenhok te monitoren. Ja, je zou dit een weerstation kunnen noemen, maar het is alleen om het gebruik van de 4 pinnen te illustreren, je zou gemakkelijk iets anders kunnen maken op deze manier Ik gebruik 2 pinnen voor I2C (BMP180 en OLED)1 pin voor 2 DS18B20 sensoren via de OneWire-protocol1 pin voor de DHT11Hoewel de ESP8266-01 nu alle pinnen heeft gebruikt, kan ik nog steeds meer sensoren (of actuatoren) toevoegen via het OneWire-protocol en/of via het I2C-protocol. Dus, wat hebben we nodig: BOM

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

en natuurlijk een breadboard, een 3.3 V PSU en wat breadboard-draden en een Thingspeak-account

Enkele opmerkingen over de stuklijst:

  • ESP8266-01 Het is duidelijk dat het project gaat over het gebruik van de beperkte pinnen van de ESP8266-01, maar als je er nog steeds een moet kopen, kun je een ESP8266-12 overwegen die meer pinnen heeft
  • DHT11A goedkope universele vochtigheids- en temperatuursensor. Het is niet enorm nauwkeurig, maar het zal doen. Als je er nog een moet kopen, kun je kiezen voor de DHT22 die zogenaamd nauwkeuriger is, maar je kunt ook kiezen voor de AMS2321. Dat is een soort DHT22 die geschikt is voor I2C, waardoor er weer een pin vrijkomt
  • BMP180 meet temperatuur en luchtdruk. Het is de opvolger van de BMP085, maar heeft nu zelf ook enkele suvessors. Zo is er de (goedkopere) BMP280, maar je kunt ook kiezen voor de BME280 die temperatuur, luchtdruk EN luchtvochtigheid meet. Zo kun je besparen op de DHT/AMS-sensor
  • OLEDI gebruikte dat gewoon zodat ik snel kon zien of de sensoren werden uitgelezen, maar je kon het net zo goed op Thingspeak checken. De OLED is sowieso te klein om alle gelezen waarden af te drukken

Stap 1: Het circuit

Het circuit
Het circuit

De 4 pinnen van de ESP8266 zijn niet als zodanig op de print aangegeven, en de meeste afbeeldingen vermelden alleen duidelijk GPIO0 en GPIO2. De ESP826-01 heeft echter een GPIO1-pin (de Tx-pin) en een GPIO3-pin (de Rx-pin).i zal die pinnen als volgt gebruiken:

  • GPIO0 -> SDA-pin van de I2C-poort
  • GPIO1 ->DHT11
  • GPIO2-> SCL-pin van de I2C-poort
  • GPIO3-> OneWire-bus

Omdat mijn I2C-modules al pull-up-weerstanden hebben, zal ik daar geen I2C-pullup-weerstanden toevoegen. De DS18B20 heeft nog wel een pull-up weerstand nodig waarvoor ik een 4k7 heb gebruikt, maar die is echt niet zo kritisch, een 10k is ook goed. De DHT11 heeft vermoedelijk ook een pull-up-weerstand nodig, maar ik vond het ook zonder te werken. het toevoegen van een 4k7-weerstand veranderde niets aan de metingen, dus ik liet het weg. Veel van de 3-pins DHT11-modules hebben al een 10 k op de module gesoldeerd. Ik realiseerde me net dat ik de aansluitingen voor de OLED niet had getekend. Dat komt omdat ik het alleen heb aangesloten voor een snelle controle, maar als je het wilt toevoegen, is het gewoon een kwestie van SDA verbinden met SDA en SCL met SCL … en natuurlijk de grond- en Vcc-pinnen met hun tegenhangers

Stap 2: Het programma

Het programma is vrij eenvoudig. Eerst worden de bibliotheken en de sensoren ingesteld. Het bevestigt de DHT11 op pin 1 (Tx) en de OnWire-bus voor de DS18B20 op pin 3 (Rx). Om meer dan 1 DS18B20-sensor op de OneWire-bus te gebruiken, moet u hun 'unieke adres' weten. Heb je die niet dan heb je een programma nodig om die adressen uit te lezen. Doe dat voor het gemak op een arduino. In het programma moet je nog steeds je WiFi-inloggegevens opgeven, evenals de schrijf-API voor je Thingspeak-kanaal

/*

Veld 1 tijdelijke slaapplaats (DHT11) Veld 2 vochtigheidsslaapplaats (DHT11) veld 3 Coop temperatuur (DS18B20) veld 4 bodemtemperatuur (DS18B20) veld 5 Luchtdruk (bmp180) veld 6 Buitentemperatuur (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 display (0x3c, 0, 2); #define DHTPIN 1 //GPIO1 (Tx) #define DHTTYPE DHT11 #define ONE_WIRE_BUS 3 // GPIO3=Rx const char* ssid = "YourSSID"; const char* wachtwoord = "UwWachtwoord"; const char* host = "api.thingspeak.com"; const char* writeAPIKey = "W367812985"; //gebruik UW writeApi //DHT11-dingen float temperature_buiten; vlottertemperatuur_buiten2; DHT dht(DHTPIN, DHTTYPE, 15); //DS18b20 dingen OneWire oneWire (ONE_WIRE_BUS); //oneWire-instantie om te communiceren met alle OneWire-apparaten DallasTemperature-sensoren(&oneWire);// Geef het adres van onze oneWire-instantie door aan Dallas Temperature. DeviceAddress Probe01 = { 0x28, 0x0F, 0x2A, 0x28, 0x00, 0x00, 0x80, 0x9F}; DeviceAddress Probe02={0x28, 0x10, 0xA4, 0x57, 0x04, 0x00, 0x00, 0xA9}; // bmp180 spul Adafruit_BMP085 bmp; void setup () {// I2C stuff Wire.pins (0, 2); Draad.begin(0, 2); // Initialiseer sensoren //dht 11 stuff dht.begin(); //ds18b20 stuff sensors.begin();//ds18b20 // stel de resolutie in op 10 bit (Kan 9 tot 12 bits zijn.. lager is sneller) sensors.setResolution (Probe01, 10); sensoren.setResolution (Probe02, 10); //bmp180 stuff if (!bmp.begin()) { // Serial.println("No BMP180 / BMP085"); // while (1) {} } //OLED-dingen display.init(); display.flipScreenVertical(); display.setFont(ArialMT_Plain_10); vertraging (1000); // Maak verbinding met WiFi-netwerk WiFi.begin (ssid, wachtwoord); while (WiFi.status() != WL_CONNECTED) {vertraging (500); } } void loop() {//ds18b20stuff------------------ sensors.requestTemperatures(); // Stuur het commando om temperaturen te verkrijgen temperatuur_buiten = sensors.getTempC(Probe01);// temperatuur_buiten2 = sensors.getTempC(Probe02);// //dht11 stuff---------------- ---- float vochtigheid = dht.readHumidity(); float-temperatuur = dht.readTemperature(); if (isnan(vochtigheid) || isnan(temperatuur)) { terugkeer; } //bmp stuff ------------------------- String t= String (bmp.readTemperature()); String p=String(bmp.readPressure()); //OLED-dingen -------------------------- display.clear(); display.drawString(0, 10, p);//bmp druk display.drawString(0, 24, String(temperatuur_buiten));//ds18b20 display.drawString(0, 38, String(vochtigheid));//dht11 display. Scherm(); // maak TCP-verbindingen WiFiClient-client; const int httpPort = 80; if (!client.connect(host, httpPort)) { return; } String url = "/update?key="; url += schrijfAPIKey; url += "&field1="; url += String(temperatuur);// slaapplaats (DHT1) url += "&field2="; url += String (vochtigheid);// slaapplaats (DHT11) url += "&field3="; url += String(temperature_buiten);//coop temperatuur (DS18B20 nr 1) url += "&field4="; url += String(temperatuur_buiten2); //bodemtemperatuur (DS18B29 nr 2) url +="&field5="; url +=String(bmp.readTemperature());Buitentemperatuur (BMP180) url +="&field6="; url +=String(bmp.readPressure());// Luchtdruk (BMP180) url += "\r\n"; // Verzend verzoek naar de server client.print(String("GET") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Verbinding: close\r \n\r\n"); vertraging (1000); }

……..

Stap 3: Meer

Momenteel controleert dit programma alleen, maar wat weerhoudt u ervan om een BH1750 I2C-lichtsensor toe te voegen om te meten of het avond of ochtend is of een RTC om de tijd van de dag te weten en om de deur van het hok automatisch te openen en te sluiten met behulp van een PCF8574 I2C I/O-uitbreidingskaart, of zoals het al in de tuin staat, voeg een PCF8591 of ADS1115 AD-converter toe om de bodemvochtigheid te meten en indien nodig een pomp te activeren. Of misschien het inschakelen van de waterbassinverwarming als de temperatuur onder nul daalt, als er een I2 C-chip voor is, kan de ESP8266 het waarschijnlijk gebruiken.

Een belangrijke opmerking echter: het programma zoals het is werkt goed, maar als je andere sensoren aan Rx of Tx toevoegt, vooral als je ze in outputs maakt, kunnen de pinnen zich plotseling herinneren dat ze niet echt GPIO-pinnen zijn. Het is beter om de pinnen vanaf het begin te vertellen dat het nu GPIO-pinnen zijn. Dat doe je door de volgende statements in de setup te zetten:

pinMode(1, FUNCTIE_3);

pinMode (3, FUNCTIE_3);

Aanbevolen: