Логгер данных температуры на NodeMCU ESP8266 с записью данных в документы Google


В настоящее время существует достаточно много облачных хранилищ данных (clouds), в которых можно хранить данные, считываемые от различных датчиков. Примерами подобных хранилищ являются сервисы Thingspeak и Google Firebase, веб-сервисы Amazon (AWS), MQTT серверы, Adafruit IO и т.п.

Внешний вид проекта логгера данных температуры на NodeMCU ESP8266 с записью данных в документы Google

В данном проекте мы в качестве облачного хранилища данных будем использовать документы Google (Google Sheet). С помощью платы NodeMCU ESP8266 мы будем считывать данные температуры и влажности с датчика DHT11 и передавать их в документы Google по сети Интернет.

Ранее на нашем сайте мы рассматривали следующие проекты логгеров данных:

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

  1. NodeMCU ESP8266 (купить на AliExpress).
  2. Датчик температуры и влажности DHT11 (купить на AliExpress).
  3. Соединительные провода.

Схема проекта

Схема логгера данных температуры на NodeMCU ESP8266 представлена на следующем рисунке.

Схема логгера данных температуры на NodeMCU ESP8266

Внешний вид собранной конструкции проекта показан на следующем рисунке.

Внешний вид собранной конструкции проекта

Прежде чем переходить к написанию кода программы нам необходимо получить исходные данные (логин, пароль и т.д.) чтобы наша плата NodeMCU ESP8266 смогла получить доступ к серверу Google для записи наших данных в документы Google.

Создание скрипта в документах Google для записи данных

Выполните следующую последовательность шагов.

1. Зайдите в свой аккаунт Gmail используя имя своей почты и пароль. Создайте себе аккаунт Gmail если у вас его еще нет.

Вход в аккаунт Gmail

2. Нажмите на иконку App в правом верхнем углу экрана, обведенную зеленым кружком на рисунке ниже, и в открывшейся вкладке нажмите на Docs.

Вход в документы Google

3. Появится экран документов Google (Google Docs). Выберите Sheets в сайдбаре слева.

Выбор листа в документах Google

4. Создайте новый лист документа (Blank Sheet).

Создание нового листа в документах Google

5. Лист документа (Blank Sheet) создастся с именем “Untitled Spreadsheet”. Переименуйте его в любое имя, которое вам понравится. Мы переименовали этот лист в “ESP8266_Temp_Logger”. Что перименовать лист документа воспользуйтесь пунктом меню (“File” > “Rename”).

Изменение имени проекта в документах Google

6. Также вы можете добавить в свой документ Google и другие листы, мы в данном проекте использовали только один лист. Поэтому мы переименовали “Sheet1” > “TempSheet” поскольку мы будем загружать в него данные температуры (Temperature).

Изменение имени листа в документах Google

7. После переименования проекта (Spreadsheet Project) и имени листа (Sheet name) можно приступать к созданию Google скрипта.

8. Перейдите в пункт ‘Tools’ (выделенный зеленым эллипсом на рисунке ниже) и затем нажмите на “<> Script Editor” (выделенный красным эллипсом на рисунке ниже).

Переход в инструменты в документах Google

 

9. В результате этого создастся скрипт Google (Google Script) с именем “Untitled project” – вы можете переименовать его на любое другое имя. В нашем случае мы переименовали его в “Untitled project” > “TempLog_Script”.

Изменение имени скрипта в документах Google

10. Скопируйте и вставьте код скрипта Google прикрепленный к этому файлу (GoogleScript.gs). Затем отредактируйте имя листа (Sheet name) и идентификатор листа (Sheet ID) в коде программы. Вы можете получить Sheet ID из Sheet URL (адреса листа) как показано на рисунке ниже – то есть вы можете вырезать его из адреса подобного этому: https://docs.google.com/spreadsheets/d/xxxxxxxxyyyyyyzzzzzzzzzz/edit#gid=0, где “xxxxxxxxyyyyyyzzzzzzzzzz” – это ваш Sheet ID.

Получение идентификатора листа в документах Google

11. Когда вы скопируете и вставите Google Script он будет выглядеть примерно следующим образом:

Вид скрипта в документах Google

12. Сохраните файл. Если вы хотите создать свой собственный лист (sheet), то соответствующим образом измените параметры для доступа к нему: Sheet ID, Sheet Name и Sheet Project Name.

13. На этом мы закончили настройку Google Script в Spreadsheet. Теперь настало время получить главный параметр, а именно Google Script ID (идентификатор скрипта Google), который мы будем использовать в программе для модуля ESP8266. Если вы сделаете ошибку в указании Google Script ID, то тогда ваши данные не смогут записаться в Google Sheet.

Получение Google Script ID

1. Выберите пункт меню ‘Publish’ > ‘Deploy as Web App…’.

Выбор способа публикации скрипта в документах Google

2. В качестве версии проекта (“Project version”) укажите “New”. Выберите ваш “your email id” в поле “Execute the app as”. Выберите “Anyone, even anonymous” (любой, даже анонимный) в поле “Who has access to the app” (кто имеет доступ к приложению). Затем нажмите на “Deploy” (разместить). Учтите, что если вы будете делать повторную публикацию (republishing), то выберите самую последнюю версию и затем нажмите снова на Deploy.

Настройка параметров веб-приложения в документах Google

