Оглавление:

Использование 4 контактов ESP8266-01: 3 шага
Использование 4 контактов ESP8266-01: 3 шага

Видео: Использование 4 контактов ESP8266-01: 3 шага

Видео: Использование 4 контактов ESP8266-01: 3 шага
Видео: Программирование МК ESP8266 Урок 4 Прошиваем ESP 01 2024, Ноябрь
Anonim
Использование 4 контактов ESP8266-01
Использование 4 контактов ESP8266-01
Использование 4 контактов ESP8266-01
Использование 4 контактов ESP8266-01
Использование 4 контактов ESP8266-01
Использование 4 контактов ESP8266-01

Примечание: этот проект в основном является расширением более ранней инструкции, в которой использовалось только 2 контакта. Ограниченное количество (4) контактов GPIO на ESP8266-01 может показаться препятствием для любого серьезного приложения. В некоторых моих недавних инструкциях я показал использование DHT11, DS18B20, OLED, RTC и BMP180 с ESP8266-01. В этом руководстве я решил использовать 4 датчика и дисплей, а также загрузить полученные данные в Thingspeak. На самом деле это расширяет проект по мониторингу атмосферы в моем курятнике и вокруг него. Да, вы могли бы назвать это метеостанцией, но это просто для иллюстрации использования 4 контактов, вы можете легко сделать что-то еще таким образом Я буду использовать 2 контакта для I2C (BMP180 и OLED) 1 контакт для 2 датчиков DS18B20 через Протокол OneWire 1 контакт для DHT11 Хотя ESP8266-01 теперь имеет все свои контакты, я все еще могу добавить дополнительные датчики (или исполнительные механизмы) через протокол OneWire и / или через протокол I2C. Итак, что нам нужно: спецификация

  • ESP8266-01
  • 2x DS18B20
  • 1x DHT11
  • 1x BMP180
  • OLED (необязательно)

и, конечно, макетная плата, блок питания на 3,3 В, несколько макетных проводов и счетчик Thingspeak.

Несколько замечаний по поводу спецификации:

  • ESP8266-01 Очевидно, что в проекте используется ограниченное количество контактов ESP8266-01, но если вам все же нужно его купить, вы можете рассмотреть ESP8266-12 с большим количеством контактов.
  • DHT11A дешевый универсальный датчик влажности и температуры. Это не очень точно, но подойдет. Если вам все еще нужно его купить, вы можете выбрать DHT22, который предположительно более точен, но вы также можете выбрать AMS2321. Это своего рода DHT22, который подходит для I2C, освобождая тем самым еще один вывод.
  • BMP180 измеряет температуру и давление воздуха. Это преемник BMP085, но теперь и сам он имеет несколько поставщиков. Существует (более дешевый) BMP280, но вы также можете выбрать BME280, который измеряет температуру, давление И влажность. Таким образом можно сэкономить на датчике DHT / AMS.
  • OLEDI просто использовал это, чтобы я мог быстро увидеть, считываются ли датчики, но вы также можете проверить это на Thingspeak. В любом случае OLED слишком мал, чтобы печатать все считанные значения

Шаг 1: Схема

Схема
Схема

4 контакта ESP8266 не обозначены как таковые на печатной плате, и на большинстве изображений четко указаны только GPIO0 и GPIO2. Однако ESP826-01 имеет вывод GPIO1 (вывод Tx) и вывод GPIO3 (вывод Rx).i будет использовать эти булавки следующим образом

  • GPIO0 -> вывод SDA порта I2C
  • GPIO1 -> DHT11
  • GPIO2-> SCL-контакт порта I2C
  • GPIO3-> шина OneWire

Поскольку в моих модулях I2C уже есть подтягивающие резисторы, я не буду добавлять туда подтягивающие резисторы I2C. DS18B20 все еще нуждается в подтягивающем резисторе, для которого я использовал 4k7, но это действительно не так критично, 10k тоже хорошо. Предположительно, DHT11 также нуждается в подтягивающем резисторе, но я обнаружил, что он работает и без него. добавление резистора 4k7 не повлияло ни на одно из показаний, поэтому я его не упомянул. Многие из 3-контактных модулей DHT11 уже имеют припаянные на модуль 10 кОм. Я только что понял, что я не рисовал соединения для OLED. Это потому, что я подключил его только для быстрой проверки, но если вы захотите добавить его, это просто вопрос подключения SDA к SDA и SCL к SCL … и, конечно, выводы земли и Vcc к их аналогам

Шаг 2: Программа

Программа довольно простая. Сначала он настраивает библиотеки и датчики. Он подключает DHT11 к контакту 1 (Tx), а шину OnWire для DS18B20 - к контакту 3 (Rx). Чтобы использовать более 1 датчика DS18B20 на шине OneWire, вам необходимо знать их «уникальный адрес». Если у вас его нет, вам нужна программа для чтения этих адресов. Сделайте это на Arduino для простоты. В программе вам все равно нужно предоставить свои учетные данные WiFi, а также API записи для вашего канала Thingspeak.

