Inhaltsverzeichnis:

Verwenden der 4 Pins des ESP8266-01 - Gunook
Verwenden der 4 Pins des ESP8266-01 - Gunook

Video: Verwenden der 4 Pins des ESP8266-01 - Gunook

Video: Verwenden der 4 Pins des ESP8266-01 - Gunook
Video: ESP8266-01 - Pin-out und programmieren - einfach erklärt| #EdisTechlab #esp8266 #arduino 2024, Juli
Anonim
Verwenden der 4 Pins des ESP8266-01
Verwenden der 4 Pins des ESP8266-01
Verwenden der 4 Pins des ESP8266-01
Verwenden der 4 Pins des ESP8266-01
Verwenden der 4 Pins des ESP8266-01
Verwenden der 4 Pins des ESP8266-01

Hinweis: Dieses Projekt ist im Grunde eine Erweiterung eines früheren instructable, das nur 2 Pins verwendet. Die begrenzte Anzahl (4) von GPIO-Pins auf dem ESP8266-01 kann für jede ernsthafte Anwendung wie ein Hindernis erscheinen Auf eine intelligente Weise ist es sehr gut möglich, mit nur diesen 4 Pins viel zu tun. In einigen meiner jüngsten Anleitungen habe ich die Verwendung eines DHT11, eines DS18B20, eines OLED, eines RTC und eines BMP180 mit dem ESP8266-01 gezeigt. In diesem anweisbaren machte ich mich daran, 4 Sensoren und ein Display zu verwenden und gleichzeitig die erfassten Daten auf Thingspeak hochzuladen. Es erweitert tatsächlich ein Projekt zur Überwachung der Atmosphäre in und um meinen Hühnerstall. Ja, Sie könnten dies als Wetterstation bezeichnen, aber es dient nur zur Veranschaulichung der Verwendung der 4 Pins. Sie können auf diese Weise leicht etwas anderes herstellen. Ich werde 2 Pins für I2C (BMP180 und OLED) verwenden OneWire-Protokoll1-Pin für das DHT11Obwohl der ESP8266-01 jetzt alle seine Pins verwendet hat, kann ich immer noch weitere Sensoren (oder Aktoren) über das OneWire-Protokoll und/oder über das I2C-Protokoll hinzufügen. Also, was brauchen wir: Stückliste?

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

und natürlich ein Steckbrett, ein 3,3-V-Netzteil und einige Steckbrettdrähte und ein Thingspeak-Konto

Nur einige Anmerkungen zur Stückliste:

  • ESP8266-01Natürlich geht es bei dem Projekt darum, die begrenzten Pins des ESP8266-01 zu verwenden, aber wenn Sie noch einen kaufen müssen, könnten Sie einen ESP8266-12 in Betracht ziehen, der mehr Pins hat
  • DHT11A preiswerter Allzweck-Feuchte- und Temperatursensor. Es ist nicht sehr genau, aber es wird reichen. Wenn Sie noch einen kaufen müssen, können Sie sich für das vermeintlich genauere DHT22 entscheiden, aber auch für das AMS2321. Das ist eine Art DHT22, die für I2C geeignet ist und so einen weiteren Pin freigibt
  • BMP180 misst Temperatur und Luftdruck. Es ist der Nachfolger des BMP085, hat aber jetzt auch selbst einige Nachfolger. Es gibt den (günstigeren) BMP280, aber Sie können sich auch für den BME280 entscheiden, der Temperatur, Luftdruck UND Luftfeuchtigkeit misst. So können Sie beim DHT/AMS-Sensor sparen
  • Das hat OLEDI gerade benutzt, damit ich schnell sehen konnte, ob die Sensoren ausgelesen wurden, aber man könnte es genauso gut auf Thingspeak überprüfen. Die OLED ist sowieso zu klein, um alle gelesenen Werte auszudrucken

Schritt 1: Die Schaltung

Die Rennbahn
Die Rennbahn

Die 4 Pins des ESP8266 sind auf der Platine nicht als solche gekennzeichnet, und die meisten Bilder geben nur GPIO0 und GPIO2 deutlich an. Der ESP826-01 hat jedoch einen GPIO1-Pin (den Tx-Pin) und einen GPIO3-Pin (den Rx-Pin).i werde diese Pins wie folgt verwenden

  • GPIO0 -> SDA-Pin des I2C-Ports
  • GPIO1 ->DHT11
  • GPIO2-> SCL-Pin des I2C-Ports
  • GPIO3-> OneWire-Bus

Da meine I2C-Module bereits über Pullup-Widerstände verfügen, werde ich dort keine I2C-Pullup-Widerstände hinzufügen. Der DS18B20 benötigt noch einen Pull-Up-Widerstand, für den ich einen 4k7 verwendet habe, aber der ist wirklich nicht so kritisch, ein 10k ist auch gut. Der DHT11 braucht angeblich auch einen Pull-Up-Widerstand, aber ich fand, dass er auch ohne einen funktioniert. Das Hinzufügen eines 4k7-Widerstands hat keinen der Messwerte geändert, also habe ich ihn weggelassen. Viele der 3-poligen DHT11-Module haben bereits ein 10 k auf das Modul gelötet. Ich habe gerade festgestellt, dass ich die Anschlüsse für die OLED nicht gezeichnet habe. Das liegt daran, dass ich es nur für eine schnelle Überprüfung angeschlossen habe, aber wenn Sie es hinzufügen möchten, müssen Sie nur SDA mit SDA und SCL mit SCL verbinden … und natürlich die Masse- und Vcc-Pins mit ihren Gegenstücken

Schritt 2: Das Programm

Das Programm ist recht einfach. Zuerst richtet es die Bibliotheken und die Sensoren ein. Es schließt das DHT11 an Pin 1 (Tx) und den OnWire-Bus für das DS18B20 an Pin 3 (Rx) an. Um mehr als 1 DS18B20-Sensor am OneWire-Bus zu verwenden, müssen Sie deren „eindeutige Adresse“kennen. Wenn Sie das nicht haben, benötigen Sie ein Programm, um diese Adressen zu lesen. Tun Sie dies der Einfachheit halber auf einem Arduino. Im Programm müssen Sie noch Ihre WLAN-Anmeldeinformationen sowie die Schreib-API für Ihren Thingspeak-Kanal angeben

