Как отправить данные из NodeMCU в Google Sheets

Как отправить данные из NodeMCU в Google Sheets

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

Содержание

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

Установка таблицы Google

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

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

Как отправить данные из NodeMCU в Google Sheets

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

Как отправить данные из NodeMCU в Google Sheets

В строке ID электронной таблицы вставьте ключ URL из сохраненной электронной таблицы.

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

  1. Сохраните «URL-адрес текущего веб-приложения».
  2. Сохраните версию проекта как новую для всех версий сценария (это позволит Google обновлять любые изменения, которые вы можете сделать в будущем).
  3. В поле «Выполнить приложение как» добавьте следующий линг «me(ваш адрес Gmail)».
  4. Для поля Who has access to the app добавьте следующую строку «anyone, even anonymous».

Код для настройки 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 WEBSITE[] = «api.pushingbox.com»; //сервер PushingBox API

const String devid = ««; //идентификатор устройства от Pushingbox

const char* MY_SSID = « const char* MY_PWD = ««;

void setup()

{

Serial.begin(115200);

dht.begin();

Serial.print(«Connecting to «+* MY_SSID);

WiFi.begin(MY_SSID, MY_PWD);

Serial.println(«going into wl connect»);

while (WiFi.status() != WL_CONNECTED) //нет соединения,…ожидание соединения

{

delay(1000);

Serial.print(«.»);

}

Serial.println(«wl connected»);

Serial.println(«»);

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

Serial.println(«»);

}

void loop()

{

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

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

delay(10000); //10 секунд, (скорость выборки по сравнению с квотой вызовов сервиса)

. квота вызовов сервиса)

float humidityData = dht.readHumidity();

// Читаем температуру по Цельсию (по умолчанию)

float celData = dht.readTemperature();

// Читаем температуру по Фаренгейту (isFahrenheit = true)

float fehrData = dht.readTemperature(true);

// Проверка на неудачное считывание exit early (to try again).

if (isnan(humidityData) || isnan(celData) || isnan(fehrData))

{

Serial.println(«Failed to read from DHT sensor!»);

return;

}

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

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

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

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

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

Serial.print(«Humidity: «);

Serial.print(humidityData);

Serial.print(» %\t»);

Serial.print(«Температура в градусах Цельсия: «);

Serial.print(celData);

Serial.print(» * C «);

Serial.print(«Температура в ферах: «);

Serial.print(fehrData);

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

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

Serial.print(hicData);

Serial.print(» * C «);

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

Serial.print(hifData);

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

WiFiClient client; //Instantiate WiFi object

//Start or API service using our WiFi Client through PushingBox

if (client.connect(WEBSITE, 80))

{

client.print(«GET /pushingbox?devid=» + devid

  • «&humidityData=» + (String) humidityData

  • «&celData=» + (String) celData

  • «&fehrData=» + (String) fehrData

  • «&hicData=» + (String) hicData

  • «&hifData=» + (String) hifData

);

client.println(» HTTP/1.1′′);

client.print(«Host: «);

client.println(WEBSITE);

client.println(«User-Agent: ESP8266/1.0»);

client.println(«Connection: close»);

client.println();

}

}

Пример кода скрипта Google App

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

Запрос запроса GET:

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

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

Function doGet(e) {

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

Var result = ‘Ok’;

If (e.parameter == undefined) {

Result = ‘No Parameters’;

}

Else {

Var id= ‘<ваша электронная таблица URL;

Var sheet = SpreadsheetApp.openById(id).getActivesheet();

Var newRow = sheet.getLastRow() + 1;

Var rowData = [];

//var waktu = new Date()’

rowData[0] = new Date(); //for Timestamp in column A

for (var param in e.parameter) {

logger.log(‘in for loop, param=’+param);

var value = stripQuotes(e.parameter[param]);

switch (param) {

case ‘humidityData’: //Параметр

rowData[1] = value; //Значение в столбце B

break;

case ‘celData’;

rowData[2] = value;

break;

case ‘fehrData’:

rowData[3] = value ;

break;

case ‘hicData’:

rowData[4] = value;

break;

case ‘hifData’:

rowData[5] = value;

break;

default:

result = «unsupported parameter»;

}

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

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

newRange.setValues([rowData]);

}

Return ContentService.createTextOutput(result);

}

Function stripQuotes( value ){

Return value.replace(/^[«‘]|[‘|]$/g, «»);

}

Setup 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. hhtps://github.comesp8266/Arduino/tree/master/libraries/ESP8266WiFi
  2. https://learn.adafruit.com/dht

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

  1. Wi-Fi сеть.
  2. Wi-Fi пароль.
  3. PushingBox ID.

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

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

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

YouTube видео: Как отправить данные из NodeMCU в Google Sheets