Étape 12 : ITO contrôle croquis--aquaponique balcon jardin Assemblée
Cette esquisse nécessite l’utilisation de plusieurs choses :
Arduino YUN
Temboo compte
Twilio compte
Compte MicroSoft Power BI.
POURQUOI TEMBOO :
Sans Temboo en continu des données et des messages texte SMS sont très difficiles à accomplir. Cette partie d’avoir une demande de l’ITO est très compliquer pour les constructeurs non techniques de ces jardins. Temboo est un produit qui génère du code pour les utilisateurs et capteur de code puis spécifique et segments d’automation peuvent être insérés pour accomplir les tâches. Temboo a une aide technique excellente et grande documentation pour aider les utilisateurs à l’utilisation de ce produit les chiffres.
Voici esquisse de base qui permet aux messages de texte et le Streaming de données en utilisant la plate-forme Temboo :
* Description: * exemple de EventFuse qui illustre le contrôle de * multiple independent commuté sorties. Chaque * peut être configuré avec indépendant * sur et en dehors des périodes avec un minimum de 1 seconde * et un maximum d’environ 1 100 heures (2 ^ 32 mS). ** < /p >< p > Valve bibliothèques minuterie #include < EventFuse.h >< eventfuse.h > #include < MsTimer2.h >< mstimer2.h >< /mstimer2.h >< /eventfuse.h >< / p >< p > / / / bibliothèques pour Temboo #include < Bridge.h >< bridge.h > #include < Temboo.h >< temboo.h > #include « TembooAccount.h » / / Temboo contient les informations de compte - doit être dans l’onglet < /temboo.h >< /bridge.h >< / p >< p > #define OUTPUT_COUNT 1 #define ignorer TEMPS 0 #define ON_TIME 1 #define OUTPUT_PIN 2 < /p >< p > / / définissez données de diffuser toutes les 30 secondes. int streamInterval = 30000 ; intervalle de transmission en continu en millisecondes uint32_t lastStreamRunTime = millis() - streamInterval ; stocker l’heure de la dernière écriture de flux < /p >< p > / / trigger SMS la valeur variable. bool volatils sendText = true ; < /p >< p > / / le tableau des sorties définit combien de temps chaque sortie volonté / / s’éteindre, de suite et quelle broche à utiliser pour cette sortie. L’arrêt et sur les valeurs sont en unités de « tiques ». La longueur / / d’une tique est contrôlée par le programme d’installation de MsTimer2. hors tension sur la broche octet sorties [OUTPUT_COUNT] [3] = {{1, 5, 2}, / / sortie A} ; Sortie D Sub OutputHandler (FuseID fuseID, int & outputID) {/ / chercher le NIP associé à cette broche d’octets de sortie. = sorties [outputID] [OUTPUT_PIN]; / / Trigger SMS. sendText = true; / / extraire et inverser l’état actuel de la broche et écrire / / retour au port pour inverser l’actuelle pin État. int État = 1 & ~ digitalRead(pin) ; digitalWrite (broche, État); / / la longueur du fusible avec un nouvel intervalle de réinitialisation. L’état actuel / / de la goupille est utilisée pour déterminer quel intervalle doit être utilisé. EventFuse::fuses [fuseID] .fuseLen = sorties [outputID] [Etat] ; } < /p >< p > void setup() {/ / init toutes les sorties OFF et mis en place. Serial.Begin(9600) ; tandis que)! Série) ; Bridge.Begin() ; pour (octet j’ai = 0; j’ai < output_count; i ++) {= "" = "" pinmode (= "" sorties [i] [output_pin], = "" sortie); = "" digitalwrite (= "" faible = ""); < = "" p = "" >< / output_count ; >< / p >< p > / / mettre en place un fusible d’événement pour cette sortie. EventFuse::newFuse (je, sorties [i] [OFF_TIME], INF_REPEAT, OutputHandler) ; } / / Set MsTimer2 pendant une minute par tick. MsTimer2::set (60000, EventFuse::burn) ; MsTimer2::start() ; } < /p >< p > void loop() {/ / Stream data. uint32_t maintenant = millis(); / / vérifier l’heure actuelle si (maintenant - lastStreamRunTime > = streamInterval) {lastStreamRunTime = maintenant; / / lorsque vous êtes prêt à intégrer la diffusion en continu de puissance BI, décommentez stream() ; dans la ligne suivante. / / stream();} / / Send SMS. if(sendText) {runSendSMS() ; sendText = false;}} < /p >< p > / / fonction pour envoyer un SMS via Temboo et Twilio runSendSMS() Sub {TembooChoreo SendSMSChoreo ; < /p >< p > / / appeler le client Temboo SendSMSChoreo.begin() ; < /p >< p > / / Temboo Set compte qualifications SendSMSChoreo.setAccountName(TEMBOO_ACCOUNT) ; SendSMSChoreo.setAppKeyName(TEMBOO_APP_KEY_NAME) ; SendSMSChoreo.setAppKey(TEMBOO_APP_KEY) ; < /p >< p > / / définir le profil à utiliser pour l’exécution. Notez que cela suppose que vous avez enregistré votre profil Twilio comme « MyTwilio ». SendSMSChoreo.setProfile("MyTwilio") ; Identifier la Choreo pour exécuter SendSMSChoreo.setChoreo("/Library/Twilio/SMSMessages/SendSMS") ; < /p >< p > / / Run la Choreo unsigned int returnCode = SendSMSChoreo.run() ; < /p >< p > / / lire et imprimer le message d’erreur tout en (SendSMSChoreo.available()) {char c = SendSMSChoreo.read() ; Serial.Print(c) ; } Serial.println() ; SendSMSChoreo.close() ; } < /p >< p > / / fonction de flux de données pour pouvoir BI stream() Sub {TembooChoreo stream ; < /p >< p > / / appeler la Temboo client stream.begin() ; < /p >< p > / / Temboo Set compte qualifications stream.setAccountName(TEMBOO_ACCOUNT) ; stream.setAppKeyName(TEMBOO_APP_KEY_NAME) ; stream.setAppKey(TEMBOO_APP_KEY) ; < /p >< p > / / identifier le choréo pour exécuter stream.setChoreo("/Library/Util/StreamSensorData") ; < /p >< p > / / définir le profil de Streaming à utiliser. / / Note que cette suppose que vous utilisez un profil nommé « MyPowerBI. » stream.setProfile("MyPowerBI") ; < /p >< p > / / générer des données de capteur de flux de données. Notez que cela suppose que vous diffusez des données de broche 8 à un champ électrique BI appelées « Température ». String pinData = "{" ; pinData += "\"Temperature\":" + String(digitalRead(8)) ; pinData += "}"; < /p >< p > / / ajouter des données de capteurs comme intrant pour le streaming Choreo stream.addInput ("SensorData", pinData) ; Remarque : pour le débogage set « Async » false (indiquant qu’une réponse doit être retournée) / / stream.addInput (« Async », « false »); < /p >< p > / / flux de données ; Lorsque les résultats sont disponibles, imprimez-les à serial stream.run() ; < /p >< p > while(stream.available()) {char c = stream.read() ; Serial.Print(c) ; } stream.close() ; }