Отправлять данные датчиков с помощью встроенного ПО NodeMCU через Интернет в электронную таблицу Google Sheets очень удобно. Это можно сделать с помощью скрипта Google, и преимущество заключается в том, что это ничего не стоит, в отличие от многих альтернатив облачного хранения данных.
Содержание
В рамках этой статьи мы покажем вам простой проект для отправки показаний температуры с помощью ESP8266 и датчика температуры и влажности DHT11.
Установка таблицы Google
Сначала вам нужно создать новую таблицу. Войдите в свой аккаунт Google, перейдите в раздел «Мой диск» и откройте пустую электронную таблицу.
Скопируйте URL-ключ для вашей электронной таблицы. Дайте электронной таблице интуитивно понятное имя. Перейдите в редактор сценариев в меню Инструменты.
Дайте название своему сценарию (опять же, пусть оно будет интуитивно понятным, особенно если вы делаете несколько проектов). Используйте данный сценарий и скопируйте его в редактор Google Script.
В строке ID электронной таблицы вставьте ключ URL из сохраненной электронной таблицы.
Сохраните сценарий и разверните его как приложение. Вы найдете эту опцию в меню Publish. Настройте параметры развертывания, чтобы обеспечить правильную работу электронной таблицы.
- Сохраните «URL-адрес текущего веб-приложения».
- Сохраните версию проекта как новую для всех версий сценария (это позволит Google обновлять любые изменения, которые вы можете сделать в будущем).
- В поле «Выполнить приложение как» добавьте следующий линг «me(ваш адрес Gmail)».
- Для поля 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.
- Создайте аккаунт 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. Это также означает, что вам необходимо загрузить некоторые библиотеки в вашу систему.
Библиотеки можно найти по следующим ссылкам:
- hhtps://github.comesp8266/Arduino/tree/master/libraries/ESP8266WiFi
- https://learn.adafruit.com/dht
Следующий шаг включает загрузку скетча Arduino и его настройку для вашего проекта и вашего устройства. Есть только три соответствующих поля, которые вы должны отформатировать и настроить для вашего проекта:
- Wi-Fi сеть.
- Wi-Fi пароль.
- PushingBox ID.
Как вы подходите к передаче данных NodeMCU?
Есть больше способов сделать это и множество типов датчиков, которые можно использовать для передачи данных с помощью ESP8266 с прошивкой NodeMCU непосредственно в Google Sheets или другие облачные платформы.
Вы предпочитаете писать свои собственные скрипты и код для персонализации своих проектов или вы ищете в Интернете проверенные скрипты на github и других платформах и адаптируете их оттуда? Сообщите нам о ваших любимых источниках кода и скриптов, а также о комбинациях ESP8266 и датчиков в разделе комментариев ниже.