3. Вы должны предоставить Google права (разрешения) чтобы он разместил ваш проект как веб-приложение (web app). Для этого нажмите на “Review Permissions”.

Редактирование разрешений (полномочий) в документах Google

4. Выберите ваш Email ID (имя вашей почты) с помощью которой вы создавали ваш проект/электронную таблицу (spreadsheet).

Выбор аккаунта в документах Google

5. Нажмите на “Advanced”.

Выбор расширенных настроек веб-приложения в документах Google

6. Затем нажмите на “Go to ‘your_script_name’(unsafe)”. В нашем случае это “TempLog_Script”.

Проверка веб-приложения в документах Google

7. Нажмите на “Allow” (разрешить) – после этого вы получите разрешение на размещение вашего проекта в качестве веб-приложения.

Получение разрешения на публикацию веб-приложения в документах Google

8. После этого вы увидите новый экран со ссылкой в поле “Current web app URL”. Этот URL содержит ваш Google Script ID. Скопируйте этот URL и сохраните его в надежном месте.

Получение Google Script ID в документах Google

9. После того как вы скопируете код, он будет примерно в следующем формате: <https://script.google.com/macros/s/____Your_Google _ScriptID___/exec>.

В нашем случае мы получили наш Google script ID в виде следующей ссылки:

<https://script.google.com/macros/s/AKfycbxy9wAZKoPIpP53AvqYTFFn5kkqK_-avacf2NU_w7ycoEtlkuNt/exec>, то есть наш Google script ID - “AKfycbxy9wAZKoPIpP53AvqYTFFn5kkqK_-avacf2NU_w7ycoEtlkuNt”.

Сохраните этот Google Script в надежном месте.

Объяснение программы для модуля ESP8266

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

В нашем случае датчик DHT11 подключен к ESP8266 NodeMCU, которая подключена к сети Интернет при помощи технологии WiFi. Мы будем считывать данные с датчика DHT11 и передавать их на Google Sheet.

Первым делом в программе нам необходимо подключить используемые библиотеки. В нашем случае библиотека ESP8266WiFi.h используется для осуществления связи по технологии WiFi, а библиотека HTTPSRedirect.h используется для соединения с сервером Google Spreadsheet. Библиотека DebugMacros.h используется для корректировки/отладки (debug) получаемых данных, а библиотека DHT.h – для взаимодействия с датчиком DHT11.

Укажем контакт, к которому подключен датчик DHT11 – в нашем случае это контакт D4. Также зададим тип датчика DHT (DHTTYPE) – в нашем случае мы используем DHT11.

Инициализируем переменные для хранения данных температуры и влажности.

Далее укажем SSID и пароль для доступа к нашей сети WiFi.

Далее укажем параметры доступа к серверу Google – адрес хоста (host address), Google script ID и номер порта (port number). Адрес хоста и номер порта можете оставить такими, какие они введены в нашем коде программы, но вот Google Scripts ID вы должны изменить на свой.

Затем укажем URL адрес листа Google (Google Sheet), в который мы будем записывать наши данные. По сути, это путь, по которому будут записываться наши данные.

Далее укажем адрес листа Google где мы создали этот лист (Google sheet).

Зададим клиент, который мы будем использовать в программе.

Инициализируем последовательную связь для целей отладки со скоростью 115200 бод – вы можете использовать для этого и другие скорости передачи, например, 9600, 57600 и т.д. Также инициализируем датчик DHT11.

Произведем попытку соединения с сетью WiFi и подождем пока соединение будет установлено.

Создадим новое HTTPS соединение. Учтите, что если вы используете HTTPS соединение, то вам перед созданием соединения нужно обязательно использовать команду setInscure(), иначе соединение с сервером не будет установлено.

Произведем соединение с хостом. В нашем случае это "script.google.com".

Произведем попытку соединения 5 раз, если соединение установить не удастся, то на этом прекратим попытки соединиться.

Мы будем взаимодействовать с сервером с помощью функций GET и POST. Функция GET будет использоваться для считывания ячеек (таблицы, листа), а функция POST – для записи в ячейки. Считаем данные ячейки A1 с Google sheet.

Считаем данные температуры и влажности с датчика DHT11 и сохраним их в соответствующих переменных. Если во время считывания данных произошла ошибка, напечатаем сообщение об этом.

Запишем данные по необходимому нам пути. Данные будут записаны в Google Sheet. Путь данных содержит данные температуры и влажности – параметры sheetTemp и sheetHumid.

Если клиент подключен, то просто передадим данные на Google Sheet с использованием функции POST. Если передача данных не удалась, то сохраним их и увеличим счетчик неудачных попыток соединения на 1.

Если передача данных не удалась три раза, то тогда завершаем все процессы и переводим модуль ESP в режим глубокого сна (deepsleep). Более подробно про использование режима глубокого сна в модулях ESP можно прочитать в этой статье.

После каждой передачи и считывания данных мы будем делать задержку не менее 2-х секунд, поскольку это рекомендовано библиотеками DHT и HTTPSRedirect.

Все необходимые для проекта библиотеки вы можете скачать в архиве по этой ссылке.

Исходный код программы (скетча)

Видео, демонстрирующее работу проекта

Источник статьи

(Проголосуй первым!)
Загрузка...
1 071 просмотров

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

Ваш адрес email не будет опубликован.