Espruino:Примеры/Залогинивание в Google Sheets

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Залогинивание в Google Sheets[1]

Часто вам нужно прочесть какие-то данные, а затем загрузить их в онлайн-сервис. Несколько примеров таких сервисов можно найти в этой статье, но один из самых легкодоступных способов сохранения данных и последующего доступа к ним – это их загрузка в Google Таблицы при помощи Google Форм.

Это можно сделать при помощи платы Espruino Pico, имеющей поддержку HTTPS. В этом руководстве мы при помощи модуля ESP8266 WiFi будем каждую минуту загружать в Google Таблицы температуру чипа STM32.

Примечание

Ранее в этом проекте нужно было явно указать ключ и сертификаты HTTPS, но теперь это не нужно. Более подробно об использовании сертификатов читайте в этой статье.

Нам понадобятся

Или оба этих устройства может заменить одна плата Espruino WiFi.

Подсоединение

Если вы используете Espruino WiFi, то ничего подключать не нужно.

Если вы используете Espruino и модуль ESP8266 WiFi, следуйте инструкциям из этой статьи – проще всего воспользоваться ля этого адаптерной платой Shim.

Код

  • Обновите прошивку вашего устройства до последней версии. Нужна как минимум версия 1v92.
  • Скопируйте код ниже в правую часть Web IDE.
  • Выставьте собственные WiFi-настройки в верхней части кода (SSID и пароль).
  • Удалите функцию onInit() в нижней части кода, не соответствующую вашему устройству.
var WIFI_NAME = "";
var WIFI_OPTIONS = { password : "" };

var wifi;

// Отправляем форму:
function sendForm() {
  // Это загрузит данные на https://docs.google.com/spreadsheets/d/1R1D6GKK5MvtjS-PDEPHdqIqKSYX4kG4dPHkj_lkL1P0/pubhtml:
  LED1.set(); // во время работы
              // держим включённым красный светодиод
  var content = "entry.1093163892="+encodeURIComponent(E.getTemperature());
  var options = {
    host: 'docs.google.com',
    port: '443',
    path:'/forms/d/1bBV4map47MPRWfaHYCEd1ByR4f_sm3LSd3oRdYkiVKg/formResponse',
    protocol: "https:",
    method:'POST',
    headers: { 
      "Content-Type":"application/x-www-form-urlencoded",
      "Content-Length":content.length
    }
  };

  console.log("Подключение к Google");
  require("http").request(options, function(res)  {
    console.log("Подключились к Google");
    var nRecv = 0;
    res.on('data', function(data) { nRecv += data.length; });
    res.on('close', function(data) {
      LED1.reset(); // закончив, выключаем красный светодиод
      console.log("Соединение с Google завершено, "+nRecv+" байт получено");
    });
  }).end(content);
}

function onConnected(err) {
  if (err) throw err;
  wifi.getIP(function(e,ip) {
    LED2.set();
    console.log(ip);
    setInterval(sendForm, 60000); // раз в минуту
  });
}

// Для инициализации Espruino Pico:
function onInit() {
  clearInterval();
  // Инициализируем ESP8266 после задержки:
  setTimeout(function() {
    digitalWrite(B9,1); // включаем WiFi на Pico Shim V2
    Serial2.setup(115200, { rx: A3, tx : A2 });
    wifi = require("ESP8266WiFi_0v25").connect(Serial2, function(err) {  
      if (err) throw err;
      console.log("Подключение к WiFi");
      wifi.connect(WIFI_NAME,WIFI_OPTIONS.password, onConnected);
    });
  }, 2000); 
}

// Для инициализации Espruino WiFi:
function onInit() {
  wifi = require("EspruinoWiFi");
  wifi.connect(WIFI_NAME, WIFI_OPTIONS, onConnected);
}
  • Теперь зайдите на drive.google.com (вы должны быть залогинены в аккаунте Google).
  • Кликните на «Создать» > «Google Формы».
  • Отредактируйте заголовок.
  • Добавьте первый элемент с заголовком Temperature, а в типе вопроса задайте «Текст (строка)».
  • Кликните на кнопку «Отправить» справа вверху и скопируйте сгенерированный URL.
  • Откройте новую вкладку браузера, вставьте туда этот URL и нажмите  ↵ Enter . Затем кликните правой кнопкой мыши по странице и в открывшемся меню выберите «Просмотр кода страницы».
  • Найдите в этом коде фрагмент <form, скопируйте /forms/..., но без параметра action, а затем вставьте скопированное в свойство path в функции sendForm().
  • Также найдите в коде фрагмент <input type="text", скопируйте значение параметра name и вставьте его в var content = в функции sendForm(). Не забудьте поставить в конце =.
  • Теперь загрузите отредактированный код выше на Espruino и напечатайте save(), чтобы сохранить его на flash-память. Теперь этот код будет автоматически запускаться при каждом запуске Espruino.

Если вы хотите загружать в Google Таблицы не только температуру чипа STM32, но и другие данные, то это просто. Для этого в форму нужно добавить больше элементов, а также добавить дополнительные элементы в переменную content. Она работает по принципу URL – при добавлении новых элементов вам нужно будет разделять их символом &.

См.также

Внешние ссылки