Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Беспроводная отправка данных с MKR1000 в Google Таблицы через WiFi

Компоненты

Сервисы

О проекте

Проект отправляет показания DHT11 из MKR1000 в Google Таблицы через WiFi без платных API и регистрации карт. Используется бесплатный PushingBox (до 1000 запросов/день) для преобразования HTTP в HTTPS, понятный Google Script. Метод универсален — под любой датчик.

Часть 1: Создание и развёртывание Google Таблицы

  1. Создайте бесплатный Google-аккаунт при необходимости.
  2. Создайте новую Google Таблицу («Environmental Data»). Скопируйте ID таблицы из URL (между /d/ и /edit).
  3. Откройте Инструменты → Редактор скриптов. Назовите скрипт (например, «My Environmental GScript»).
  4. Вставьте код Google Apps Script (см. ниже). Вставьте сохранённый ID в строку var id = ' ';.
  5. Файл → Сохранить всё.
  6. Опубликовать → Развернуть как веб-приложение.

Настройка веб-приложения (критично!)

  1. Скопируйте и сохраните «Current web app URL» — понадобится для PushingBox.
  2. Версия: выбирайте «New» при каждом изменении кода, иначе изменения не вступят в силу.
  3. Execute the app as: Me (ваш Gmail).
  4. Who has access: Anyone, even anonymous.

Часть 2: Настройка PushingBox

  1. Регистрация на pushingbox.com через Gmail.
  2. My Services → Add a service → CustomURL.
  3. Заполните: Name (любое), Root URL — ваш Web App URL из Части 1, Method — GET.
  4. My Scenarios → Create a scenario → имя сценария → Add.
  5. 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 датчик может давать нестабильные показания.

Необходимые библиотеки

Настройка скетча

Замените три поля:

Скетч каждые 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$

Производственный процесс

  1. Установка Google Assistant на MATRIX Voice Raspberry Pi — пошаговое руководство
  2. Передача данных температуры и влажности между двумя Arduino через Firebase
  3. Создание потрясающей системы Ambilight для монитора на Arduino
  4. Беспроводная передача данных по магнитному полю на Arduino с 3D-сенсором Infineon
  5. Создание классической игры Pong на Arduino UNO с OLED-дисплеем: пошаговый урок
  6. Arduino Mega: съёмка фото и автоматическая загрузка в Google Drive
  7. Детектор аудиочастот на Arduino: измеряем пик громкости с высокочувствительным модулем
  8. Собираем свой Tamagotchi на Arduino: цифровой питомец своими руками
  9. Умный беспроводной выключатель света: Arduino-контроллер для удаленного управления
  10. Крестики-нолики на Arduino с матрицей MAX7219 и картонным корпусом