Table des matières:

Utilisation des 4 broches de l'ESP8266-01 : 3 étapes
Utilisation des 4 broches de l'ESP8266-01 : 3 étapes

Vidéo: Utilisation des 4 broches de l'ESP8266-01 : 3 étapes

Vidéo: Utilisation des 4 broches de l'ESP8266-01 : 3 étapes
Vidéo: IOT avec ESP 8266-01 2024, Novembre
Anonim
Utilisation des 4 broches de l'ESP8266-01
Utilisation des 4 broches de l'ESP8266-01
Utilisation des 4 broches de l'ESP8266-01
Utilisation des 4 broches de l'ESP8266-01
Utilisation des 4 broches de l'ESP8266-01
Utilisation des 4 broches de l'ESP8266-01

Remarque: ce projet est essentiellement une extension d'un instructable antérieur qui n'utilisait que 2 broches. Le nombre limité (4) de broches GPIO sur l'ESP8266-01 peut sembler être un obstacle, pour toute application sérieuse. Pourtant, si l'on utilise les broches dans d'une manière intelligente, il est très bien possible de faire beaucoup avec seulement ces 4 broches. Dans ce instructable, j'ai décidé d'utiliser 4 capteurs et un écran, tout en téléchargeant les données acquises sur Thingspeak. Il développe en fait un projet de surveillance de l'atmosphère dans et autour de mon poulailler. Oui, vous pourriez appeler cela une station météo, mais c'est juste pour illustrer l'utilisation des 4 broches, vous pouvez facilement faire autre chose de cette façon. J'utiliserai 2 broches pour I2C (BMP180 et OLED) 1 broche pour 2 capteurs DS18B20 via le Broche du protocole OneWire1 pour le DHT11Bien que l'ESP8266-01 ait maintenant toutes ses broches utilisées, je peux toujours ajouter plus de capteurs (ou actionneurs) via le protocole OneWire et/ou via le protocole I2C. Alors, de quoi avons-nous besoin:BOM

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

et bien sûr une maquette, un bloc d'alimentation 3,3 V et quelques fils de maquette et un compte Thingspeak

Quelques remarques concernant la nomenclature:

  • ESP8266-01Évidemment, le projet consiste à utiliser les broches limitées de l'ESP8266-01, mais si vous avez encore besoin d'en acheter une, vous pouvez envisager un ESP8266-12 qui a plus de broches
  • Capteur d'humidité et de température tout usage bon marché DHT11A. Ce n'est pas très précis mais ça fera l'affaire. Si vous avez encore besoin d'en acheter un, vous pouvez opter pour le DHT22 qui est censé être plus précis, mais vous pouvez également opter pour l'AMS2321. C'est une sorte de DHT22 qui convient à I2C, libérant ainsi une autre broche
  • Le BMP180 mesure la température et la pression atmosphérique. C'est le successeur du BMP085, mais il a aussi maintenant lui-même quelques successeurs. Il existe le (moins cher) BMP280, mais vous pouvez également opter pour le BME280 qui mesure la température, la pression atmosphérique ET l'humidité. De cette façon, vous pouvez économiser sur le capteur DHT/AMS
  • OLEDI vient de l'utiliser pour que je puisse rapidement voir si les capteurs ont été lus, mais vous pouvez tout aussi bien le vérifier sur Thingspeak. L'OLED est de toute façon trop petite pour imprimer toutes les valeurs lues

Étape 1: Le circuit

Le circuit
Le circuit

Les 4 broches de l'ESP8266 ne sont pas indiquées en tant que telles sur le PCB, et la plupart des images n'indiquent clairement que GPIO0 et GPIO2. Cependant, l'ESP826-01 a une broche GPIO1 (la broche Tx) et une broche GPIO3 (la broche Rx).i utilisera ces broches comme suit

  • GPIO0 -> broche SDA du port I2C
  • GPIO1 ->DHT11
  • Pin GPIO2-> SCL du port I2C
  • GPIO3-> Bus OneWire

Comme mes modules I2C ont déjà des résistances de rappel, je n'y ajouterai aucune résistance de rappel I2C. Le DS18B20 a encore besoin d'une résistance de rappel pour laquelle j'ai utilisé un 4k7, mais ce n'est vraiment pas si critique, un 10k est également bon. Le DHT11 aurait également besoin d'une résistance de rappel, mais j'ai trouvé qu'il fonctionnait également sans. l'ajout d'une résistance 4k7 n'a changé aucune des lectures, alors je l'ai omis. La plupart des modules DHT11 à 3 broches ont déjà un 10 k soudé sur le module. Je viens de me rendre compte que je n'avais pas tracé les connexions pour l'OLED. C'est parce que je ne l'ai branché que pour une vérification rapide, mais si vous voulez l'ajouter, il suffit de connecter SDA à SDA et SCL à SCL… et bien sûr les broches de terre et Vcc à leurs homologues

Étape 2: Le programme

Le programme est assez simple. Tout d'abord, il configure les bibliothèques et les capteurs. Il relie le DHT11 à la broche 1 (Tx) et le bus OnWire pour le DS18B20 à la broche 3 (Rx). Afin d'utiliser plus d'un capteur DS18B20 sur le bus OneWire, vous devez connaître leur « adresse unique ». Si vous ne l'avez pas, vous avez besoin d'un programme pour lire ces adresses. Faites-le sur un arduino pour plus de facilité. Dans le programme, vous devez toujours fournir vos informations d'identification WiFi ainsi que l'API d'écriture pour votre chaîne Thingspeak

/*

Champ 1 température gîte (DHT11) Champ 2 humidité gîte (DHT11) champ 3 Coop température (DS18B20) champ 4 température du sol (DS18B20) champ 5 Air Pressure (bmp180) champ 6 Température extérieure (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" Affichage 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"; //utilisez VOTRE writeApi //DHT11 stuff float temperature_buiten; float temperature_buiten2; DHT dht (DHTPIN, DHTTYPE, 15); // DS18b20 stuff OneWire oneWire(ONE_WIRE_BUS); //instance oneWire pour communiquer avec tous les appareils OneWire Capteurs de température Dallas (&oneWire); // Passer l'adresse de notre instance oneWire à la température Dallas. DeviceAddress Probe01 = { 0x28, 0x0F, 0x2A, 0x28, 0x00, 0x00, 0x80, 0x9F}; DeviceAddress Probe02={0x28, 0x10, 0xA4, 0x57, 0x04, 0x00, 0x00, 0xA9}; // bmp180 trucs Adafruit_BMP085 bmp; void setup() { //I2C stuff Wire.pins(0, 2); Fil.begin(0, 2); // Initialiser les capteurs //dht 11 stuff dht.begin(); //ds18b20 stuff sensor.begin(); //ds18b20 // définit la résolution sur 10 bits (peut être de 9 à 12 bits.. plus bas est plus rapide) capteurs.setResolution(Probe01, 10); capteurs.setResolution(Probe02, 10); //bmp180 stuff if (!bmp.begin()) { // Serial.println("No BMP180 / BMP085"); // while (1) {} } // stuff OLED display.init(); display.flipScreenVertically(); display.setFont(ArialMT_Plain_10); retard(1000); // Connexion au réseau WiFi WiFi.begin(ssid, mot de passe); while (WiFi.status() != WL_CONNECTED) { delay(500); } } void loop() { //ds18b20stuff------------------- sensor.requestTemperatures(); // Envoyez la commande pour obtenir les températures temperature_buiten = sensor.getTempC(Probe01); // temperature_buiten2 = sensor.getTempC(Probe02); // // dht11 stuff---------------- ---- humidité flottante = dht.readHumidity(); float temperature = dht.readTemperature(); if (isnan(humidité) || isnan(température)) { return; } //truc bmp------------------------- String t= String(bmp.readTemperature()); Chaîne p=Chaîne(bmp.readPressure()); //Trucs OLED-------------------------- display.clear(); display.drawString(0, 10, p);//bmp pression display.drawString(0, 24, String(temperature_buiten));//ds18b20 display.drawString(0, 38, String(humidité));//dht11 display.affichage(); // établit des connexions TCP WiFiClient client; const int httpPort = 80; if (!client.connect(host, httpPort)) { return; } Chaîne url = "/update?key="; url += writeAPIKey; url += "&field1="; url += String(temperature);// roost (DHT1) url += "&field2="; url += String(humidité);// roost (DHT11) url += "&field3="; url += String(temperature_buiten);//température coop (DS18B20 nr 1) url += "&field4="; url += String(temperature_buiten2); //température du sol (DS18B29 nr 2) url +="&field5="; url +=String(bmp.readTemperature());Température extérieure (BMP180) url +="&field6="; url +=String(bmp.readPressure());// Air Pressure (BMP180) url += "\r\n"; // Envoie la requête au serveur client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r \n\r\n"); retard(1000); }

……..

Étape 3: Plus

Actuellement, ce programme ne surveille que, mais qu'est-ce qui vous empêche d'ajouter un capteur de lumière BH1750 I2C pour mesurer si c'est le soir ou le matin ou un RTC pour connaître l'heure de la journée et pour ouvrir et fermer la porte de la coopérative automatiquement à l'aide de une carte d'extension I/O PCF8574 I2C, ou comme il est déjà dans le jardin, ajoutez un convertisseur AD PCF8591 ou ADS1115 pour mesurer l'humidité du sol et activer une pompe si nécessaire. Ou peut-être allumer le chauffe-eau lorsque la température tombe en dessous de zéro s'il y a une puce I2 C pour cela, l'ESP8266 peut probablement l'utiliser.

Une note importante cependant: le programme tel quel fonctionne bien, mais si vous ajoutez d'autres capteurs à Rx ou Tx, surtout si vous les transformez en sorties, les broches peuvent soudainement se rappeler qu'elles ne sont pas vraiment des broches GPIO. Il est préférable de dire aux broches dès le départ qu'elles sont maintenant des broches GPIO. On le fait en mettant les instructions suivantes dans la configuration:

pinMode(1, FUNCTION_3);

pinMode(3, FONCTION_3);

Conseillé: