Как отправить данные из NodeMCU в Google Таблицы
Опубликовано: 2020-08-26Отправка данных датчиков с помощью прошивки NodeMCU через Интернет в электронную таблицу Google Sheets очень удобна. Это можно сделать с помощью скрипта Google, и при этом ничего не стоит, в отличие от многих альтернатив облачного хранилища.
В этой статье мы покажем вам простой проект отправки показаний температуры с использованием ESP8266 и датчика температуры и влажности DHT11.
Настройте свой Google Sheet
Сначала вам нужно создать новую электронную таблицу. Войдите в свою учетную запись Google, перейдите в «Мой диск» и откройте пустую таблицу.
Скопируйте ключ URL-адреса своей таблицы. Дайте таблице интуитивно понятное имя. Перейдите в редактор сценариев в меню «Инструменты».
Дайте название своему сценарию (опять же, пусть оно будет интуитивно понятным, особенно если вы работаете над несколькими проектами). Используйте данный скрипт и скопируйте его в редактор скриптов Google.
Под строкой идентификатора таблицы вставьте ключ URL из сохраненной таблицы.
Сохраните скрипт и разверните его как приложение. Эту опцию вы найдете в меню «Опубликовать». Настройте параметры развертывания, чтобы убедиться, что электронная таблица будет работать правильно.
- Сохраните «Текущий URL-адрес веб-приложения».
- Сохраните версию проекта как новую для всех версий скрипта (это позволит Google обновлять любые версии, которые вы можете внести в будущем).
- В поле «Выполнить приложение как» добавьте следующий текст «я (ваш адрес Gmail)».
- В поле «Кто имеет доступ к приложению» добавьте следующую строку «любой, даже анонимный».
Код для настройки датчиков 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 будет реагировать.
- Создайте учетную запись PushingBox, если у вас ее еще нет.
- Используйте адрес Gmail, который вы также используете для проекта данных датчиков NodeMCU.
- Перейдите в Мои услуги.
- Добавьте новую услугу с помощью опции «Добавить услугу».
- Прокрутите до последней опции под названием CustomURL. Установите свой собственный сервис!
- Заполните поля, требующие имя, URL-адрес и метод.
- В качестве метода выберите GET.
- В качестве URL-адреса используйте URL-адрес, начинающийся с «script.google.com…», из URL-адреса, созданного при создании адреса Google Scrip.
- Отправьте услугу и перейдите в раздел «Мои сценарии».
- Введите интуитивно понятное имя и нажмите кнопку «Добавить».
- Добавьте действие при появлении запроса на экране.
- Настройте метод GET, отформатировав имена для каждой переменной. Этот шаг будет отличаться в зависимости от того, сколько датчиков вы записываете и что они записывают.
Настройка оборудования
Если вы используете датчик DHT с вашим ESP8266, подайте на устройство напряжение 5 В вместо 3,3 В. Более низкое напряжение может не дать правильных показаний.
Соедините контакты 2 и D4 на вашем ESP8266.
Настройка программного обеспечения
Эта установка работает с Arduino IDE, желательно версии новее 1.6.4. Это также означает, что вам необходимо загрузить некоторые библиотеки в вашу систему.
Библиотеки можно найти по следующим ссылкам:
- https://github.comesp8266/Arduino/tree/master/libraries/ESP8266WiFi
- https://learn.adafruit.com/dht
Следующий шаг включает загрузку эскиза Arduino и настройку его для вашего проекта и вашего устройства. Есть только три соответствующих поля, которые вам необходимо отформатировать и настроить для вашего проекта:
- Сеть Wi-Fi.
- Пароль от Wi-Fi.
- Идентификатор PushingBox.
Как вы подходите к передаче данных NodeMCU?
Есть больше способов сделать это и множество типов датчиков, которые вы можете использовать для передачи данных с помощью ESP8266 с прошивкой NodeMCU непосредственно в Google Sheets или другие облачные платформы.
Вы предпочитаете писать собственные скрипты и код для персонализации своих проектов или ищете в Интернете проверенные скрипты на GitHub и других платформах и адаптируетесь оттуда? Сообщите нам о ваших любимых источниках кода и скриптов, а также о комбинациях ESP8266 и датчиков в разделе комментариев ниже.