Логгер данных температуры на 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.

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

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

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

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

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

Комментарии

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

  1. Здравствуйте! Можете подсказать пожалуйста? С кодом в Ардуинке проблем не было, компиляция прошла успешно, однако при работе с гугл таблицей возникли проблемы, значения не отправляются. Вот что пишет монитор порта:
    Start Sending Sensor Data to Google Spreadsheet
    Humidity: 51.90% Temperature: 26.00°C
    Sent : Temp and Humid
    POST or SEND Sensor data to Google Spreadsheet:
    Ошибкаbody {background-color: #fff; margin: 0; padding: 0;}.errorMessage {font-family: Arial,sans-serif; font-size: 12pt; font-weight: bold; line-height: 150%; padding-top: 25px;}TypeError: Cannot read properties of null (reading 'getLastRow') (строка 41, файл Код)
    Как исправить ошибку?

    • А у вас url2 правильно сформирован? Попробуйте его вывести в монитор последовательного порта

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

    • Их можно установить с помощью менеджера библиотек (Library Manager) Arduino IDE, пример есть в этой статье. Если через менеджер библиотек не удается установить какую либо библиотеку, то можно через поиск яндекса найти ее на github, скачать оттуда ее архив и установить ее вручную в папку с библиотеками Ардуино.

      • Спасибо большое за ответ, может вы еще сможете помочь с еще одной проблемой ? Вроде все сделал как в статье, все библиотеки подключил, да и вроде все они работают, все перепроверил, даже в чат гпд загружал - обычно находил ошибки, выдает следующую ошибку: "exit status 1

        Compilation error: '' does not name a type", и выделяет красным эти строчки: WiFi.begin(ssid, password);
        while (WiFi.status() != WL_CONNECTED) {

  3. Всё очень здорово работает в первый раз. Однако при попытке внести изменения в код скрипта, они никак не отражаются на работе web app. Google утверждает, что достаточно просто сохранить изменения в редакторе скриптов и они должны сразу отобразиться в head deployment. Однако этого не происходит. Наверняка вам приходилось редактировать код скрипта. Как вы обновляли его?

    • Нет, честно говоря я не делал этого. А после изменения скрипта вы выполняли ‘Publish’ > ‘Deploy as Web App…’ и давали гуглу необходимые разрешения, указанные в статье? Во время этих операций вы были залогинены в своем аккаунте на Google или нет? Просто именно в отношении этого пункта гугл с каждым годом все более ужесточает правила и с момента написания статьи у него что-нибудь в его правилах могло измениться

    • Дело в том, что когда вы вносите изменения в скрипт приложения и публикуете его заново - у вас меняется Script ID. Вам нужно узнать новый Script ID (Начать развертывание -> управление развертываниями) и вставить его в скетч для микроконтроллера.

      • А какая проблема в том чтобы потом внести изменения в скетч для микроконтроллера? Может, конечно, я уже что то подзабыл потому что эта статья опубликована мною уже достаточно давно.

  4. Схема неправильная!!!

    Там нарисован светодиод с резистором!

    • Да, опечатка вышла. Но схема в данном проекте очень простая, просто подключите датчик DHT11 к контакту D4 модуля ESP8266

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

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