Как создать Google Календарь и получить к нему доступ с ESP8266 / Arduino
Пошаговое руководство: как создать Google Календарь, опубликовать события в виде простой текстовой ленты (RSS-подобный вывод) и получить к нему доступ с любой платы — ESP8266, ESP32 или Arduino. Идеально для умного дома: включение света, полива, кофеварки или голосового оповещения по расписанию из вашего личного календаря. Всё без платных сервисов и сложных интеграций — только бесплатный Google Календарь + Google Apps Script.
Что мы получим в итоге
- Обычный Google Календарь, которым вы уже пользуетесь
- Простую текстовую ленту всех событий за 7 дней
- Формат вывода: день, время начала, длительность (целый день — TRUE/FALSE), напоминание (минуты), название события
- Доступ по прямой ссылке — можно читать с ESP8266, ESP32, Arduino + Ethernet/Wi-Fi
Шаг 1. Создаём и наполняем Google Календарь
Заходите в calendar.google.com → создаёте события как обычно.
Примеры событий для теста:
- Прошедшее событие (вчера)
- Текущее событие (идёт прямо сейчас)
- Будущее событие с напоминанием за 20 минут
- Событие «На весь день»
Шаг 2. Создаём Google Apps Script
Переходите: script.google.com → Новый проект
Полностью замените код на этот:
function doGet() {
var email = "ВАШ_EMAIL@gmail.com"; // ← ваш Google-аккаунт
var cal = CalendarApp.getCalendarsByName("")[0]; // берём основной календарь
var now = new Date();
var start = new Date(now.getTime() - 7*24*60*60*1000); // 7 дней назад
var end = new Date(now.getTime() + 30*24*60*60*1000); // +30 дней вперёд
var events = cal.getEvents(start, end);
var result = "";
for (var i = 0; i < events.length; i++) {
var e = events[i];
var title = e.getTitle();
var startTime = e.getStartTime();
var isAllDay = e.isAllDayEvent();
var reminder = 0;
if (e.getAllReminders().length > 0) {
reminder = e.getAllReminders()[0].getMinutes();
}
result += Utilities.formatDate(startTime, "GMT+3", "EEE, dd MMM HH:mm") +
" | " + isAllDay +
" | " + reminder +
" | " + title + "\n";
}
return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.TEXT);
}
Формирует строку с датой, временем, флагом «весь день», напоминанием и названием события.
Возвращает все события в виде простого текста через веб-запрос doGet().
Шаг 3. Публикуем как веб-приложение
- Нажимаете «Развернуть» → «Новое развертывание»
- Выбираете «Веб-приложение»
- Кто имеет доступ: «Любой пользователь» (или «Любой, даже анонимно»)
- Развернуть → копируете полученную ссылку
Шаг 4. Проверяем результат
Вставляете ссылку в браузер — получаете чистый текст со всеми событиями!
Пример вывода:
Tue, 25 Mar 08:00 | false | 20 | Полить цветы Wed, 26 Mar 00:00 | true | 0 | Выходной день
Что дальше (во второй части)
- Чтение этой ленты с ESP8266 (библиотека HTTPSRedirect)
- Включение реле, света, полива, кофеварки по событиям
- Голосовое оповещение за 20 минут до события
- Telegram-уведомления из календаря
Итог
Теперь у вас есть полностью рабочий Google Календарь с открытым текстовым доступом — готов к интеграции в любой проект умного дома. Никаких платных IFTTT, никаких сложных API-ключей — всё бесплатно и работает мгновенно. Во второй части подключим ESP8266 и заставим устройства реагировать на ваши планы!
Ставьте лайк, если создали свой календарь-ленту, и пишите в комментариях — для чего будете использовать: полив, свет, кофе по утрам или что-то другое?
FAQ — Google Календарь для ESP8266 / Arduino
Можно ли использовать любой Google Календарь — или нужен новый?
Можно использовать любой календарь: основной, рабочий или созданный специально под проект. Скрипт получает события по имени календаря. Если имя пустое, берётся основной календарь аккаунта.
Сколько событий выводит скрипт?
Скрипт формирует ленту событий за последние 7 дней и на 30 дней вперёд.
Эти параметры легко менять, корректируя переменные start и end.
Поддерживаются ли события «На весь день»?
Да. Для таких событий возвращается true в поле «целый день».
Это можно использовать для особых сценариев, например отключения уведомлений ночью
или включения праздничных режимов в умном доме.
Можно ли добавить больше данных: описание, место, участников?
Да. Google Apps Script позволяет получать полное содержимое события: описание, место, ссылки, участников, цвет и тип календаря. Эти значения можно добавить в вывод — достаточно расширить строку результата в цикле и вставить нужные методы CalendarApp.
Безопасно ли публиковать календарь как «Доступ для всех»?
Да. Веб-приложение отдаёт только текст событий, без доступа к аккаунту, настройкам или другим данным. Даже при знании прямой ссылки никто не сможет изменить ваш календарь: только прочитать события, включённые в диапазон.
Можно ли анализировать события прямо на ESP8266?
Да. Формат вывода — обычный текст, одна строка = одно событие.
ESP8266 легко парсит строки через String.indexOf() и substring().
Это позволяет включать реле, свет, полив или голосовые оповещения по расписанию.
Можно ли использовать этот метод на Arduino без Wi-Fi?
Да. Подойдёт любая плата с доступом в интернет: Arduino UNO/MEGA с Ethernet Shield, ENC28J60 или ESP32. Достаточно выполнить обычный GET-запрос к опубликованному веб-сервису.
Почему в примере скрипта Reminder = 0?
Потому что в событии может не быть напоминаний.
Если напоминание есть, скрипт считывает значение первого из них
(например 20 минут) через getAllReminders()[0].getMinutes().
ESP8266 может использовать это значение, чтобы заранее включать устройства или отправлять уведомления.