Как отправить данные из NodeMCU в Google Таблицы

Опубликовано: 2020-08-26
Как отправить данные из NodeMCU в Google Таблицы

Отправка данных датчиков с помощью прошивки NodeMCU через Интернет в электронную таблицу Google Sheets очень удобна. Это можно сделать с помощью скрипта Google, и при этом ничего не стоит, в отличие от многих альтернатив облачного хранилища.

В этой статье мы покажем вам простой проект отправки показаний температуры с использованием ESP8266 и датчика температуры и влажности DHT11.

Настройте свой Google Sheet

Сначала вам нужно создать новую электронную таблицу. Войдите в свою учетную запись Google, перейдите в «Мой диск» и откройте пустую таблицу.

Скопируйте ключ URL-адреса своей таблицы. Дайте таблице интуитивно понятное имя. Перейдите в редактор сценариев в меню «Инструменты».

редактор сценариев

Дайте название своему сценарию (опять же, пусть оно будет интуитивно понятным, особенно если вы работаете над несколькими проектами). Используйте данный скрипт и скопируйте его в редактор скриптов Google.

код редактора скриптов

Под строкой идентификатора таблицы вставьте ключ URL из сохраненной таблицы.

Сохраните скрипт и разверните его как приложение. Эту опцию вы найдете в меню «Опубликовать». Настройте параметры развертывания, чтобы убедиться, что электронная таблица будет работать правильно.

  1. Сохраните «Текущий URL-адрес веб-приложения».
  2. Сохраните версию проекта как новую для всех версий скрипта (это позволит Google обновлять любые версии, которые вы можете внести в будущем).
  3. В поле «Выполнить приложение как» добавьте следующий текст «я (ваш адрес Gmail)».
  4. В поле «Кто имеет доступ к приложению» добавьте следующую строку «любой, даже анонимный».

Код для настройки датчиков ESP8266 и DHT11

Вот что вам следует загрузить при подключении ESP8266 к датчику DHT11:

#include «ESP8266WiFi.h»

#include «DHT.h»

#define DHTPIN 2 // к какому цифровому выводу вы подключены

//pin2-D4 на плате esp

// Удалите комментарий в коде для типа датчика DHT, который вы используете.

#define DHTTYPE DHT11 // DHT 11

//#define DHTTYPE DHT21 // DHT 21

//#define DHTTYPE DHT22 // DHT 22

DHT dht(DHTPIN,DHTTYPE);

const char ВЕБ-САЙТ[] = «api.pushingbox.com»; //API-сервер PushingBox

const String devid = «<ВАШ_Devid_HERE>»; //идентификатор устройства из Pushingbox

const char* MY_SSID = «<ВАШЕ_ИМЯ_WIFI_HERE»;

const char* MY_PWD = «<ВАШ_ПАРОЛЬ_WIFI_ЗДЕСЬ>»;

недействительная настройка()

{

Serial.begin(115200);

дхт.начать();

Serial.print("Подключение к "+*MY_SSID);

WiFi.begin(MY_SSID, MY_PWD);

Serial.println("переход в wl-соединение");

while (WiFi.status() != WL_CONNECTED) //не подключено..ждем подключения

{

задержка(1000);

Serial.print(".");

}

Serial.println("wl подключен");

Serial.println("");

Serial.println("Учетные данные приняты! Подключено к Wi-Fi\n ");

Serial.println("");

}

недействительный цикл()

{

//Оставляем больше времени между чтениями

//заполняем лист Google, чтобы не превышать количество бесплатных запросов от PushingBox

задержка(10000); //10 секунд (частота выборки в зависимости от квоты вызовов службы)

плавающая влажностьДанные = dht.readHumidity();

// Считываем температуру в градусах Цельсия (по умолчанию)

float celData = dht.readTemperature();

// Считываем температуру в градусах Фаренгейта (isFahrenheit = true)

float fehrData = dht.readTemperature(true);

// Проверка неудачных операций чтения. Выходим раньше (чтобы повторить попытку).

если (иснан(humidityData) || иснан(celData) || иснан(fehrData))

{

Serial.println("Не удалось прочитать данные датчика DHT!");

возвращаться;

}

// Вычисляем индекс тепла в градусах Цельсия (isFahreheit = false)

float hicData = dht.computeHeatIndex(celData, HubData, false);

// Вычисление индекса тепла в градусах Фаренгейта (по умолчанию)

float hifData = dht.computeHeatIndex(fehrData, HubData);

//Печать на последовательный монитор или терминал по вашему выбору со скоростью 115200 бод

Serial.print("Влажность: ");

Serial.print(данные влажности);

Serial.print(» %\t»);

Serial.print("Температура в ячейках: ");

Serial.print(celData);

Serial.print(» *C «);

Serial.print("Температура в Фере: ");

Serial.print(fehrData);

Serial.print(» *F\t»);

Serial.print("Индекс тепла в Cel: ");

Serial.print(hicData);

Serial.print(» *C «);

Serial.print("Индекс тепла в Фере: ");

Serial.print(hifData);

Serial.print(» *F\n»);

Клиент WiFiClient; //Создаем экземпляр объекта WiFi

//Запуск службы API с помощью нашего WiFi-клиента через PushingBox

если (client.connect(ВЕБ-САЙТ, 80))

{

client.print("GET /pushingbox?devid=" + devid

+ «&humidityData=» + (Строка) HumidityData

+ «&celData=" + (Строка) celData

+ «&fehrData=» + (Строка) fehrData

+ «&hicData=» + (Строка) hicData

+ «&hifData=» + (Строка) hifData

);

client.println(» HTTP/1.1″);

client.print("Хост: ");

client.println(ВЕБ-САЙТ);

client.println("Агент пользователя: ESP8266/1.0");

client.println("Соединение: закрыть");

клиент.println();

}

}

Пример кода сценария приложения Google

Вот код, который вам нужен для создания читаемого сценария для передачи данных вашего датчика.

GET-запрос:

https://script.google.com/macros/s/<ваш gscriptID>/exec?celData=data_here

HumidityDat, celData,fehrData,hicData, hifData (переменные GScript, PushingBox и Arduino в том порядке, в котором вы должны их писать)

Функция doGet(e) {

Logger.log (JSON.stringify(e)); // это для просмотра параметров

Результат Var = 'ОК';

Если (e.parameter == не определено) {

Результат = «Нет параметров»;

}

Еще {

Var id= '<URL-адрес вашей таблицы\;

Лист Var = SpreadsheetApp.openById(id).getActivesheet();

Var newRow =sheet.getLastRow() + 1;

Var rowData = [];

//вар вакту = новая дата()'

rowData[0] = новая дата(); //для отметки времени в столбце A

for (var param в e.parameter) {

logger.log('вход цикла, param='+param);

значение var = StripQuotes(e.parameter[param]);

переключатель (параметр) {

case 'humidityData': //Параметр

строкаДанные[1] = значение; //Значение в столбце B

перерыв;

случай 'celData';

строкаДанные[2] = значение;

перерыв;

случай 'fehrData':

rowData[3] = значение;

перерыв;

случай 'hicData':

rowData[4] = значение;

перерыв;

случай 'hifData':

rowData[5] = значение;

перерыв;

по умолчанию:

результат = «неподдерживаемый параметр»;

}

Logger.log(JSON.stringify(rowData));

Var newRange =sheet.getRange(newRow, 1, 1, rowData.length);

newRange.setValues([rowData]);

}

Вернуть ContentService.createTextOutput(результат);

}

Функция StripQuotes(значение){

Возвращаемое значение.replace(/^[“']|['|]$/g, “”);

}

Настройка PushingBox

Эта служба действует как посредник между данными вашего датчика DHT и Google Sheets. Используя API PushingBox, вы можете преобразовать данные, передаваемые по HTTP, в зашифрованные данные HTTPS, которые распознает Google.

Обратите внимание, что PushingBox ограничивает вас 1000 запросами в день. Тем не менее, это избавляет от многих трудоемких работ и знаний, необходимых для создания собственного алгоритма шифрования, на который Google будет реагировать.

  1. Создайте учетную запись PushingBox, если у вас ее еще нет.
  2. Используйте адрес Gmail, который вы также используете для проекта данных датчиков NodeMCU.
  3. Перейдите в Мои услуги.
  4. Добавьте новую услугу с помощью опции «Добавить услугу».
  5. Прокрутите до последней опции под названием CustomURL. Установите свой собственный сервис!
  6. Заполните поля, требующие имя, URL-адрес и метод.
  7. В качестве метода выберите GET.
  8. В качестве URL-адреса используйте URL-адрес, начинающийся с «script.google.com…», из URL-адреса, созданного при создании адреса Google Scrip.
  9. Отправьте услугу и перейдите в раздел «Мои сценарии».
  10. Введите интуитивно понятное имя и нажмите кнопку «Добавить».
  11. Добавьте действие при появлении запроса на экране.
  12. Настройте метод GET, отформатировав имена для каждой переменной. Этот шаг будет отличаться в зависимости от того, сколько датчиков вы записываете и что они записывают.

Настройка оборудования

Если вы используете датчик DHT с вашим ESP8266, подайте на устройство напряжение 5 В вместо 3,3 В. Более низкое напряжение может не дать правильных показаний.

Соедините контакты 2 и D4 на вашем ESP8266.

Настройка программного обеспечения

Эта установка работает с Arduino IDE, желательно версии новее 1.6.4. Это также означает, что вам необходимо загрузить некоторые библиотеки в вашу систему.

Библиотеки можно найти по следующим ссылкам:

  1. https://github.comesp8266/Arduino/tree/master/libraries/ESP8266WiFi
  2. https://learn.adafruit.com/dht

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

  1. Сеть Wi-Fi.
  2. Пароль от Wi-Fi.
  3. Идентификатор PushingBox.

Как вы подходите к передаче данных NodeMCU?

Есть больше способов сделать это и множество типов датчиков, которые вы можете использовать для передачи данных с помощью ESP8266 с прошивкой NodeMCU непосредственно в Google Sheets или другие облачные платформы.

Вы предпочитаете писать собственные скрипты и код для персонализации своих проектов или ищете в Интернете проверенные скрипты на GitHub и других платформах и адаптируетесь оттуда? Сообщите нам о ваших любимых источниках кода и скриптов, а также о комбинациях ESP8266 и датчиков в разделе комментариев ниже.