/*

Feld 1 Temp. Quartier (DHT11) Feld 2 Feuchte Quartier (DHT11) Feld 3 Stalltemperatur (DS18B20) Feld 4 Bodentemperatur (DS18B20) Feld 5 Luftdruck (bmp180) Feld 6 Aussentemperatur (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-Anzeige (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 = "IhrPasswort"; const char* host = "api.thingspeak.com"; const char* writeAPIKey = "W367812985"; //benutze DEINE writeApi //DHT11 Zeug float temperature_buiten; float temperature_buiten2; DHT dht (DHTPIN, DHTTYPE, 15); // DS18b20 Zeug OneWire oneWire (ONE_WIRE_BUS); //oneWire-Instanz zur Kommunikation mit allen OneWire-Geräten DallasTemperature-Sensoren(&oneWire); // Übergeben Sie die Adresse unserer oneWire-Instanz an Dallas Temperature. DeviceAddress Probe01 = { 0x28, 0x0F, 0x2A, 0x28, 0x00, 0x00, 0x80, 0x9F}; DeviceAddress Probe02={0x28, 0x10, 0xA4, 0x57, 0x04, 0x00, 0x00, 0xA9}; // bmp180 Zeug Adafruit_BMP085 bmp; Void setup () {//I2C Zeug Wire.pins (0, 2); Draht. Begin(0, 2); // Sensoren initialisieren // Dht 11 Zeug dht.begin (); // ds18b20 stopfe sensor.begin (); // ds18b20 // setze die Auflösung auf 10 Bit (kann 9 bis 12 Bit sein.. niedriger ist schneller) Sensoren.setResolution (Probe01, 10); sensor.setResolution (Probe02, 10); // bmp180 Sachen wenn (! bmp.begin ()) {// Serial.println ("Kein BMP180 / BMP085"); // während (1) {} } // OLED-Zeug display.init (); display.flipScreenVertically(); display.setFont(ArialMT_Plain_10); Verzögerung (1000); // Mit dem WiFi-Netzwerk verbinden WiFi.begin (ssid, Passwort); Während (WiFi.status () != WL_CONNECTED) { Verzögerung (500); aufrechtzuerhalten. aufrechtzuerhalten. aufrechtzuerhalten. // Senden Sie den Befehl, um die Temperaturen zu erhalten temperature_buiten = Sensoren.getTempC(Probe01); // temperature_buiten2 = Sensoren.getTempC(Probe02); // //dht11 stuff---------------- ---- Schwebefeuchtigkeit = dht.readHumidity(); Float-Temperatur = dht.readTemperature(); if (isnan(Luftfeuchtigkeit) || isnan(temperatur)) { zurück; } //bmp-Zeug-------------------------- String t= String(bmp.readTemperature()); String p=String(bmp.readPressure()); // OLED-Zeug -------------------------- display.clear (); display.drawString (0, 10, p); // bmp-Druck display.drawString (0, 24, String (temperature_buiten)); // ds18b20 display.drawString (0, 38, String (Luftfeuchtigkeit)); //dht11 display. Anzeige(); // TCP-Verbindungen herstellen WiFiClient-Client; const int httpPort = 80; if (!client.connect(host, httpPort)) { return; } String-URL = "/update?key="; URL += writeAPIKey; URL += "&field1="; url += String(temperatur);// quartier (DHT1) url += "&field2="; url += String(Luftfeuchtigkeit);// Schlafplatz (DHT11) url += "&field3="; url += String(temperature_buiten); // Stalltemperatur (DS18B20 nr 1) url += "&field4="; URL += String(temperature_buiten2); // Bodentemperatur (DS18B29 nr 2) url +="&field5="; url +=String(bmp.readTemperature());Außentemperatur (BMP180) url +="&field6="; url +=String(bmp.readPressure()); // Luftdruck (BMP180) url += "\r\n"; // Anfrage an den Server senden client.print(String("GET") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r \n\r\n"); Verzögerung (1000); }

……..

Schritt 3: Mehr

Derzeit überwacht dieses Programm nur, aber was hindert Sie daran, einen BH1750 I2C-Lichtsensor hinzuzufügen, um zu messen, ob es Abend oder Morgen ist, oder eine RTC, um die Tageszeit zu kennen und die Stalltür automatisch mit Hilfe von zu öffnen und zu schließen eine PCF8574 I2C I/O-Erweiterungskarte, oder wie bereits im Garten vorhanden, fügen Sie einen PCF8591 oder ADS1115 AD-Wandler hinzu, um die Bodenfeuchtigkeit zu messen und bei Bedarf eine Pumpe zu aktivieren. Oder vielleicht die Wasserbeckenheizung einschalten, wenn die Temperatur unter Null fällt, wenn es einen I2 C-Chip dafür gibt, kann der ESP8266 ihn wahrscheinlich verwenden.

Ein wichtiger Hinweis jedoch: Das Programm funktioniert wie es ist gut, aber wenn Sie andere Sensoren zu Rx oder Tx hinzufügen, insbesondere wenn Sie sie zu Ausgängen machen, können sich die Pins plötzlich daran erinnern, dass es sich nicht wirklich um GPIO-Pins handelt. Es ist besser, den Pins von vornherein zu sagen, dass es sich um GPIO-Pins handelt. Das macht man, indem man die folgenden Anweisungen in das Setup einfügt:

pinMode(1, FUNCTION_3);

pinMode(3, FUNCTION_3);

Empfohlen: