1. Главная страница » Компьютеры

Esp8266 esp 01 ds18b20

Автор: | 16.12.2019

Предисловие: Содержание данного поста на первый взгляд может не подходить для форума «ARDUINO для автомобиля», но если внимательно посмотреть, я думаю найдется, что то полезное…
1. Введение.
По случаю попали ко мне в руки WIFI модуль ESP8266 (ESP-01) и датчик температуры DS18B20. Задача – построить автономный датчик температуры, данные с которого можно посмотреть на компьютере/планшете. В будущем эти данные должны использоваться для контроля в «умном доме»…
Чип ESP8266 очень подходит для этого, так как обладает небольшими размерами, ценой, а самое главное, что его контроллер может заменить Arduino – он может сам выполнять все необходимые действия.
Вариантов модулей на чипе ESP8266 множество — все о ESP8266 можно прочесть тут — esp8266.ru/ больше чем здесь, я думаю вы на русском языке не найдете.

У меня ESP-01 – у которого только два управляемых выхода – GPIO 0 и GPIO 2:

Что касается датчика температуры DS18B20 – тоже достаточно популярное устройство, а главное он цифровой – значит, выдает готовые значения и работает по протоколу 1-Wire – можно будет использовать библиотеку OneWire. Кроме того специально для температурных датчиков Dallas DS18B20 есть Arduino-библиотека DallasTemperature. milesburton.com/Main_Page…mperature_Control_Library

Что касается построения такого WIFI датчика температуры – устройство ни уникальное – в интернете есть описания подобных схем на тех же компонентах, но программируются на языке Lua – вариант geektimes.ru/post/255594/. Но судя по описанию – там тоже все не просто так. Да и не хотелось «учить» еще один язык…
Я к Arduino уже как то привык.
Поэтому решено искать варианты Arduino скетчей. Тем более что и тут есть наработки:
— датчик температуры для проекта «Народный мониторинг» —
arduinolab.pw/index.php/2…o-monitoringa-na-esp8266/ — его я тоже попробовал.
А вот тут от того же автора скетч который позволяет выводить параметры температуры через браузер – именно его я использовал. vk.com/doc148062645_43703…630&dl=4f5f570366aac0e93a
Но оказалось, что бы его загрузить предстоит кое-что сделать.

2. Нужно:
1. Модуль ESP8266 (ESP-01);
2. Датчик температуры DS18B20;
3. USB-UART-TTL адаптер – например CР2102 (+драйвер);
4. Резистор 4,7 кОм;
5. Провода мама – мама/папа;
6. Изолента/термоусадка;

3. Настройка ADRUINO IDE для работы с WIFI ESP8266.
Для того, что бы загружать скетчи через ADRUINO IDE непосредственно на модуль ESP8266 необходимо провести апгрейд ADRUINO IDE – загрузить в него программу «ESP8266» для поддержки модуля (см. ссылку github.com/esp8266/arduino).
Как сказано на одном из сайтов:
«Программа ESP8266 поставляется с библиотеками, которые позволяют через интерфейс WiFi с помощью протоколов IP, TCP, UDP обмениваться данными с WEB, SSDP, mDNS и DNS серверами, использовать flash память для создания файловой системы, обеспечить работу с SD картами, сервоприводами, работать с периферийными устройствами по шинам SPI и I2C.»

Для этого нужно:
1. Зайти в меню «Файл» — выбрать «Настройки».

2. В ячейку "Дополнительные ссылки для Менеджера плат" внести ссылку arduino.esp8266.com/stabl…age_esp8266com_index.json

3. Зайти в меню «Инструменты» в «Плата:…» — выбрать «Менеджер плат…».

4. В закладке «Менеджер плат» нужно найти нужную прошивку — в поле указать например esp8266 – в окне высветится нужная прошивка.

5. Установить выбранную прошивку «esp8266» – щелкнуть на поле с прошивкой – появится кнопка «Установить» — нажать. Установка займет некоторое время – будет скачивать около 153 Мб.
6. После завершения установки в меню «Инструменты» в закладке «Плата:…» ниже перечня плат Arduino появится новые платы – «ESP8266 Modules».

7. Выбрать нужный модуль – в общем случае это «Generic ESP8266 Module».

4. Подключение ESP8266 к компьютеру для перепрошивки.
Как правильно подключить модуль много и хорошо написано – например тут:
esp8266.ru/esp8266-podklu…bnovlenie-proshivki/#full
Я для подключения ESP8266 к компьютеру для перепрошивки использовал USB-UART-TTL адаптер CР2102.

Схема подключения обычная да UART, за исключением двух особенностей:
1. Для включения модуля нужно подать +3,3В на вывод модуля CH_PD. Я припаял перемычку с VCC.
2. На время загрузки скетча необходимо подать «минус» на вывод модуля GPIO 0.

Если речь идет о настройке/отладки нескольких модулей имеет смысл сделать специальный комплект проводов для подключения.

Так же есть особенность с питанием модуля.
Во первых, он должен питаться от 3,3 В.
Во вторых, он очень прожорливый – мощности питания от USB-UART-TTL адаптера ему не хватало – компьютер постоянно сообщал, что к нему «подключено неизвестное устройство, при установке которого возникли проблемы».

Поэтому для питания модуля нужно организовать отдельное питание.
Если предполагается использовать более высокое напряжение — нужно использовать понижающий стабилизатор.
В моем случае я использовал две батареи АА 1,5В соединенные последовательно – но испытания показали хватает не на долго (возможно батареи были севшие).
ВНИМАНИЕ! При подключении внешнего источника питания при прошивке нужно соединить его с минусом USB-UART-TTL адаптера.

5. Загрузка скетча.
Если все сделали – можно начинать загрузку скетча:
vk.com/doc148062645_43703…630&dl=4f5f570366aac0e93a
Но для начала нужно в строчках с именем сети и пароля указать имя и пароль вашей сети:
const char *ss ;
const char *password = "…";
Процесс загрузки визуально отличается от привычной загрузки – он будет сопровождаться рядом точек в окне статуса загрузки (см. фото).

Если этого не происходит и появилось сообщение об ошибке – включите и выключите питание модуля WIFI.
Если загрузка прошла успешно, уберите перемычку с GPIO 0 и «массы».
Откройте Serial порт в Arduino IDE и убедитесь, что модуль начал работать и самое важно – запишите IP адрес вашего модуля:
Connected to «Название вашей сети»
IP address: 192.168.ХХ.ХХ
MDNS responder started
HTTP server started Теперь можно отключать USB-UART-TTL адаптер и подключать датчик температуры.

6. Подключение датчика температуры.
Схема подключения датчика температуры типовая (см. рисунок).

Потребуется правда поработать паяльником – припаять сопротивление 4,7 кОм и датчик температуры, а так же перемычку включения питания (см. ранее).

Есть еще один вывод который может пригодится — вывод RST – «Сброс» — для этого нужно подать на него «минус». Пару раз пригодилась эта «кнопка» — возможно потому, что схема собрана на весу…

7. Работа датчика.
Если все прошло правильно датчик начнет помаргивать синим светодиодом и излучать в WIFI эфир температуру. А вот что бы эта температура стала «видима» нужно в браузере указать IP адрес вашего модуля (мы его знаем из пункта 5) и на экране появится вот такая картинка:

Черновик

Содержание

Эта статья рассказывает о том, как создать автономный веб-сервер на базе чипа ESP8266( ), который получает данные от температурного датчика DS18B20( ), а затем выводит их на экран.

Необходимые компоненты

  • Один плата ESP8266( )(NodeMcu v3 ESP8266( ));
  • Один температурный датчикDS18B20( );
  • Один резистор на 4,7 кОм;
  • Одна макетная плата( );
  • Провода перемычки( );

Справочная информация

Температурный датчик DS18B20

Температурный датчик DS18B20( ) – это цифровой датчик, коммуницирующий через шину 1-Wire. Это значит, что для чтения данных с этого датчика понадобится очень простая цепь. Кроме того, он коммуницирует через общую шину, и это значит, что вы можете подключить друг к другу несколько устройств и считывать их данные с помощью лишь одного цифрового контакта ESP8266( ).

Как можно видеть на фото ниже, у датчика DS18B20( ) всего три контакта:

Кроме того, DS18B20( ) продается и в влагозащищенной версии.

Функции

Главные функции температурного датчика DS18B20( ):

  • Коммуницирует через шину 1-Wire;
  • Диапазон измеряемой температуры: между -55˚C и 125˚C;
  • Точность: +/-0.5˚C (в диапазоне между -10˚C и 85˚C);

Установка библиотек

Для этого проекта нам понадобятся библиотеки «OneWire» и «DallasTemperature».

Чтобы установить библиотеку «OneWire», проделайте следующее:

  1. Кликните тут, чтобы скачать архив с библиотекой. В результате в папке «Загрузки» на вашем компьютере должен появиться соответствующий ZIP-файл.
  2. Распакуйте этот архив. В результате у вас должна появиться папка «OneWire-master».
  3. Переименуйте ее на «OneWire».
  4. Переместите переименованную папку в папку «libraries» IDE Arduino.
  5. Перезапустите IDE Arduino.

Чтобы установить библиотеку «DallasTemperature», проделайте следующее:

  1. Кликните тут, чтобы скачать архив с библиотекой. В результате в папке «Загрузки» на вашем компьютере должен появиться соответствующий ZIP-файл.
  2. Распакуйте этот архив. В результате у вас должна появиться папка «Arduino-Temperature-Control-Library-master».
  3. Переименуйте ее на «DallasTemperature».
  4. Переместите переименованную папку в папку «libraries» >Загрузка кода на ESP8266

Для начала убедитесь, что в IDE Arduino установлен аддон для чипа ESP8266. О том, как установить его, можно почитать тут.

Далее кликаем в IDE Arduino на Плата > Инструменты > Generic ESP8266 Module (Board > Tools > Generic ESP8266 Module). Вместо «Generic ESP8266 Module» также может быть вариант «ESP-12E».

Скопируйте код, показанный ниже, в IDE Arduino. Замените SSID и пароль на те, что соответствуют вашей сети. Отредактировав скетч, загрузите его на ESP8266 (если загрузить не получается, поищите решение проблемы в этой статье).


Artwork by Павел Бондаренко

ESP8266 может работать в двух режимах: в режиме интерпретатора AT-команд или в режиме самостоятельного микроконтроллера с wifi модулем. Работу ESP8266 в режиме интерпретатора AT-команд я рассматривал в предыдущей статье, эта же статья рассматривает работу ESP8266 в качестве самостоятельного микроконтроллера.

Способов программирования ESP8266 опять же два, первый — это программирование с помощью ESP8266 фреймворка для Arduino IDE, второй — это программирование через esp-open-sdk. В первом случае мы можем использовать готовые библиотеки Arduino, во втором случае вы можем положиться только на функционал SDK и свой собственный код.

В этой статье мне хотелось бы рассмотреть программирование ESP8266 с помощью ESP8266 фреймворка для Arduino IDE. Данная тема решает широкий спектр задач обеспечения радиоканалом разного рода датчиков и простых устройств управления нагрузкой.

В качестве примера в статье рассматривается пошаговое написание прошивки для температурного логера на датчиках DHT11 и DS18B20. Первый датчик используется для определения комнатной температуры и влажности, второй используется для определения уличной температуры. Я статье используется плата ModeMCU ESP8266, т.к. там есть автозагузка прошивки, но в принципе может быть использована любая другая плата на модуле ESP12E/ESP12F. Данные модули оснащены флеш-памятью на 4 мегабайта, что позволяет забыть о жёсткой оптимизации размера прошивки, когда борьба идёт за каждый байт.