/*

Поле 1 temp roost (DHT11) Поле 2 влажность roost (DHT11) поле 3 Температура Coop (DS18B20) поле 4 Температура почвы (DS18B20) поле 5 Давление воздуха (bmp180) поле 6 Наружная температура (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 (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"; // использовать ВАШ writeApi // DHT11 материал float temperature_buiten; float temperature_buiten2; DHT dht (DHTPIN, DHTTYPE, 15); // DS18b20 заполняет OneWire oneWire (ONE_WIRE_BUS); // Экземпляр oneWire для связи с любыми устройствами OneWire Датчики температуры Dallas (& oneWire); // Передаем адрес нашего экземпляра oneWire в Dallas Temperature. DeviceAddress Probe01 = {0x28, 0x0F, 0x2A, 0x28, 0x00, 0x00, 0x80, 0x9F}; DeviceAddress Probe02 = {0x28, 0x10, 0xA4, 0x57, 0x04, 0x00, 0x00, 0xA9}; // bmp180 материал Adafruit_BMP085 bmp; void setup () {// Материал I2C Wire.pins (0, 2); Wire.begin (0, 2); // Инициализируем датчики // dht 11 stuff dht.begin (); // ds18b20 заполняем сенсоры.begin (); // ds18b20 // устанавливаем разрешение на 10 бит (может быть от 9 до 12 бит.. чем меньше, тем быстрее) сенсоры.setResolution (Probe01, 10); sensor.setResolution (Probe02, 10); // материал bmp180 if (! bmp.begin ()) {// Serial.println ("Нет BMP180 / BMP085"); // while (1) {}} // Материал OLED display.init (); display.flipScreenVertical (); display.setFont (ArialMT_Plain_10); задержка (1000); // Подключаемся к сети Wi-Fi WiFi.begin (ssid, пароль); в то время как (WiFi.status ()! = WL_CONNECTED) {задержка (500); }} void loop () {// ds18b20stuff ------------------- sensor.requestTemperatures (); // Отправляем команду для получения температуры temperature_buiten = sizes.getTempC (Probe01); // temperature_buiten2 = sizes.getTempC (Probe02); // // материал dht11 ---------------- ---- влажность с плавающей запятой = dht.readHumidity (); температура поплавка = dht.readTemperature (); if (isnan (влажность) || isnan (температура)) {return; } // bmp материал ------------------------- String t = String (bmp.readTemperature ()); Строка p = Строка (bmp.readPressure ()); // OLED-материалы -------------------------- display.clear (); display.drawString (0, 10, p); // давление BMP display.drawString (0, 24, String (temperature_buiten)); // ds18b20 display.drawString (0, 38, String (влажность)); // отображение dht11.отображать(); // устанавливаем TCP-соединения WiFiClient client; const int httpPort = 80; если (! client.connect (хост, httpPort)) {возврат; } String url = "/ update? Key ="; url + = writeAPIKey; url + = "& field1 ="; url + = String (temperature); // roost (DHT1) url + = "& field2 ="; url + = String (влажность); // дом (DHT11) url + = "& field3 ="; url + = String (temperature_buiten); // температура курятника (DS18B20 nr 1) url + = "& field4 ="; url + = String (temperature_buiten2); // температура почвы (DS18B29 nr 2) url + = "& field5 ="; url + = String (bmp.readTemperature ()); Наружная температура (BMP180) url + = "& field6 ="; url + = String (bmp.readPressure ()); // Давление воздуха (BMP180) url + = "\ r / n"; // Отправляем запрос на сервер client.print (String ("GET") + url + "HTTP / 1.1 / r / n" + "Host:" + host + "\ r / n" + "Connection: close / r / n / r / n "); задержка (1000); }

……..

Шаг 3: Подробнее

В настоящее время эта программа только отслеживает, но что должно помешать вам добавить датчик освещенности BH1750 I2C для измерения, вечер или утро, или RTC, чтобы узнать время дня и автоматически открывать и закрывать дверь курятника с помощью карту расширения ввода / вывода PCF8574 I2C или, поскольку она уже есть в саду, добавьте AD-преобразователь PCF8591 или ADS1115 для измерения влажности почвы и включения насоса при необходимости. Или, может быть, включить водонагреватель при падении температуры ниже нуля, если для этого есть микросхема I2 C, ESP8266, вероятно, сможет ее использовать.

Однако важное замечание: программа работает хорошо, но если вы добавите другие датчики к Rx или Tx, особенно если вы сделаете их выходами, контакты могут внезапно вспомнить, что они на самом деле не являются контактами GPIO. Лучше с самого начала сказать контактам, что они теперь являются контактами GPIO. Для этого нужно ввести следующие операторы в настройку:

pinMode (1, FUNCTION_3);

pinMode (3, FUNCTION_3);

Рекомендуемые: