Índice:

Usando os 4 pinos do ESP8266-01: 3 etapas
Usando os 4 pinos do ESP8266-01: 3 etapas

Vídeo: Usando os 4 pinos do ESP8266-01: 3 etapas

Vídeo: Usando os 4 pinos do ESP8266-01: 3 etapas
Vídeo: 🔴 Dois segredos para dominar o ESP-01 WiFi. 😎 Fácil como o Arduino. 2024, Novembro
Anonim
Usando os 4 pinos do ESP8266-01
Usando os 4 pinos do ESP8266-01
Usando os 4 pinos do ESP8266-01
Usando os 4 pinos do ESP8266-01
Usando os 4 pinos do ESP8266-01
Usando os 4 pinos do ESP8266-01

Nota: Este projeto é basicamente uma extensão de um instrutível anterior que usava apenas 2 pinos. O número limitado (4) de pinos GPIO no ESP8266-01 pode parecer um obstáculo, para qualquer aplicação séria. No entanto, se usar os pinos em de forma inteligente, é muito possível fazer muita coisa apenas com esses 4 pinos. Em alguns dos meus instructables recentes, mostrei o uso de um DHT11, um DS18B20, um OLED, um RTC e um BMP180 com o ESP8266-01. Neste instrutível, propus usar 4 sensores e um display, enquanto também carrego os dados adquiridos para Thingspeak. Na verdade, está se expandindo em um projeto de monitoramento da atmosfera dentro e ao redor do meu galinheiro. Sim, você poderia chamar isso de estação meteorológica, mas é apenas para ilustrar o uso dos 4 pinos, você poderia facilmente fazer outra coisa desta forma; estarei usando 2 pinos para I2C (BMP180 e OLED) 1 pino para 2 sensores DS18B20 através do Pino do protocolo OneWire1 para o DHT11Embora o ESP8266-01 agora tenha todos os seus pinos usados, ainda posso adicionar mais sensores (ou atuadores) por meio do protocolo OneWire e / ou via protocolo I2C. Então, o que precisamos: BOM

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

e, claro, uma placa de ensaio, uma fonte de alimentação de 3,3 V e alguns fios da placa de ensaio e uma conta Thingspeak

Apenas algumas observações sobre o BOM:

  • ESP8266-01 Obviamente, o projeto é sobre a utilização dos pinos limitados do ESP8266-01, mas se você ainda precisar comprar um, você pode considerar um ESP8266-12 que tem mais pinos
  • DHT11A sensor de umidade e temperatura multiuso barato. Não é extremamente preciso, mas servirá. Se ainda precisar comprar um, você pode optar pelo DHT22, que é supostamente mais preciso, mas também pode optar pelo AMS2321. Esse é um tipo de DHT22 que é adequado para I2C, liberando assim outro pino
  • O BMP180 mede a temperatura e a pressão do ar. É o sucessor do BMP085, mas agora também possui alguns suvessores. Existe o (mais barato) BMP280, mas você também pode optar pelo BME280 que mede temperatura, pressão do ar E umidade. Dessa forma, você pode economizar no sensor DHT / AMS
  • O OLEDI acabou de usar isso para que eu pudesse ver rapidamente se os sensores foram lidos, mas você também poderia verificar no Thingspeak. O OLED é muito pequeno para imprimir todos os valores lidos

Etapa 1: O circuito

O circuito
O circuito

Os 4 pinos do ESP8266 não são indicados como tal no PCB, e a maioria das imagens apenas mostra claramente GPIO0 e GPIO2. No entanto, o ESP826-01 tem um pino GPIO1 (o pino Tx) e um pino GPIO3 (o pino Rx).i usará esses pinos da seguinte maneira

  • GPIO0 -> pino SDA da porta I2C
  • GPIO1 -> DHT11
  • GPIO2-> pino SCL da porta I2C
  • GPIO3-> OneWire Bus

Como meus módulos I2C já têm resistores pull up, não adicionarei nenhum resistor pullup I2C lá. O DS18B20 ainda precisa de um resistor pull up para o qual usei um 4k7, mas realmente não é tão crítico, um 10k também é bom. Supostamente, o DHT11 também precisa de um resistor pull-up, mas descobri que ele também funcionava sem ele. adicionar um resistor 4k7 não alterou nenhuma das leituras, então eu o deixei de fora. Muitos dos módulos DHT11 de 3 pinos, já têm um 10K soldado no módulo. Acabei de perceber que não desenhei as conexões para o OLED. Isso porque eu o conectei apenas para uma verificação rápida, mas se você quiser adicioná-lo, é apenas uma questão de conectar SDA a SDA e SCL a SCL … e, claro, os pinos de aterramento e Vcc em suas contrapartes

Etapa 2: o programa

O programa é bastante simples. Primeiro, ele configura as bibliotecas e os sensores. Ele conecta o DHT11 ao pino 1 (Tx) e o barramento OnWire do DS18B20 ao pino 3 (Rx). Para usar mais de 1 sensor DS18B20 no barramento OneWire, você precisa saber seu 'endereço exclusivo'. Se você não tiver isso, precisará de um programa para ler esses endereços. Faça isso em um arduino para facilitar. No programa, você ainda precisa fornecer suas credenciais WiFi, bem como a API de gravação para seu canal Thingspeak

/*

Campo 1 temp poleiro (DHT11) Campo 2 poleiro de umidade (DHT11) campo 3 Temperatura Coop (DS18B20) campo 4 temperatura do solo (DS18B20) campo 5 Pressão de ar (bmp180) campo 6 Temperatura externa (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 * password = "YourPassword"; const char * host = "api.thingspeak.com"; const char * writeAPIKey = "W367812985"; // use SEU writeApi // DHT11 stuff float temperature_buiten; float temperature_buiten2; DHT dht (DHTPIN, DHTTYPE, 15); // DS18b20 stuff OneWire oneWire (ONE_WIRE_BUS); // instância oneWire para se comunicar com quaisquer dispositivos OneWire Sensores DallasTemperature (& oneWire); // Passe o endereço de nossa instância oneWire para a temperatura Dallas. DeviceAddress Probe01 = {0x28, 0x0F, 0x2A, 0x28, 0x00, 0x00, 0x80, 0x9F}; DeviceAddress Probe02 = {0x28, 0x10, 0xA4, 0x57, 0x04, 0x00, 0x00, 0xA9}; // bmp180 stuff Adafruit_BMP085 bmp; void setup () {// I2C stuff Wire.pins (0, 2); Wire.begin (0, 2); // Inicializar sensores // dht 11 stuff dht.begin (); // ds18b20 stuff sensores.begin (); // ds18b20 // define a resolução para 10 bits (pode ser de 9 a 12 bits. menor é mais rápido) sensores.setResolution (Probe01, 10); sensores.setResolution (Probe02, 10); // bmp180 stuff if (! bmp.begin ()) {// Serial.println ("No BMP180 / BMP085"); // while (1) {}} // material OLED display.init (); display.flipScreenVertically (); display.setFont (ArialMT_Plain_10); atraso (1000); // Conectar à rede WiFi WiFi.begin (ssid, senha); while (WiFi.status ()! = WL_CONNECTED) {delay (500); }} void loop () {// ds18b20stuff ------------------- sensores.requestTemperatures (); // Envie o comando para obter as temperaturas temperature_buiten = sensores.getTempC (Probe01); // temperature_buiten2 = sensores.getTempC (Probe02); // // dht11 stuff ---------------- ---- umidade flutuante = dht.readHumidity (); temperatura flutuante = dht.readTemperature (); if (isnan (umidade) || isnan (temperatura)) {return; } // coisas bmp ------------------------- String t = String (bmp.readTemperature ()); String p = String (bmp.readPressure ()); // Coisas OLED -------------------------- display.clear (); display.drawString (0, 10, p); // pressão bmp display.drawString (0, 24, String (temperature_buiten)); // ds18b20 display.drawString (0, 38, String (umidade)); // display dht11.exibição(); // faz conexões TCP WiFiClient client; const int httpPort = 80; if (! client.connect (host, httpPort)) {return; } String url = "/ update? Key ="; url + = writeAPIKey; url + = "& field1 ="; url + = String (temperatura); // roost (DHT1) url + = "& field2 ="; url + = String (umidade); // roost (DHT11) url + = "& field3 ="; url + = String (temperature_buiten); // temperatura de coop (DS18B20 nr 1) url + = "& field4 ="; url + = String (temperatura_buiten2); // temperatura do solo (DS18B29 nr 2) url + = "& field5 ="; url + = String (bmp.readTemperature ()); Temperatura externa (BMP180) url + = "& field6 ="; url + = String (bmp.readPressure ()); // Airpressure (BMP180) url + = "\ r / n"; // Envie a solicitação para o servidor client.print (String ("GET") + url + "HTTP / 1.1 / r / n" + "Host:" + host + "\ r / n" + "Conexão: fechar / r / n / r / n "); atraso (1000); }

……..

Etapa 3: mais

Atualmente este programa só monitora, mas o que é que impede você de adicionar um sensor de luz BH1750 I2C para medir se é noite ou de manhã ou um RTC para saber a hora do dia e abrir e fechar a porta da gaiola automaticamente com auxílio de uma placa de expansão I / O I2C PCF8574, ou como já está no jardim, adicione um conversor AD PCF8591 ou ADS1115 para medir a umidade do solo e ative uma bomba quando necessário. Ou talvez ligar o aquecedor do tanque de água quando a temperatura cair abaixo de zero; se houver um chip I2 C para ele, o ESP8266 provavelmente poderá usá-lo.

Porém, uma observação importante: o programa como está funciona bem, mas se você adicionar outros sensores a Rx ou Tx, especialmente se você transformá-los em saídas, os pinos podem repentinamente lembrar que não são realmente pinos GPIO. É melhor dizer aos pinos desde o início que eles agora são pinos GPIO. Isso é feito colocando as seguintes instruções na configuração:

pinMode (1, FUNCTION_3);

pinMode (3, FUNCTION_3);

Recomendado: