Беспроводная отправка данных с MKR1000 в Google Таблицы через WiFi
Компоненты
- Arduino MKR1000 — 1 шт.
- Датчик DHT11 (температура/влажность) — 1 шт.
- Макетная плата и перемычки
Сервисы
- Arduino IDE
- Google Таблицы + Google Apps Script
- PushingBox (посредник HTTP→HTTPS)
О проекте
Проект отправляет показания DHT11 из MKR1000 в Google Таблицы через WiFi без платных API и регистрации карт. Используется бесплатный PushingBox (до 1000 запросов/день) для преобразования HTTP в HTTPS, понятный Google Script. Метод универсален — под любой датчик.
Часть 1: Создание и развёртывание Google Таблицы
- Создайте бесплатный Google-аккаунт при необходимости.
- Создайте новую Google Таблицу («Environmental Data»). Скопируйте ID таблицы из URL (между
/d/и/edit). - Откройте Инструменты → Редактор скриптов. Назовите скрипт (например, «My Environmental GScript»).
- Вставьте код Google Apps Script (см. ниже). Вставьте сохранённый ID в строку
var id = ' ';. - Файл → Сохранить всё.
- Опубликовать → Развернуть как веб-приложение.
Настройка веб-приложения (критично!)
- Скопируйте и сохраните «Current web app URL» — понадобится для PushingBox.
- Версия: выбирайте «New» при каждом изменении кода, иначе изменения не вступят в силу.
- Execute the app as: Me (ваш Gmail).
- Who has access: Anyone, even anonymous.
Часть 2: Настройка PushingBox
- Регистрация на pushingbox.com через Gmail.
- My Services → Add a service → CustomURL.
- Заполните: Name (любое), Root URL — ваш Web App URL из Части 1, Method — GET.
- My Scenarios → Create a scenario → имя сценария → Add.
- Add an action to this service → вставьте строку:
?humidityData=$humidityData$&celData=$celData$&fehrData=$fehrData$&hicData=$hicData$&hifData=$hifData$
Скопируйте DeviceID — он нужен для теста и для скетча Arduino.
Часть 3: Тест API
В адресной строке браузера введите:
https://api.pushingbox.com/pushingbox?devid=ВАШ_DEVICEID&humidityData=33&celData=44&fehrData=111&hicData=22&hifData=77
Если строка добавилась в таблицу — всё работает. Если нет — проверяйте Части 1–3.
Часть 4: Скетч для MKR1000
Подключите DHT11: VCC → 5V (на MKR1000 есть 5V пин), DATA → D5 (пин 5). На 3.3V датчик может давать нестабильные показания.
Необходимые библиотеки
Настройка скетча
Замените три поля:
MY_SSID— имя вашей WiFi-сетиMY_PWD— пароль WiFidevid— DeviceID из PushingBox
Скетч каждые 10 секунд читает DHT11, считает индекс тепла, отправляет GET-запрос на api.pushingbox.com, который проксирует в Google Script. В Serial Monitor (9600 baud) видно процесс.
Коды
Arduino Sketch (MKR1000 → PushingBox → Google Sheets)
#include
#include "DHT.h"
#define DHTPIN 5
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
const char WEBSITE[] = "api.pushingbox.com";
const String devid = "YOUR_DEVICEID";
const char* MY_SSID = "YOUR SSID";
const char* MY_PWD = "YOUR WiFi PASSWORD";
int status = WL_IDLE_STATUS;
void setup() {
Serial.begin(9600);
while (!Serial);
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi shield not present");
while (true);
}
while (status != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(MY_SSID);
status = WiFi.begin(MY_SSID, MY_PWD);
delay(10000);
}
Serial.println("Connected to wifi");
printWifiStatus();
}
void loop() {
delay(10000);
int humidityData = dht.readHumidity();
int celData = dht.readTemperature();
int fehrData = dht.readTemperature(true);
if (isnan(humidityData) || isnan(celData) || isnan(fehrData)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
int hifData = dht.computeHeatIndex(fehrData, humidityData);
int hicData = dht.computeHeatIndex(celData, humidityData, false);
// вывод в Serial...
WiFiClient client;
if (client.connect(WEBSITE, 80)) {
client.print("GET /pushingbox?devid=" + devid +
"&humidityData=" + humidityData +
"&celData=" + celData +
"&fehrData=" + fehrData +
"&hicData=" + hicData +
"&hifData=" + hifData);
client.println(" HTTP/1.1");
client.print("Host: "); client.println(WEBSITE);
client.println("User-Agent: MKR1000/1.0");
client.println();
Serial.println("\nData Sent");
}
}
void printWifiStatus() {
Serial.print("SSID: "); Serial.println(WiFi.SSID());
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: "); Serial.println(ip);
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):"); Serial.print(rssi); Serial.println(" dBm");
}
Google Apps Script (приём HTTPS)
function doGet(e) {
Logger.log(JSON.stringify(e));
var result = 'Ok';
if (e.parameter == undefined) { result = 'No Parameters'; }
else {
var id = '';
var sheet = SpreadsheetApp.openById(id).getActiveSheet();
var newRow = sheet.getLastRow() + 1;
var rowData = []; rowData[0] = new Date();
for (var param in e.parameter) {
var value = stripQuotes(e.parameter[param]);
switch (param) {
case 'humidityData': rowData[1] = value; 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";
}
}
var newRange = sheet.getRange(newRow, 1, 1, rowData.length);
newRange.setValues([rowData]);
}
return ContentService.createTextOutput(result);
}
function stripQuotes(value) {
return value.replace(/^["']|["']$/g, "");
}
Строка для PushingBox
?humidityData=$humidityData$&celData=$celData$&fehrData=$fehrData$&hicData=$hicData$&hifData=$hifData$
Производственный процесс
- Установка Google Assistant на MATRIX Voice Raspberry Pi — пошаговое руководство
- Передача данных температуры и влажности между двумя Arduino через Firebase
- Создание потрясающей системы Ambilight для монитора на Arduino
- Беспроводная передача данных по магнитному полю на Arduino с 3D-сенсором Infineon
- Создание классической игры Pong на Arduino UNO с OLED-дисплеем: пошаговый урок
- Arduino Mega: съёмка фото и автоматическая загрузка в Google Drive
- Детектор аудиочастот на Arduino: измеряем пик громкости с высокочувствительным модулем
- Собираем свой Tamagotchi на Arduino: цифровой питомец своими руками
- Умный беспроводной выключатель света: Arduino-контроллер для удаленного управления
- Крестики-нолики на Arduino с матрицей MAX7219 и картонным корпусом