Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Naadloze MKR1000 naar Google Sheets: Sensor Data Uploaden via WiFi

Onderdelen en Benodigdheden

Arduino MKR1000 1
DHT11 Temperatuur & Vochtigheidssensor (4 pinnen) 1
Jumper wires (generic) 1
Breadboard (generic) 1

Apps en Online Services

  • Arduino IDE
  • Google Sheets

Over Dit Project

Dit project stelt je in staat om data te verwerken met je MKR1000 en deze naar Google Sheets in de cloud te sturen via WiFi. Dit kan zonder creditcard-aanmeldingen of het gebruik van proprietary, "black box" API's. Voor dit voorbeeld gebruik ik de goedkope en veelvoorkomende DHT11-omgevingsensor, maar je kunt de Arduino-code eenvoudig aanpassen voor elke sensor of apparaat. Het is de moeite waard om op te merken dat dit project gecombineerd kan worden met een van mijn gerelateerde projecten, dat DHT11-data naar Thingspeak.com uploadt voor grafische visualisatie.

Dit is het eerste van vier delen. In deel 1 stel je je eigen Google Sheet in om je WiFi-data te ontvangen met behulp van de meegeleverde Google App Script-code.

Deel 1: Je Google Sheet Maken en Deployen

  1. Meld je aan voor een gratis Google-account als je er nog geen hebt.
  2. Log in en maak een nieuwe "Google Sheet" aan – dit is het spreadsheet dat gevuld zal worden met onze DHT-sensorwaarden via WiFi. Kopieer en bewaar de URL-sleutel van je spreadsheet. Deze sleutel staat in de URL tussen "/d/" en "/edit" (zie blauwe cirkel in de afbeelding).
  3. Naadloze MKR1000 naar Google Sheets: Sensor Data Uploaden via WiFi
  4. Geef je spreadsheet een unieke naam zoals "Omgevingsdata". Nu moeten we onze Google App Script maken (vergelijkbaar met JavaScript) die onze data verwerkt en het spreadsheet correct vult. Navigeer vanuit je spreadsheet naar de Script Editor:
    Tools → Script Editor

We zijn nu op de Google Script Editor-pagina. Noem je GScript iets creatiefs zoals "Mijn Omgevings GScript". Er zijn nog vier dingen te doen op de Script Editor-pagina:

  1. A) Kopieer en plak de meegeleverde Google Script-code in de Editor.
  2. B) Kopieer en plak de eerder opgeslagen spreadsheet URL-sleutel (stap 2) in de juiste regel in de Google Script-code (tussen de aanhalingstekens) waar staat:
    var id = ' '; // Spreadsheet ID
  3. C) Bewaar het script: Bestand → Alles Opslaan
  4. D) Deploy als Web App: Publiceren → Deploy als Web App…
Naadloze MKR1000 naar Google Sheets: Sensor Data Uploaden via WiFi
  1. Onze laatste stap voor het instellen van de Google Sheet betreft het configureren van de Web-deploy-parameters. Het is cruciaal dat je alle velden correct instelt. Als je niet alle vier velden precies instelt, werkt je spreadsheet niet goed.

Veld 1) Kopieer en bewaar de "Current web app URL:" die zojuist is gegenereerd; we hebben deze later nodig bij het configureren van onze API in PushingBox.

Veld 2) Sla een projectversie op als "nieuw" bij elke iteratie. Het is belangrijk: als je geen nieuwe projectversie maakt voor elke script-revisie, worden je wijzigingen niet live geüpdatet. Dit is counter-intuïtief en makkelijk te vergeten, maar zo is Google's systeem geconfigureerd.

Veld 3) "Execute the app as: " – stel dit in op "me (jouw GMail)".

Veld 4) "Who has access to the app: " – stel dit in op "anyone, even anonymous".

Naadloze MKR1000 naar Google Sheets: Sensor Data Uploaden via WiFi

Deel 2: PushingBox Configureren

Pushingbox.com fungeert als een eenvoudige, gratis en makkelijke API-tussenpersoon om onze DHT-data te maken tot Google Sheets-compatibele HTTPS-gecodeerde data. De noodzaak voor PushingBox is om onze HTTP-getransmitteerde data om te zetten in Google-compatibele HTTPS-gecodeerde data. We zouden een niet-triviaal encryptie-algoritme kunnen bouwen, maar PushingBox is makkelijker en we krijgen tot 1.000 verzoeken per dag gratis. Bovendien hoeven we niet te maken met "Black Box" API's.

Stappen voor het configureren van PushingBox:

  1. Maak een PushingBox-account aan met je Gmail.
  2. Klik bovenaan op "My Services".
  3. Ga in "My Services" naar het vak "Add a service" en klik op "Add a service".
  4. De service die je wilt maken is het laatste item in de lijst: "CustomURL, Set your own service!". Selecteer deze CustomURL-service.
  5. Er opent een vak met drie items. Vul ze als volgt in en klik op submit:
    Naam van je CustomURL-configuratie: (vrij te kiezen)
    Root URL: Deze URL begint met https://script.google.com... – dit is je Google Script-adres uit Deel 1
    Methode: GET
Naadloze MKR1000 naar Google Sheets: Sensor Data Uploaden via WiFi
  1. Na het indienen van je service moet je nu een scenario aanmaken. Selecteer "My Scenarios" bovenaan.
  2. Voer een passende naam in voor je scenario in het vak "Create a scenario or add a device". Klik op de "add"-knop rechts.
  3. Nu wordt gevraagd om "Add an action for your scenario". Kies de knop "Add an action to this service" naast de servicenaam die je in de vorige stap maakte. Dit koppelt je nieuwe scenario aan je nieuwe service.
  4. Er opent een datavak voor je "Get" of "Post" methode (we gebruiken GET, hoewel dit counter-intuïtief lijkt). Om al onze DHT-data (vijf datapunten) in je Google Sheet te loggen, moet je de variabelenamen uit je Google App Script koppelen aan de namen in onze Arduino-sketch. Het correct formatteren van de namen in de PushingBox API lost deze koppeling op. Kopieer en plak de volgende string in je vak:
?humidityData=$humidityData$&celData=$celData$&fehrData=$fehrData$&hicData=$hicData$&hifData=$hifData$

Let op: De statement begint met "?" om "GET" aan te duiden.

Het resultaat moet er als volgt uitzien, maar met jouw scenario-naam en Device ID-nummer:

Naadloze MKR1000 naar Google Sheets: Sensor Data Uploaden via WiFi

Zorg dat je je "DeviceID"-string kopieert, je hebt deze nodig voor de test in de volgende stap en later voor de Arduino-sketch in Deel 4.

Deel 3: De API Testen

Voordat we doorgaan naar de laatste stap (de MKR1000 programmeren om onze DHT-data via het web te sturen), is het handig om te testen of alles tot nu toe correct is. Als we wachten tot de hardware klaar is, is de oorzaak van eventuele fouten moeilijker te traceren. Gelukkig hebben we een eenvoudige testmethode. We kunnen direct hardcoded pseudo-data in de adresbalk van onze browser invoeren en controleren of ons Google Sheet correct wordt bijgewerkt. Hier is een voorbeeld dat je kunt kopiëren en plakken:

https://api.pushingbox.com/pushingbox?devid=(JOUW-DEVID-HIER)&humidityData=33&celData=44&fehrData=111&hicData=22&hifData=77

Je kunt zelfs nieuwe fake data met andere waarden invoeren voor opeenvolgende rijen, maar onthoud: je hebt maximaal 1.000 verzoeken per dag van PushingBox, dus ga er niet te wild mee om! Als deze procedure je spreadsheet niet bijwerkt, ga dan terug en herzien Deel 1-3 op fouten voordat je Deel 4 probeert.

Deel 4: De MKR1000 Programmeren

Na het bevestigen dat je hardcoded pseudo-data rechtstreeks vanuit je browser naar je Google Sheet kon pushen, ben je klaar voor de volgende stap: data direct van de MKR1000 naar Google Sheets via PushingBox over WiFi sturen. Voordat je de meegeleverde Arduino-sketch kunt uploaden en draaien op de MKR1000, moet je de volgende drie stappen voltooien.

Hardware

  1. MKR1000 aan de DHT aan sluiten: Dit is een simpele taak, vooral met de MKR1000. Ik raad aan de DHT met 5 volt te voeden, wat beschikbaar is op de MKR1000 (gemarkeerd als 5V). De DHT zou op 3,3V moeten werken, maar ik heb de metingen op de lagere spanning niet betrouwbaar gevonden. Je kunt verschillende pinnen gebruiken voor de data-input van de DHT naar de MKR1000, maar in mijn sketch gebruik ik Pin 5, wat mapst naar Pin D5 op de MKR1000 bovenaan het bord.
Naadloze MKR1000 naar Google Sheets: Sensor Data Uploaden via WiFi

Software (1)

  1. Er zijn een paar stappen om je Arduino IDE in te stellen voor de MKR1000. Dit omvat het downloaden van twee bibliotheken en het configureren van de Arduino IDE (1.6.4 of later) met het juiste MKR1000 Board-package (Tools → Board → Boards Manager). Velen hebben de benodigde software al geïnstalleerd; voor degenen die dat niet hebben, hier zijn de links:
    WiFi101 Referentie

De twee vereiste bibliotheken voor de sketch:

Let op: Ik moest een eerdere versie van het MKR1000 Board-package gebruiken omdat de nieuwste niet correct werkte. Ik hoop dat dit probleem ondertussen is opgelost.

Software (2)

  1. Je bent nu klaar voor de laatste stap: kopieer en plak de meegeleverde Arduino-sketch, pas deze aan voor je apparaat, en upload de sketch naar je MKR1000. De sketch geeft ook seriële output op 9600 baud, zodat je de via WiFi verzonden data kunt monitoren. De drie velden in de Arduino-sketch die je moet aanpassen zijn:
  • A) Je WiFi-naam (SSID)
  • B) Je WiFi-wachtwoord
  • C) Je PushingBox Device ID (devid)

Dat is het, je bent klaar! Als alles correct is voltooid, zal je output eruitzien als de onderstaande afbeelding:

Naadloze MKR1000 naar Google Sheets: Sensor Data Uploaden via WiFi

Dank aan alle mensen die de meerderheid van de softwarecomponenten hebben gebouwd waarop dit project gebaseerd is. Ik heb hun namen in de code-commentaren vermeld voor correcte toeschrijving. Voel je vrij om welke onderdelen van dit project je ook nodig hebt om je eigen magie te creëren.

-SDB

Code

MKR1000 naar Google Sheets via PushingBox met DHT

Deze Arduino-sketch stuurt data via WiFi naar PushingBox voor encryptie, daarna naar Google Sheets om de data te loggen.

//-----------------------------------------------
// Gecombineerd uit Adafruit DHT-sensor en tdicola voor dht.h bibliotheek
// https://learn.adafruit.com/dht/overview
// https://gist.github.com/teos0009/acad7d1e54b97f4b2a88
// Andere auteurs Arduino en bijbehorende Google Script:
// Aditya Riska Putra, Ahmed Reza Rafsanzani, Ryan Eko Saputro
// Zie ook: https://jarkomdityaz.appspot.com/
// ELINS UGM
// Aangepast voor Hackster.io project voor MKR1000
// door Stephen Borsay (Portland, OR, USA)
// Omdat Arduino geen https kan, gebruiken we PushingBox API (gebruikt http)
// om de Google Script (gebruikt https) uit te voeren. Alternatief: Ivan's SecureWifi encryptie
#include <WiFi101.h>
#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.print("Humidity: "); Serial.print(humidityData); Serial.print(" %\t");
  Serial.print("Temperature: "); Serial.print(celData); Serial.print(" *C ");
  Serial.print(fehrData); Serial.print(" *F\t");
  Serial.print("Heat index: "); Serial.print(hicData); Serial.print(" *C ");
  Serial.print(hifData); Serial.println(" *F\n");
  Serial.println("\nSending Data to Server...");
  WiFiClient client;
  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: 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 Script voor het Ontvangen van Wireless Data in HTTPS-formaat

Plak dit in de Script Editor van je Google Sheet om je wireless data te ontvangen. Het moet in HTTPS-formaat zijn, daarom gebruik ik PushingBox.

//-----------------------------------------------
// Oorspronkelijk gepubliceerd door Mogsdad@Stackoverflow
// Aangepast voor jarkomdityaz.appspot.com
// Aangepast voor Hackster.io door Stephen Borsay
//-----------------------------------------------
function doGet(e) {
  Logger.log(JSON.stringify(e));
  var result = 'Ok';
  if (e.parameter == undefined) {
    result = 'No Parameters';
  } else {
    var id = '<YOUR_SPREADSHEET_URL_HERE>';
    var sheet = SpreadsheetApp.openById(id).getActiveSheet();
    var newRow = sheet.getLastRow() + 1;
    var rowData = [];
    rowData[0] = new Date();
    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; 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, "");
}
PushingBox URL String (voor HTTPS-lim)

Dit is je string om je Arduino/MKR1000-variabelenamen die worden getransmitteerd te koppelen aan Google Sheets met exact dezelfde namen. PushingBox fungeert als beveiligingsbemiddelaar RESTful.

?humidityData=$humidityData$&celData=$celData$&fehrData=$fehrData$&hicData=$hicData$&hifData=$hifData$

Aangepaste Onderdelen en Behuizingen

Andere Data

Andere wireless projecten: https://github.com/sborsay/Arduino_Wireless

Schema's

Naadloze MKR1000 naar Google Sheets: Sensor Data Uploaden via WiFi

Productieproces

  1. Google Assistant installeren op een MATRIX Voice Raspberry Pi – Stap-voor-stap gids
  2. Temperatuur- en vochtigheidsdata overdragen tussen twee Arduinos via Firebase
  3. Bouw een indrukwekkend monitor Ambilight-systeem met Arduino
  4. Arduino Draadloze Magnetische Dataoverdracht met Infineon 3D-Sensor
  5. Bouw een Klassiek Pong-spel op Arduino UNO met OLED-display – Stap-voor-stap Tutorial
  6. Arduino Mega: Foto's Maken en Automatisch Uploaden naar Google Drive
  7. Arduino Audio Frequentie Detector – Meet de luidste geluidspieken met hoge gevoeligheid
  8. Bouw Je Eigen Arduino Tamagotchi: Een Digitale Huisdier DIY Project
  9. Slimme Draadloze Lichtschakelaar Controller: Arduino-gebaseerde Remote Switch Manipulator
  10. Arduino Boter-Kaas-Eieren met MAX7219 LED Matrix en Kartonnen Behuizing
  11. Slimme beweegactiverde waterpistool gebouwd met Arduino Nano