Inhoudsopgave:
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-23 15:01
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
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:
Hoe de GPIO-pinnen en Avrdude van een Raspberry Pi te gebruiken om DIMP 2 of DA PIMP te Bit-bang-programma te gebruiken 2: 9 stappen
Hoe de GPIO-pinnen van een Raspberry Pi en Avrdude te gebruiken voor Bit-bang-programma DIMP 2 of DA PIMP 2: Dit zijn stapsgewijze instructies voor het gebruik van een Raspberry Pi en het gratis open-source commando avrdude to bit-bang -programmeer een DIMP 2 of DA PIMP 2. Ik neem aan dat je bekend bent met je Raspberry Pi en de LINUX-opdrachtregel. Je hoeft niet
Meerdere LED's besturen met Python en de GPIO-pinnen van je Raspberry Pi: 4 stappen (met afbeeldingen)
Meerdere LED's besturen met Python en de GPIO-pinnen van je Raspberry Pi: deze Instructable laat zien hoe je meerdere GPIO-pinnen op je RaspberryPi kunt besturen om 4 LED's van stroom te voorzien. Het zal je ook kennis laten maken met parameters en voorwaardelijke uitspraken in Python.Onze vorige Instructable met behulp van de GPIO-pinnen van je Raspberry Pi om
LED-knipper met Raspberry Pi - Hoe GPIO-pinnen op Raspberry Pi te gebruiken: 4 stappen
LED-knipper met Raspberry Pi | Hoe GPIO-pinnen op Raspberry Pi te gebruiken: Hallo allemaal, in deze instructables zullen we leren hoe we GPIO's van Raspberry Pi kunnen gebruiken. Als je ooit Arduino hebt gebruikt, weet je waarschijnlijk dat we een LED-schakelaar enz. op de pinnen kunnen aansluiten en het zo kunnen laten werken. laat de LED knipperen of krijg input van de schakelaar zodat
ESP8266 GPIO0/GPIO2/GPIO15-pinnen gebruiken: 4 stappen:
ESP8266 GPIO0/GPIO2/GPIO15-pinnen gebruiken: update 1 juli 2018 -- Opmerking toegevoegd over herprogrammeren wanneer GPIO0 een uitgang is. Dit is een zeer korte opmerking over het gebruik van GPIO0 / GPIO2- en GPIO15-pinnen op de ESP8266-module. out Hoe de ESP8266-01 pins te gebruikenInleidingESP8266 is een lage
Ontwikkeling van applicaties met GPIO-pinnen op de DragonBoard 410c met Android- en Linux-besturingssystemen: 6 stappen
Ontwikkeling van applicaties met GPIO-pinnen op de DragonBoard 410c met Android- en Linux-besturingssystemen: Het doel van deze tutorial is om informatie te tonen die nodig is om applicaties te ontwikkelen met behulp van de GPIO-pin op DragonBoard 410c met lage snelheidsuitbreiding. Deze tutorial presenteert informatie voor het ontwikkelen van applicaties met behulp van de GPIO-pinnen met SYS op de Andr