При работе с ESP8266 есть выбор для использования его совместно с "облаками", собственным внешним сайтом, собственном сервером расположенным в интросети или автономной работой ESP826, когда веб-сервер запускается на самом ESP8266.

В данном проекте используется веб-сервер uhttpd на роутере с прошивкой OpenWRT. ESP8266 передаёт на него показания датчиков, а роутер их сохраняет и виде обычных файлов, и делает их доступными для просмотра через web-интерфейс. Можно дать новую жизнь старому смартфону или планшету настроив их на отображение таких web-страниц. Web-интерфейс универсален и может отображаться на любых браузерах любых устройств.

    Ссылки на полезные ресурсы и документацию:

  1. ESP8266 фреймворк для Arduino IDE
  2. Документация на библиотеку ESP8266WIFI
  3. Документация на Arduino библиотеку WiFi library

I. Начало работы с ESP8266 фреймворком для Arduino IDE

II. Работа с библиотекой ESP8266WIFI

1) Установка ESP8266 фреймворка для Arduino IDE

Домашняя страница ESP8266 фреймворка для Arduino IDE расположена на гитхабе: https://github.com/esp8266/Arduino. Там имеется небольшая инструкция по устаноке фреймворка:

Установка через менеджер плат Arduino
Начиная с версии 1.6.4, Arduino >http://arduino.esp8266.com/stable/package_esp8266com_index.json . Вы можете указывать несколько адресов разделяя их запятыми.

  • Откройте менеджер плат через: меню-> инструменты -> платы -> менеджер плат и установите платформу esp8266 (не забудьте выбрать версию вашей ESP8266-платы поле установки).
  • Действуя в соответствии с этой инструкцией, прописываем в настройках Arduino IDE адрес репозитория "http://arduino.esp8266.com/stable/package_esp8266com_index.json":

    В менеджере плат устанавливаем пакет поддержки плат esp8266:

    После установки пакета поддержки esp8266, выставляем в настройках свою плату, в моем случае это nodemcu на модуле esp12e, а настройки платы можно оставить по умолчанию:

    Теперь подключаем плату NodeMCU к компьютеру, выбираем последовательный порт в Arduino IDE, находим в примерах для ESP8266 тестовый скетч "Blink", компилируем, загружаем и наслаждаемся ровным миганием синего светодиода:

    Прошивка занимает почти четверь мегабайта, а процесс прошивки занимает примерно секунд двадцать. Если вы не горите желанием написать свою реализацию TCP/IP стека, то стоит принять это как данность.

    Значение константы LED_BUILTIN определенно в файле

    Т.е. LED_BUILTIN это GPIO_16. Если мы хотим помигать светодиодом который установлен на модуле ESP12E, то приведем скетч к следующему виду:

    2) Подключение датчика DHT11 к ESP8266

    Теперь нам нужно подключить к ESP8266 несколько сенсоров чтобы впоследствии передавать данные с них через WiFi.

    Для начала возьмём популярной датчик температуры и влажности DHT11. Его подключение будет выглядеть так:

    Датчик имеет три рабочих пина: первый пин — питание; второй пин — вывод данных, его следует подтягивать к питанию; третий пин никуда не подключается ; четвертый пин — это земля. Для подтяжки второго пина к питанию я использовал резистор на 4.7К, но т.к. датчик не скоростной, то должны сгодиться резисторы и на 10К или даже на 47К. Датчик может питаться от 3.3 Вольт, что нас вполне устраивает.

    В качестве библиотеки возьмём библиотеку от Adafruit https://github.com/adafruit/DHT-sensor-library, т.к. она универсальна и поддерживает датчики DH11, DHT22(AM2302, AM2321) и DHT21(AM2301). Правда для своей работы она требует ещё одну библиотеку: https://github.com/adafruit/Adafruit_Sensor, её тоже надо будет установить.

    После установки библиотек и подключения датчика DHT11 к ESP8266, загрузим в Arduino IDE тестовый скетч:

    Если всё было сделано правильно, то после компиляции и загрузки прошивки, в мониторе последовательного порта можно будет наблюдать показания датчика:

    3) Подключение датчика DS18B20 к ESP8266

    Вторым датчиком который мы подключим ESP8266, будет DS18B20. Схема его подключения к NodeMCU ESP8266 показана ниже:

    Здесь, так же как и в случае с DHT11, Data pin подтягивается к шине питания через резистор номиналом 4.7КОм.

    Для работы с датчиком DS18B20 будем использовать библиотеку OneWire: https://github.com/PaulStoffregen/OneWire/. Эта библиотека как же поддерживает несколько моделей датчиков Dallas Semiconductor, что нам только на руку.

    Подключаем датчик к плате NodeMCU, скачиваем библиотеку "OneWire" и открываем пример DS18x20_Temperature.

    В примере правим строку:

    также можно еще скорость UART поднять до значения 115200

    Если все было сделано правильно, то после компиляции примера и загрузки прошивки в микроконтроллер, мы получим следующий лог работы в мониторе последовательного порта:

    4) Установка WiFi соединения

    Теперь, когда у нас есть данные, которые нужно куда-то передавать, самое время разобраться с библиотекой ESP8266WIFI, с помощью которой мы будем это делать.

    Библиотека ESP8266WIFI имеет схожий API c библиотекой Arduino WIFI.

      Различия заключаются в следующем (взято из http://esp8266.github.io/Arduino/versions/2.1.0-rc1/doc/libraries.html):

    • Добавлен метод WiFi.mode(m), который устанавливает режим работы WiFi. Здесь m — может принимать значения: WIFI_AP, WIFI_STA, WIFI_AP_STA или WIFI_OFF.
    • Добавлен метод WiFi.softAP(ssid), который переключает WiFi к режим открытой точки доступа.
    • Добавлен метод WiFi.softAP(ssid, password), который переключает WiFi к режим закрытой точки доступа с защитой WPA2-PSK, где ключ/password должен быть не менее восьми символов.
    • WiFi.macAddress(mac) возвращает MAC-адрес в случае режима STA, WiFi.softAPmacAddress(mac) тоже самое в случае режима AP.
    • WiFi.localIP() возвращает локальный IP-адрес в случае режима STA, WiFi.softAPIP() тоже самое в случае режима AP.
    • WiFi.printDiag(Serial) печать через UART диагностической информации.
    • Класс WiFiUDP реализует отправку и приём широковещательных multicast пакетов в STA режиме. При отправке пакетов, метод udp.beginPacket(addr, port)заменяется на udp.beginPacketMulticast(addr, port, WiFi.localIP()). class supports sending and receiving multicast packets on STA interface. При приёме пакетов, udp.beginPacket(addr, port) заменяется на udp.beginMulticast(WiFi.localIP(), multicast_ip_addr, port). Вы можете использовать udp.destinationIP() для задания multicast или unicast адреса.

    Опираясь на эту информацию, начинаем писать код.

    В составе библиотеки ESP8266WIFI имеется 17 примеров, среди которых имеется пример для сканирования доступных точек доступа: WIFIScan. Я переписал его на свой манер:

    Результат работы программы выглядит так:

    Действие программы соответствует AT-команде CWLAP, её можно свернуть в функцию с названием, скажем list_wifi(). На базе этой функции можно написать другую, которая будет искать определенную точку доступа. Можно ее будет также наделить полезным свойством, возвращать в случае обнаружения заданной точки доступа уровень ее сигнала rssi. Т.о. получим функцию двойного назначения get_rssi():

    Дело осталось за малым, установить соединение с точной доступа. У меня это получилось так:

    5) Использование режима энергосбережения DeepSleep

    Теперь вместо задержки на функции delay() будем посылать ESP8266 в режим энергосбережения. Для этого нам нужно будет соединить выводы D0 и RST:

    После этого, заменим в главном цикле стоку delay(5000) на ESP.deepSleep(3e7), которая отправит в ESP8266 в режим энергосбережения. Параметр "3e7" означает 3*10^7 микросекунд, т.е. тридцать секунд.

    Лог работы программы будет выглядеть теперь так:

    Здесь непечатные символы, это отладочное сообщение при выходе ESP8266 из режима энергосбережения.

    Для более корректной работы, мы можем поменять алгоритм таким образом: 1)пусть в начале главного цикла сначала устанавливается WiFi соединение, 2) потом путь передаются данные, 3) после этого WiFi соединение разрывается, и ESP8266 уходит в режим энергосбережения.

    6) Класс WiFiClient, получение web-страницы от сервера на OpenWRT и отправка данных через GET запрос

    Теперь нужно научиться скачивать что-либо с web-сервера. Так же как и в предыдущей статье , в качестве web-сервера я использовал uhttpd-сервер установленный на роутере с прошивкой OpenWRT.

    Класс WiFiCliet реализует установку TCP соединения с сервером. Демонстрационный пример его использования можно найти здесь: Client — ESP8266 Arduino Core 2.4.0 documentation. Я адаптировал этот пример под свой случай, и в итоге получилось так:

    Результат работы программы выглядит так:

    Для контроля можно взглянуть на дамп соединения в Wireshark:

    Как видно, соединение осуществляется без ошибок. Красная строчка показывает закрытие соединения клиентом, с помощью вызова WiFi.disconnect().

    Теперь аналогично предыдущей статье: Отправка данных от ESP8266 на web-сервер OpenWRT через GET запрос, мы можем отправлять на веб-сервер свои данные через GET-запрос.

    Изменим в программе строку:

    После чего заново компилируем и перепрошиваем esp8266. Смотрим на результат работы программы:

    Как видно, данные успешно уходят на сервер.

    7) Отправка на web-сервер данных с датчика DHT11 через GET запрос

    Теперь нам нужно добавить к получению данных с датчика DHT11, отправку их на web-сервер через GET-запрос, как это делалось в предыдущей статье: Отправка данных от ESP8266 на web-сервер OpenWRT через GET запрос.

    Программа в данном случае получается такой:

    Для приёма данных, на стороне сервера нужно будет добавить cgi скрипт sensors.cgi следующего содержания:

    Данный скрипт записывает полученные показания датчиков в файлы вида: ‘/site/sensors/"дата"/log.txt’. Файлы автоматически разбиваются по дням. Формат файлов выглядит так:

    8) Добавление датчика DS18B20

    Теперь нужно добавить опрос датчика DS18B20, и передачу его данных на web-сервер. Для этого я добавил в программу код из примера "DS18x20_Temperature" библиотеки OneWire. Этот пример поддерживает датчики: DS18S20, DS18B20, DS1822. Я не стал его упрощать затачивая конкретно под свой DS18B20, а оставил как есть:

    Также немного придётся поправить cgi скрипт для приёма и записи показаний датчика DS18B20:

    Теперь показания датчиков выглядят следующим образом:

    Здесь ds18b20 снимает показания по одну сторону окна, а dht11 — по другую.

    9) Вывод показаний датчиков через веб-интерфейс

    Теперь нам нужно реализовать вывод данных через веб-интерфейс. Для этого напишем два CGI скрипта. Первый будет выводить лог измерений за текущие сутки, а второй будет выводить текущие значения. К сожалению я не обнаружил в uhttpd сервере поддержки SSI, поэтому генерацию html кода пришлось полностью реализовывать через шелл-скрипы.

    GCI скрипт для вывода лога измерений получился таким:

    Он довольно простой. Второй скрипт будет поинтереснее:

    По желанию еще можно добавить JavaScript для автоматического обновления содержимого страницы.

    Результат работы последнего скрипта на экране мобильника выглядит так:

    В заключение хочу ещё добавить, что нужно внимательно отнестись к установке датчика уличной температуры. Он должен быть защищён от ветра и прямого солнечного света. Также он не должен напрямую соприкасаться со стеной или окном жилого дома. По моим наблюдениям, расстояние в 10см от стены дома достаточно для корректных показаний.

    10) Второй WiFi термометр на датчике AM2320 (добавлено 26.05.19г)

    Спустя полгода после изготовления термометра, должен сказать, что он получился довольно удачным. Это очень удобно, проснувшись утром взять смартфон, и тут же посмотреть какая температура сегодня за окном. Не нужно подходить к замороженому окну и пытаться разглядеть что-то за замороженым окном в темноте.

    Теперь же, с приближением лета, возникла необходимость в изготовлении второго термометра. Для чего вам может понадобиться второй уличный термометр? Если у вас окна выходят на север, то вы можете не волноваться за результаты показаний термометра, он скорее-всего будет всегда казать температуру приближенную к реальной. Если же у вас все окна выходят на юг, то даже если вы будете как-то пытаться экранировать сенсор, солнце все равно будет засвечивать его, и показания "поплывут". Если же у вас, как и у меня окна, выходят на восток и запад, то большую часть года вполне можно обойтись термометром на восточном окне. Однако летом, как только встает солнце мой спрятанный под карнизом DS18B20 начинает показывать температуру кипения хлорного ангидрида, что для земной атмосферы несколько ненормально.

    К счастью, имеется второе окно на западной стороне на которое можно повесить дополнительный WiFi-термометр. Делать еще один термометр на DS18B20 мне было не интересно, поэтому был куплен датчик AM2320 который кроме температуры еще измеряет и относительную влажность воздуха. Согласно даташиту на датчик: "Digital Temperature and Humidity Sensor AM2320 Product Manual", диапазон измеряемой температуры датчика от -40℃ до +80 ℃, с погрешностью в полградуса. Влажность же он измеряет во всем диапазоне с погрешностью +/- 3 %RH. Датчик может питаться от 3 и 5 Вольт, и может работать на I 2 C протоколе или однопроводному протоколу, наподобие DHT11(не путать с 1-wire).

    Я буду использовать I 2 C интерфейс, на ESP12E/ESP12F он расположен на GPIO4 (SDA) и GPIO5 (SCL). На NodeMCU это соответственно выводы D2 и D1:

    Подключается датчик к NodeMCU таким образом:

    Подтягивающие резисторы на линии SDA и SDL ставить не надо, они есть в самом датчике. Так же как и в случае с DHT11, для работы с датчиком нам понадобится библиотека https://github.com/adafruit/Adafruit_Sensor. Кроме этого, понадобится библиотека непосредствено работающая с AM2320 https://github.com/adafruit/Adafruit_AM2320. Последняя содержит скетч для проверки работы датчика:

    После компиляции скетча и прошивки NodeMCU, в окне терминала мы должны увидеть лог работы:

    Остальное — дело техники. Действуя по аналогии с датчиком DHT11, напишем скетч с соединением с точкой доступа, и уходом в спящий режим:

    В терминале должен пойти лог такого вида:

    Теперь на роутере напишем CGI-скрипт "/site/cgi-bin/am2320.cgi" для приема и сохранения результатов измерений датчика:

    Осталось привести скетч ESP8266 к окончательному рабочему виду:

    Для отображения данных с двух датчиков, скрипт temperature.cgi нужно будет привести, например, к такому виду:

    Выглядит гадко, но это работает. Итоговый результат на экране смартфона:

    В заключение хочу немного сказать об автономном режиме работы ESP8266, т.е. режиме работы от аккумулятора. Мне пока удалось добиться беспрерывной работы всего лишь двое суток. НО. У меня довольно "слабый" аккумулятор. Это одна батарея 18650, сама обычная с али. Ее фактическая емкость где-то 500 или 600 мА. Далее у меня не самая эффективная цепь питания. C батареи питание идет на повышающий до 6 Вольт DC-DC преобразователь. Затем питание проходит через понижающий до 3.3 Вольт линейный преобразователь ams1117-3.3. В итоге, я пока имею только двое суток автономной работы. Work in progress, как говорится.

    Читайте также:  1More triple driver in ear headphones

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *