Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

MKR1000 vers Google Sheets : Envoyer des données capteur par WiFi sans effort

Composants et fournitures

Composant Quantité
Arduino MKR1000 1
Capteur DHT11 Température & Humidité (4 broches) 1
Fils de connexion (jumper wires) 1
Plaque d'essai (breadboard) 1

Applications et services en ligne

À propos de ce projet

Ce projet vous permet de traiter des données avec votre MKR1000 et de les envoyer à Google Sheets dans le cloud via WiFi. Ce projet peut être réalisé sans aucune inscription par carte de crédit ni utilisation d'API propriétaires « boîte noire ». Pour cet exemple spécifique, j'utilise le capteur environnemental DHT11 peu coûteux et omniprésent, mais vous pouvez facilement adapter le code Arduino inclus pour n'importe quel capteur ou appareil. Il est important de noter que ce projet pourrait facilement être combiné dans un sketch avec l'un de mes projets connexes, qui téléverse les données DHT11 vers Thingspeak.com pour des graphiques.

C'est la première de quatre parties. Dans cette première partie, vous allez configurer votre propre Google Sheet pour accepter vos données WiFi en utilisant le code Google App Script inclus.

Partie 1 : Création et déploiement de votre Google Sheet

  1. Inscrivez-vous pour un email Google gratuit si vous n'en avez pas.
  2. Connectez-vous à votre compte Google gratuit et créez un nouveau « Google Sheet », c'est le tableau qui sera peuplé par les valeurs de notre capteur DHT via WiFi. À ce stade, vous devrez copier et sauvegarder la clé URL de votre feuille de calcul. Cette clé figure dans l'URL entre le « /d/ » et le « /edit » de votre nouvelle feuille (voir cercle bleu).
MKR1000 vers Google Sheets : Envoyer des données capteur par WiFi sans effort
  1. Nommez votre feuille « Données Environnementales » par exemple. Maintenant, nous devons créer notre Google App Script (similaire à JavaScript) qui traitera nos données et peuplera correctement notre feuille. Pour insérer notre Google App Script, nous naviguons d'abord depuis notre feuille vers l'Éditeur de scripts :
    Outils → Éditeur de scripts

Nous sommes maintenant sur la page de l'Éditeur de scripts Google. Nous pouvons nommer notre GScript « Mon GScript Environnemental » par exemple. À ce stade, nous avons quatre choses à faire sur la page de l'Éditeur de scripts :

MKR1000 vers Google Sheets : Envoyer des données capteur par WiFi sans effort
  1. Notre étape finale pour la configuration de notre Google Sheet consistera à configurer les paramètres de déploiement Web. Il est important de régler correctement tous ces champs. Si vous ne définissez pas les quatre champs exactement, votre feuille ne fonctionnera pas correctement.
MKR1000 vers Google Sheets : Envoyer des données capteur par WiFi sans effort

Partie 2 : Configuration de PushingBox

Pushingbox.com sert d'intermédiaire API simple, gratuit et facile pour permettre à nos données DHT d'être compatibles avec Google Sheets. La nécessité d'utiliser l'API intermédiaire PushingBox est de transformer nos données transmises en HTTP en données HTTPS chiffrées conformes à Google. Nous pourrions tenter de créer un algorithme de chiffrement non trivial pour satisfaire l'exigence standard, mais utiliser PushingBox est plus simple, et nous bénéficions de jusqu'à 1 000 requêtes par jour gratuitement. De plus, nous n'avons pas à gérer d'API « boîte noire » où nous pouvons entrer nos propres paramètres, mais avons peu de contrôle sur la personnalisation et aucune idée réelle du fonctionnement de la fonction. Voici les étapes pour configurer PushingBox pour qu'il fonctionne avec nos données :

  1. Créer un compte PushingBox avec votre Gmail.
  2. En haut, cliquez sur « Mes Services »
  3. Dans « Mes Services », allez dans la boîte « Ajouter un service » et cliquez sur « Ajouter un service ».
  4. Le service que vous voulez créer est le dernier de la liste des services et s'appelle : »CustomURL, Définissez votre propre service ! ». Sélectionnez maintenant ce service CustomUrl.
  5. Une boîte s'ouvrira et demandera trois éléments. Remplissez-les comme ci-dessous, puis cliquez sur soumettre :
MKR1000 vers Google Sheets : Envoyer des données capteur par WiFi sans effort
  1. Après avoir soumis votre service, vous devez maintenant créer un scénario pour le service. Pour ce faire, sélectionnez « Mes Scénarios » en haut de la page.
  2. Entrez un nom approprié pour votre scénario dans la boîte « Créer un scénario ou ajouter un appareil ». Après avoir nommé votre service, cliquez sur le bouton « ajouter » à droite.
  3. Il vous sera maintenant demandé d' « Ajouter une action pour votre scénario ». Vous devez maintenant choisir le bouton « Ajouter une action à ce service » listé à côté du nom du service que vous avez créé à l'étape précédente. Cela assigne votre nouveau scénario à votre nouveau service.
  4. Une boîte de données s'ouvrira pour demander votre méthode « Get » ou « Post » (nous utilisons la méthode Get bien que cela semble contre-intuitif). Pour enregistrer toutes nos données DHT (cinq points de données) dans votre Google Sheet, vous devez lier les noms de variables listés dans votre Google App Script aux noms listés dans notre sketch Arduino. Le formatage correct des noms dans l'API PushingBox accomplira cette liaison. Copiez et collez la chaîne suivante dans votre boîte :
?humidityData=$humidityData$&celData=$celData$&fehrData=$fehrData$ &hicData=$hicData$&hifData=$hifData$

Note : L'instruction commence par « ? » pour indiquer « GET ».

Le résultat devrait ressembler à ceci, mais avec votre propre nom de scénario et numéro Device ID :

MKR1000 vers Google Sheets : Envoyer des données capteur par WiFi sans effort

Assurez-vous de copier votre chaîne « DeviceID », vous en aurez besoin pour les tests préliminaires à l'étape suivante, et plus tard pour le sketch Arduino dans la Partie 4.

3. Test de l'API

Avant de passer à la dernière étape, où nous programmons le MKR1000 pour envoyer les données de notre DHT via le Web, il serait utile de tester que tout ce que nous avons fait jusqu'à présent est correct. Si nous attendons de terminer la partie matérielle, la cause de toute erreur peut être plus difficile à identifier. Heureusement, nous avons une méthode simple pour tester notre code jusqu'à présent. Nous pouvons simplement entrer directement des pseudo-données codées en dur dans la barre d'adresse de notre navigateur Web et vérifier que notre Google Sheet est mis à jour correctement. Voici un exemple de ce que vous pouvez copier-coller dans la barre d'adresse de votre navigateur :

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

Si vous le souhaitez, vous pouvez même entrer de nouvelles fausses données avec des valeurs différentes pour les lignes suivantes. Cependant, rappelez-vous que vous n'avez que 1 000 requêtes par jour depuis PushingBox, alors n'abusez pas ! Si cette procédure n'a pas mis à jour votre feuille de calcul, revenez en arrière et revoyez les Parties 1 à 3 de ce guide pour détecter d'éventuelles erreurs avant d'essayer la Partie 4.

Partie 4

Après avoir confirmé que vous avez pu pousser des pseudo-données codées en dur directement depuis votre navigateur vers votre Google Sheet, vous êtes maintenant prêt pour l'étape suivante qui consiste à envoyer des données directement du MKR1000 vers Google Sheets via PushingBox par WiFi. Avant de pouvoir téléverser et exécuter le sketch Arduino inclus sur le MKR1000, vous devez effectuer les trois étapes suivantes.

Matériel

  1. Câblage du MKR1000 au DHT : C'est une tâche simple, surtout si vous utilisez le MKR1000. Je vous recommande d'alimenter le DHT avec 5 volts, disponible sur le MKR1000, indiqué comme 5v. Soit dit en passant, le DHT peut fonctionner sur 3,3 V, mais je n'ai pas trouvé les lectures du DHT fiables à cette tension plus basse. Vous avez la possibilité d'utiliser un certain nombre de broches différentes pour entrer les données du DHT vers le MKR1000, mais dans mon sketch, j'utilise la broche 5 qui correspond à la broche D5 sur le MKR1000 sur le dessus de la carte.
MKR1000 vers Google Sheets : Envoyer des données capteur par WiFi sans effort

Logiciel (1)

  1. Il y a quelques étapes pour configurer votre IDE Arduino pour qu'il fonctionne avec votre MKR1000. Ces étapes incluent le téléchargement de deux bibliothèques et la configuration de l'IDE Arduino (1.6.4 ou version ultérieure) avec le bon paquet de carte MKR1000 (Outils → Carte → Gestionnaire de cartes). Beaucoup d'entre vous auront déjà installé tous les logiciels nécessaires. Pour ceux qui ne l'ont pas fait, voici les liens pour récupérer les bibliothèques nécessaires et le paquet de prise en charge de la carte MKR1000. Notez également que j'ai dû utiliser une version précédente du paquet de carte MKR1000 car le dernier paquet de prise en charge de la carte MKR1000 ne fonctionnait pas correctement. J'espère que ce problème a été résolu au moment où vous lisez ceci.

Les deux bibliothèques requises pour le sketch :

Logiciel (2)

  1. Vous êtes maintenant prêt pour l'étape finale du projet. Vous devez copier et coller le sketch Arduino inclus, le personnaliser pour votre appareil, puis le téléverser sur votre MKR1000. Le sketch renvoie également une sortie série à 9600 bauds pour que vous puissiez surveiller les données envoyées via WiFi. Les trois champs du sketch Arduino que vous devez personnaliser sont :

C'est tout, vous avez terminé ! Si tout a été correctement réalisé, votre sortie ressemblera à l'image ci-dessous :

MKR1000 vers Google Sheets : Envoyer des données capteur par WiFi sans effort

Merci à toutes les personnes qui ont construit la majorité des composants logiciels sur lesquels ce projet a été bâti. J'ai listé leurs noms dans les commentaires du code pour une attribution appropriée. N'hésitez pas à utiliser les parties de ce projet dont vous avez besoin pour créer votre propre magie.

-SDB

Code

MKR1000 vers Google Sheets via PushingBox avec le DHT Arduino

Ce sketch Arduino pousse les données via WiFi vers PushingBox pour le chiffrement, puis vers PushingBox pour enregistrer ces données dans votre Google Sheet.

//-----------------------------------------------
// This sketch is combined from Adafruit DHT sensor and tdicola for dht.h library
// https://learn.adafruit.com/dht/overview
// https://gist.github.com/teos0009/acad7d1e54b97f4b2a88
// other Authors Arduino and associated Google Script:
// Aditya Riska Putra
// Ahmed Reza Rafsanzani
// Ryan Eko Saputro
// See Also:
// https://jarkomdityaz.appspot.com/
//
// ELINS UGM
//
// Modified for Hackster.io project for the MKR1000
// by Stephen Borsay (Portland, OR, USA)
// Since Arduino can't https, we need to use Pushingbox API (uses http) to run
// the Google Script (uses https). Alternatively use Ivan's SecureWifi encryption
#include <WiFi101.h>
#include "DHT.h"
#define DHTPIN 5 // what pin we're connected to, pin1 is 5th pin from end
// Uncomment whatever DHT sensor type you're using!
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT21 // DHT 21
//#define DHTTYPE DHT22 // DHT 22
DHT dht(DHTPIN, DHTTYPE);
const char WEBSITE[] = "api.pushingbox.com"; // pushingbox API server
const String devid = "YOUR_DEVICEID"; // device ID on Pushingbox for our Scenario
const char* MY_SSID = "YOUR SSID";
const char* MY_PWD = "YOUR WiFi PASSWORD";
int status = WL_IDLE_STATUS;
// if you don't want to use DNS (and reduce your sketch size)
// use the numeric IP instead of the name for the server:
//IPAddress server(74,125,232,128); // numeric IP for Google (no DNS)
void setup() {
  // Initialize serial and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue:
    while (true);
  }
  // attempt to connect to Wifi network:
  while (status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(MY_SSID);
    // Connect to WPA/WPA2 network. Change this line if using open/WEP network
    status = WiFi.begin(MY_SSID, MY_PWD);
    // wait 10 seconds for connection:
    delay(10000);
  }
  Serial.println("Connected to wifi");
  printWifiStatus();
}
void loop() {
  // Wait between measurements.
  delay(10000);
  // prefer to use float, but package size or float conversion isn't working
  // will revise in future with a string function or float conversion function
  int humidityData = dht.readHumidity();
  // Read temperature as Celsius (the default)
  int celData = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  int fehrData = dht.readTemperature(true);
  // Check if any reads failed and exit early (to try again).
  if (isnan(humidityData) || isnan(celData) || isnan(fehrData)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  // Compute heat index in Fahrenheit (the default)
  int hifData = dht.computeHeatIndex(fehrData, humidityData);
  // Compute heat index in Celsius (isFahreheit = false)
  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...");
  // if you get a connection, report back via serial:
  WiFiClient client; // Instantiate WiFi object, can scope from here or Globally
  // API service using WiFi Client through PushingBox then relayed to Google
  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);
    // HTTP 1.1 provides a persistent connection, allowing batched requests
    // or pipelined to an output buffer
    client.println(" HTTP/1.1");
    client.print("Host: ");
    client.println(WEBSITE);
    client.println("User-Agent: MKR1000/1.0");
    // for MKR1000, unlike esp8266, do not close connection
    client.println();
    Serial.println("\nData Sent");
  }
}
void printWifiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());
  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);
  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}

Google Script pour recevoir les données sans fil en format HTTPS JavaScript

Collez ceci dans l'Éditeur de scripts de votre Google Sheet pour recevoir vos données sans fil. Rappelez-vous qu'il doit être au format HTTPS chiffré/certificat de sécurité, c'est pourquoi j'utilise PushingBox.

//-----------------------------------------------
// Originally published by Mogsdad@Stackoverflow
// Modified for jarkomdityaz.appspot.com
// Modified for Hackster.io by Stephen Borsay
//-----------------------------------------------
/* GET request query: https://script.google.com/macros/s/<gscript id>/exec?celData=data_here
----------------------------------------------------------------------
GScript, PushingBox and Arduino/ESP8266 Variables in order:
humidityDat celData fehrData hicData hifData
----------------------------------------------------
*/
/* Using spreadsheet API */
function doGet(e) {
  Logger.log( JSON.stringify(e) ); // view parameters
  var result = 'Ok'; // assume success
  if (e.parameter == undefined) {
    result = 'No Parameters';
  } else {
    var id = '<YOUR_SPREADSHEET_URL_HERE';//docs.google.com/spreadsheetURL/d
    var sheet = SpreadsheetApp.openById(id).getActiveSheet();
    var newRow = sheet.getLastRow() + 1;
    var rowData = [];
    //var waktu = new Date();
    rowData[0] = new Date(); // Timestamp in column A
    for (var param in e.parameter) {
      Logger.log('In for loop, param='+param);
      var value = stripQuotes(e.parameter[param]);
      //Logger.log(param + ':' + e.parameter[param]);
      switch (param) {
        case 'humidityData': //Parameter
          rowData[1] = value; //Value in column B
          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));
    // Write new row below
    var newRange = sheet.getRange(newRow, 1, 1, rowData.length);
    newRange.setValues([rowData]);
  }
  // Return result of operation
  return ContentService.createTextOutput(result);
}
/**
 * Remove leading and trailing single or double quotes
 */
function stripQuotes( value ) {
  return value.replace(/^["']|["']$/g, "");
}

Chaîne URL PushingBox (pour le pont HTTPS) HTML

C'est votre chaîne pour connecter les noms de variables Arduino/MKR1000 transmis à Google Sheets avec les mêmes noms exacts. En utilisant PushingBox comme intermédiaire RESTful activant la sécurité.

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

Pièces personnalisées et boîtiers

Autres données

Autres projets sans fil : GitHub Repository

Schémas

Disposition

MKR1000 vers Google Sheets : Envoyer des données capteur par WiFi sans effort

Processus de fabrication

  1. Installer Google Assistant sur un MATRIX Voice Raspberry Pi – Guide étape par étape
  2. Transfert de données température/humidité entre deux Arduinos via Firebase
  3. Créer un système Ambilight spectaculaire pour moniteur avec Arduino
  4. Transfert de données magnétique sans fil Arduino + capteur 3D Infineon TLE493D
  5. Créer un jeu Pong classique sur Arduino UNO avec écran OLED – Tutoriel étape par étape
  6. Arduino Mega : Capturer des photos et les téléverser automatiquement sur Google Drive
  7. Détecteur de fréquence audio Arduino — Mesurer le pic sonore avec module haute sensibilité
  8. Construisez votre propre Tamagotchi Arduino : Un animal de compagnie numérique DIY
  9. Interrupteur lumineux sans fil intelligent : Manipulateur d'interrupteur piloté par Arduino