Système de surveillance de la qualité de l'air intérieur et des déchets
Composants et fournitures
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 |
Applications et services en ligne
![]() |
| |||
| ||||
![]() |
| |||
![]() |
| |||
![]() |
|
À propos de ce projet
1. Présentation
Automatisation des bâtiments est le contrôle centralisé automatique du chauffage, de la ventilation et de la climatisation, de l'éclairage et d'autres systèmes d'un bâtiment via un système de gestion de bâtiment ou un système d'automatisation du bâtiment (BAS). Les objectifs de l'automatisation des bâtiments sont l'amélioration du confort des occupants, le fonctionnement efficace des systèmes du bâtiment, la réduction de la consommation d'énergie et des coûts d'exploitation, et l'amélioration du cycle de vie des services publics.

IOTA est une technologie de comptabilité distribuée open source, dont l'objectif est d'échanger en toute sécurité des informations et de la valeur dans l'Internet des objets. L'une des principales innovations d'IOTA est qu'au lieu de la Blockchain traditionnelle, elle utilise sa propre architecture (Tangle) basée sur un concept mathématique appelé Directed Acyclic Graph (DAG). Cette architecture permet qu'il n'y ait pas de commissions, que la latence du réseau soit faible et de meilleures perspectives d'évolutivité. L'IOTA est actuellement en cours de développement et on s'attend à ce que, tout au long de 2019, la technologie soit prête à être adoptée à grande échelle.

Les spécifications du Raspberry Pi 3 B inclure :
- CPU :ARM Cortex A53 64 bits quadricœur cadencé à 1,2 GHz.
- GPU :400 MHz VideoCore IV multimédia.
- Mémoire :1 Go LPDDR2-900 SDRAM (c'est-à-dire 900 MHz)
- Ports USB :4.
- Sorties vidéo :HDMI, vidéo composite (PAL et NTSC) via une prise jack 3,5 mm.
- Réseau :Ethernet 10/100 Mbit/s et LAN sans fil 802.11n.

Caractéristiques de l'Arduino UNO conseil :
- Microcontrôleur :ATmega328.
- Tension de fonctionnement :5 V.
- Tension d'entrée (recommandée) :7-12 V.
- Tension d'entrée (limites) :6-20 V.
- Broches d'E/S numériques :14 (dont 6 fournissent une sortie PWM)
- Broches d'entrée analogique :6.
- Courant CC par broche d'E/S :40 mA.
- Courant continu pour broche 3,3 V :50 mA.

NodeMCU , fonctionnalités :
- Enfin, module WiFi programmable.
- E/S matérielles de type Arduino (définies par logiciel).
- Peut être programmé avec l'IDE Arduino.
- USB-TTL inclus, plug &play.
- 10 GPIO D0-D10, fonctionnalité PWM, communication IIC et SPI, 1-Wire et ADC A0, etc. le tout dans une seule carte.

Ce projet est divisé en trois versions. Pour une meilleure compréhension du projet, nous l'avons divisé en chapitres suivants :
- 1. Présentation
- 2. Installation du logiciel
- 3. Système de surveillance de la qualité de l'air intérieur v1
- 4. Système de surveillance de la qualité de l'air intérieur v2
- 5. Système de surveillance des ordures
- 6. Conclusion
2. Installation du logiciel
a) Installer Raspbian sur le Raspberry PI 3 B
J'ai installé NOOBS , le lien de téléchargement et les instructions sont dans :https://www.raspberrypi.org/downloads/
b) Installez Node.JS
$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
$ sudo apt-get install -y nodejs
c) Téléchargez et construisez la bibliothèque BCM2835 sur le Raspberry Pi. Cette bibliothèque nous aide à travailler avec le capteur DHT11.
$ wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.56.tar.gz
$ tar zxvf bcm2835-1.56.tar.gz
$ cd bcm2835 -1.56
$ ./configure
$ make
$ sudo make check
$ sudo make install
d) Téléchargez et installez le projet de qualité de l'air intérieur-iota sur le Raspberry Pi
$ cd ~
$ git clone https://github.com/guilengap/indoor-air-quality-and-garbage-monitoring-system.git
$ cd indoor-air -quality-and-garbage-monitoring-system
$ npm install
e) Téléchargez et installez le port série
$ nmp installer le port série
f)
Téléchargez et installez l'IDE Arduino :
https://www.arduino.cc/en/Main/Software
3. Système de surveillance de la qualité de l'air intérieur v1
Les données du capteur DHT11 sont lues et publiées dans le Tangle à l'aide de MAM.
Comment ça marche ?
a) Le projet de qualité de l'air intérieur-iota a 3 fichiers de script java :
- sensor.js :Les données du capteur DHT11 sont lues et affichées :température et humidité.
- mam_sensor.js :Les données du capteur DHT11 sont lues et publiées dans l'IOTA Tangle à l'aide de MAM.
- mam_receive.js :extraire les données stockées de l'IOTA Tangle à l'aide de MAM et afficher les données.
b) Le point de terminaison du nœud complet et la clé latérale sont tous deux codés en dur dans les fichiers javascript. Pour arrêter l'exécution d'un script, appuyez sur CTRL+Z .
c) Connectez-vous à la carte Arduino UNO, le capteur DHT11.

d) Exécutez nodesensor.js pour vérifier si le Raspberry Pi peut lire les données de température et d'humidité du module de capteur DHT11.
$ node sensor.js
Ici, nous pouvons voir les données d'humidité et de température capturées par le capteur DHT11. Si tout va bien, alors nous passons à l'étape suivante.
e) Exécutez nœud mam_sensor.js . Ce script stockera les données de température et d'humidité du module de capteur DHT11 vers le Tangle.
$ nœud mam_sensor.js

Nous avons testé avec trois nœuds et avons obtenu de meilleurs résultats avec :https://potato.iotasalad.org:14265
//const iota =new IOTA({ provider :'https://nodes.testnet.iota.org:443' });
const iota =new IOTA({ provider :'https ://potato.iotasalad.org:14265' });
//const iota =new IOTA({ provider :'https://peanut.iotasalad.org:14265' });
Vous pouvez consulter quelques nœuds disponibles sur :https://iotasalad.org/nodes
Nous envoyons les informations suivantes :
- Ville :MEXIQUE
- Bâtiment : 65
- Date et heure (UTC) :ANNÉE. MOIS, JOUR, HEURE. MINUTES ET SECONDES
- Données :température en degrés Celsius et Fahrenheit et pourcentage d'humidité relative
f) Ouvrez un autre terminal et tapez :node mam_receive.js your_root et les données du capteur stockées sont affichées. Par exemple :
$ node mam_receive.js AMBTIKZKEVEEQFCUGIDUOLDOXL9OZQ9GOMNBFYHVRAUCAMHDQQJBSNAMFZYRLTUVAHFDINHTTFKIPELIG

Le code qui gère les données reçues est :
// RECEVOIR LES DONNÉES DU TANGLE
const executeDataRetrieval =async function(rootVal, keyVal) {
let resp =wait Mam.fetch(rootVal, MODE, keyVal, function(data) {
let json =JSON.parse(iota.utils.fromTrytes(data));
console.log(`Ville :${json.city}, Bâtiment :${json.building}, Heure :${json.dateTime} UTC, Données :${json.data}`);
});
}
Test
Images


4. Système de surveillance de la qualité de l'air intérieur v2
Les données des capteurs DHT11, MQ-2 et MQ-7 sont lues et publiées dans le Tangle à l'aide de MAM
Comment ça marche ?
a) Le projet de qualité de l'air intérieur-iota comporte 5 fichiers :
- sensorArduino.ino :Ce code sert à capturer les données des trois capteurs :capteur d'humidité et de température DHT11, capteur de gaz GPL MQ-2 et capteur de gaz CO MQ-7.
- listportsArduino.ino :Il nous montre les ports disponibles de la carte Arduino UNO.
- sensorArduino.js :Les données des capteurs DHT11, MQ-2 et MQ-7 sont lues et affichées.
- mam_sensorArduino.js :Les données des capteurs DHT11, MQ-2 et MQ-7 sont lues et publiées dans le Tangle à l'aide de MAM.
- mam_receiveArduino.js :extraire les données stockées du Tangle à l'aide de MAM et afficher les données.
b) Le point de terminaison du nœud complet et la clé latérale sont tous deux codés en dur dans les fichiers javascript. Pour arrêter l'exécution d'un script, appuyez sur CTRL+Z .
c) Connectez à la carte Arduino UNO, les capteurs :DHT11, MQ-2 et MQ-7.

d) Dans le dossier "sensorArduino", qui se trouve dans le projet indoor-air-quality-iota, nous avons les bibliothèques de capteurs :DHT11, MQ-2 et MQ7. Nous devons les installer dans les bibliothèques Arduino.
e) Téléchargez le croquis sensorArduino.ino , sur la carte Arduino UNO et exécutez-la. Sélectionnez le port de communication avec la carte Arduino UNO, dans mon cas c'est :Tools>Port>/dev/ttyACM0
f) Ouvrez un terminal et exécutez node listportsArduino.js pour vérifier que notre port est actif.
$ node listportsArduino.js

g)
Exécutez node mam_sensorArduino.js . Ce script stockera les données de la carte Arduino UNO vers le Tangle.
$ node mam_sensorArduino.js

Nous envoyons les informations suivantes :
- Ville :NY
- Bâtiment : 13
- Date et heure (UTC) :ANNÉE. MOIS, JOUR, HEURE. MINUTES ET SECONDES
- Données :gaz GPL en ppm, gaz CO en ppm, température en degrés Celsius, pourcentage d'humidité relative,
h) Ouvrez un autre terminal et tapez :node mam_receiveArduino.js your_root et les données du capteur stockées sont affichées. Par exemple :

Le code qui gère les données reçues est :
// RECEVOIR LES DONNÉES DU TANGLE
const executeDataRetrieval =async function(rootVal, keyVal) {
let resp =wait Mam.fetch(rootVal, MODE, keyVal, function(data) {
let json =JSON.parse(iota.utils.fromTrytes(data));
console.log(`Ville :${json.city}, Bâtiment :${json.building}, Heure :${json.time} UTC, Données :${json.data}`);
});
executeDataRetrieval(resp.nextRoot, keyVal);
}
Test
Images


5. Système de surveillance des ordures
Envoyer les données du capteur SRF05 à l'aide de NodeMCU et MQTT à IOTA Tangle à l'aide de MAM
Comment ça marche ?
a) Ce projet comporte 3 fichiers :
- poubelle.ino :Ce code calcule la quantité d'ordures, à l'intérieur d'une poubelle en %. Ensuite, envoyez les données à la carte Raspberry Pi 3B, en utilisant le protocole MQTT.
- nodemcu_mqtt_mam .js :Les données du capteur SRF05 sont lues et publiées dans le Tangle à l'aide de MAM.
- nodemcu_mam_receive.js :extraire les données stockées du Tangle à l'aide de MAM et afficher les données.
b) Le point de terminaison du nœud complet et la clé latérale sont tous deux codés en dur dans les fichiers javascript. Pour arrêter l'exécution d'un script, appuyez sur CTRL+Z .
c) Connectez-vous à la carte NodeMCU, les capteurs à ultrasons SRF05.

d) Installez les packages esp8266 à l'aide du gestionnaire de cartes. Ouvrez la fenêtre des préférences Arduino IDE et entrez dans le champ URL du gestionnaire de carte supplémentaire :http://arduino.esp8266.com/stable/package_esp8266com_index.json
Sélectionnez le menu :Tools> Board> Board Manager... Dans le champ de recherche, tapez :esp8266 et installez la dernière version.

e) Faisons maintenant communiquer le NodeMCU avec un serveur Mosquitto. Commencez par ajouter la bibliothèque PubSubClient à l'IDE Arduino. Cette bibliothèque est destinée à la messagerie MQTT et prend en charge NodeMCU.
- Sélectionnez le menu :Sketch > Inclure la bibliothèque > Gérer les bibliothèques
- Rechercher :PubSub
- Sélectionnez PubSubClient (Nick O'Leary) et installez la dernière version
f) Suivant installer Mosquitto (MQTT) sur le RaspberryPi 3B. Le protocole MQTT fournit une méthode légère d'exécution de messagerie à l'aide d'un modèle de publication/abonnement. Cela le rend adapté à la messagerie Internet des objets, par exemple avec des capteurs à faible puissance ou des appareils mobiles tels que des téléphones, des ordinateurs intégrés ou des microcontrôleurs. Connectez-vous à votre Raspberry Pi, ouvrez un terminal et tapez :
$ cd~
$ wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
$ apt-key add mosquitto-repo.gpg.key
$ cd /etc/apt/sources.list.d/$ wget http://repo.mosquitto.org/debian/mosquitto-stretch.list
Installez maintenant les éléments suivants :
$ cd~
$ wget http://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.0.0_1.0.1t-1+deb8u11_armhf .deb
$ sudo dpkg -i libssl1.0.0_1.0.1t-1+deb8u11_armhf.deb
$ wget http://ftp.nz.debian.org/debian/pool/main/libw/ libwebsockets/libwebsockets3_1.2.2-1_armhf.deb
$ sudo dpkg -i libwebsockets3_1.2.2-1_armhf.deb
La dernière version de libss... que vous pouvez trouver ici :http://security.debian.org/debian-security/pool/updates/main/o/openssl/
Installez le courtier MQTT et les clients moustiques.
$ sudo apt-get install mosquitto mosquitto-clients
Si vous rencontrez un problème avec l'installation de MQTT, vous pouvez essayer :
$ npm install mqtt --save
Redémarrez le Raspberry Pi. Ouvrez un terminal et vérifiez la version du moustique :
$ moustique -v
Vous pouvez démarrer et arrêter le serveur de moustiques :
$ sudo /etc/init.d/mosquitto start
$ sudo /etc/init.d/mosquitto stop
Nous vérifions l'IP du Raspberry Pi :
$ifconfig
g) Téléchargez le croquis trashcan.ino , à la carte NodeMCU. Vérifier les données suivantes :
- Carte NodeMCU 1.0
- Port série
- Serial.begin(115200);
- const char* wifi_ssid ="ARRIS-WXYZ" ;
- const char* wifi_password ="XXXXXXXXXXXX" ;
- const char* mqtt_server ="192.168.0.12" ; // IP FRAMBOISE
- int poubelle =25 ;// MA POUBELLE A 25 CM DE LONGUEUR

h) Exécutez nodemcu_mqtt_mam.js , ce script stockera les données de la carte NodeMCU vers le Tangle.
$ nodemcu_mqtt_mam.js

Nous envoyons les informations suivantes :
- Ville :BERLIN
- Bâtiment : 7
- Date et heure (UTC) :ANNÉE. MOIS, JOUR, HEURE. MINUTES ET SECONDES
- Données :pourcentage de la corbeille.
i) Ouvrez un autre terminal et tapez :node mam_receiveArduino.js your_root et les données du capteur stockées sont affichées. Par exemple :

Le code qui gère les données reçues est :
// RECEVOIR LES DONNÉES DU TANGLE
const executeDataRetrieval =async function(rootVal, keyVal) {
let resp =wait Mam.fetch(rootVal, MODE, keyVal, function(data) {
let json =JSON.parse(iota.utils.fromTrytes(data));
console.log(`City :${json.city}, Building :${json.building}, dateTime :${json.dateTime} UTC, Données :${json.data}`);
});
executeDataRetrieval(resp.nextRoot, keyVal);
}
A cette occasion le nœud disponible était différent :https://iotasalad.org/nodes
const iota =new IOTA({ provider :'https://durian.iotasalad.org:14265' });
Test
Images


6. Conclusion
Système de surveillance de la qualité de l'air intérieur v1 :
Ce projet a fonctionné de manière satisfaisante et nous surveillons la qualité de l'air à l'intérieur d'un bâtiment, comme le montrent les résultats obtenus. Nous simulons ce projet dans un immeuble situé à Mexico. Il s'agissait d'un test de base utilisant le capteur d'humidité et de température DHT11 et la carte Raspberry Pi 3B, le code Java Script et le protocole IOTA.
Système de surveillance de la qualité de l'air intérieur v2 :
Dans ce projet, nous avons utilisé les capteurs DHT11, MQ-2 (GPL) et MQ-7 (CO). À cette occasion. nous simulons la capture des données dans un bâtiment localisé à New York, et nous envoyons ces données à l'aide des cartes Arduino UNO et Raspberry Pi, à IOTA Tangle à l'aide de la messagerie authentifiée masquée (MAM). C'était un moyen pratique et rapide d'ajouter plus de capteurs. Cette version peut être utilisée dans les bâtiments intelligents et dans les industries où le GPL est utilisé et où le monoxyde de carbone est produit par les incendies.
Système de surveillance des ordures :
L'objectif de ce projet est de prendre le contrôle du dépôt d'ordures dans un bâtiment intelligent situé dans la ville de Berlin ou dans n'importe quel quartier. L'accumulation d'ordures, peut produire de mauvaises odeurs de produits en décomposition, mais maintenant nous pouvons savoir, combien de temps a une poubelle avec des ordures et le pourcentage de ces ordures.
Code
- sensor.js
- mam_sensor.js
- mam_receive.js
- mam_sensorArduino.js
- mam_receiveArduino.js
sensor.jsJavaScript
Système de surveillance de la qualité de l'air intérieur v1Code pour tester le capteur DHT11
const sensor =require('node-dht-sensor');const TIMEINTERVAL =10; // SECONDSconst SENSORTYPE =11; // 11=DHT11, 22=DHT22const GPIOPIN =4; // PIN GPIO FRAMBOISE DU DHT11 SENSORfunction readSensor(){ sensor.read(SENSORTYPE, GPIOPIN, function(err, temperature, humidité) { if (!err) { console.log('temp:' + temperature.toFixed(1 ) + 'C, ' + 'humidity:' + humidity.toFixed(1) + '%'); } else { console.log(err); } });}readSensor(); // METTRE À JOUR AUTOMATIQUEMENT LA VALEUR DU CAPTEUR CHAQUE 10 SECONDSsetInterval(readSensor, TIMEINTERVAL*1000);
mam_sensor.jsJavaScript
Système de surveillance de la qualité de l'air intérieur v1Ce code stocke les données de température et d'humidité du module de capteur DHT11 vers le capteur Tangle
const =require('node-dht-sensor');const Mam =require('./lib/mam.client.js');const IOTA =require('iota.lib.js');const moment =require('moment');//const iota =new IOTA({ provider:'https://nodes.testnet.iota.org:443 ' });const iota =new IOTA({ fournisseur :'https://potato.iotasalad.org:14265' });//const iota =new IOTA({ fournisseur :'https://peanut.iotasalad.org :14265' });const MODE ='restreint'; // PUBLIC, PRIVÉ OU RESTRICTEDconst SIDEKEY ='mysecret'; // UTILISÉ UNIQUEMENT EN MODE RESTREINTconst SECURITYLEVEL =3; const TIMEINTERVAL =30; // SECONDSconst SENSORTYPE =11; // 11=DHT11, 22=DHT22const GPIOPIN =14; // PIN GPIO FRAMBOISE DU CAPTEUR DHT11// INITIALISE MAM STATElet mamState =Mam.init(iota, undefined, SECURITYLEVEL); // CHANNEL MODEif (MODE =='restricted') { const key =iota.utils.toTrytes(SIDEKEY); mamState =Mam.changeMode(mamState, MODE, key);} else { mamState =Mam.changeMode(mamState, MODE);}// PUBLISH TO TANGLEconst publish =async function(packet) { // CREATE MAM PAYLOAD const trytes =iota .utils.toTrytes(JSON.stringify(paquet)); message const =Mam.create(mamState, trytes); // ENREGISTRER UN NOUVEAU MAMSSTATE mamState =message.state; console.log('Root :', message.root); console.log('Adresse :', message.address); // ATTACHEZ LA CHARGE UTILE wait Mam.attach(message.payload, message.address); return message.root;}function readSensor(){ sensor.read(SENSORTYPE, GPIOPIN, async function(err, temperature, humidité) { if (!err) { const city =('MEXICO'); const building =('65 '); const dateTime =moment().utc().format('YYYY/MM/DD hh:mm:ss'); const data =`{Temperature:${temperature.toFixed(1)}°C ($ {(temperature.toFixed(1)*1.8)+32}°F), Humidity :${humidity.toFixed(1)}%}` ; const json ={"data":data, "dateTime":dateTime, " building":building, "city":city} ; const root =wait publish(json); console.log(`City :${json.city}, Building :${json.building}, Time :${json. dateTime} UTC, Data :${json.data}, root :${root}`); } else { console.log(err); } });}// START ITreadSensor(); // MISE À JOUR AUTOMATIQUE DE LA VALEUR DU CAPTEUR TOUTES LES 30 SECONDSsetInterval(readSensor, TIMEINTERVAL*1000);
mam_receive.jsJavaScript
Système de surveillance de la qualité de l'air intérieur v1Les données du capteur stockées sont affichées.
const Mam =require('./lib/mam.client.js');const IOTA =require('iota.lib.js');//const iota =new IOTA( { fournisseur :'https://nodes.testnet.iota.org:443' });const iota =new IOTA({ fournisseur :'https://potato.iotasalad.org:14265' });//const iota =new IOTA({ provider:'https://peanut.iotasalad.org:14265' });const MODE ='restricted'; // PUBLIC, PRIVÉ OU RESTRICTEDconst SIDEKEY ='mysecret'; // UTILISE UNIQUEMENT EN MODE RESTREINTlet root;let key;// VÉRIFIEZ LES ARGUMENTSconst args =process.argv;if(args.length !=3) { console.log('Racine manquante en argument :node mam_receive.js'); process.exit();} else if(!iota.valid.isAddress(args[2])){ console.log('Vous avez entré une racine invalide :'+ args[2]); process.exit();} else { root =args[2];}// INITIALISE MAM STATElet mamState =Mam.init(iota); // SET CHANNEL MODEif (MODE =='restreint') { key =iota.utils .toTrytes(SIDEKEY); mamState =Mam.changeMode(mamState, MODE, key);} else { mamState =Mam.changeMode(mamState, MODE);}// RECEVOIR LES DONNÉES DU TANGLEconst executeDataRetrieval =async function(rootVal, keyVal) { let resp =wait Mam .fetch(rootVal, MODE, keyVal, function(data) { let json =JSON.parse(iota.utils.fromTrytes(data)); console.log(`City :${json.city}, Building :${json .building}, Heure :${json.dateTime} UTC, Données :${json.data}`); }); }executeDataRetrieval(root, key);
mam_sensorArduino.jsJavaScript
Système de surveillance de la qualité de l'air intérieur v2Les données des capteurs DHT11, MQ-2 et MQ-7 sont lues et publiées dans le Tangle à l'aide de MAM.
const SerialPort =require('serialport');const moment =require('moment');const IOTA =require ('iota.lib.js');const Mam =require('./lib/mam.client.js');//const iota =new IOTA({ provider:'https://nodes.testnet.iota. org:443' });const iota =new IOTA({ provider:'https://potato.iotasalad.org:14265' });const MODE ='restricted'; // PUBLIC, PRIVÉ, RESTRICTEDconst SIDEKEY ='mysecret'; // SEULEMENT CARACTÈRES ASCIIconst NIVEAU DE SÉCURITÉ =3; // 1, 2, 3const PORTNAME ='/dev/ttyACM1'; // ENTER VALID PORT const port =new SerialPort(PORTNAME, { baudRate:9600, autoOpen:true});const Readline =SerialPort.parsers.Readline;const parser =port.pipe(new Readline({ délimiteur:'\r\ n' }));// INITIALIZE MAM STATElet mamState =Mam.init(iota, undefined, SECURITYLEVEL); // SET CHANNEL MODEif (MODE =='restricted') { const key =iota.utils.toTrytes(SIDEKEY); mamState =Mam.changeMode(mamState, MODE, key);} else { mamState =Mam.changeMode(mamState, MODE);}// PUBLISH TO TANGLEconst publish =async function(packet) { // CREATE MAM PAYLOAD const trytes =iota .utils.toTrytes(JSON.stringify(paquet)); message const =Mam.create(mamState, trytes); // ENREGISTRER UN NOUVEAU MAMSSTATE mamState =message.state; console.log('Root :', message.root); console.log('Adresse :', message.address); // ATTACHEZ LA CHARGE UTILE wait Mam.attach(message.payload, message.address); return message.root;}// SERIAL PORT LIBRARY EVENTSport.on('open', showPortOpen);parser.on('data', readSerialData);port.on('close', showPortClose);port.on('error ', showError);// CALLBACK FUNCTIONSfunction showPortOpen() { console.log('Serial port open. Data rate:' + port.baudRate);}fonction async readSerialData(data){ let json ={}; const time =moment().utc().format('AAAA/MM/JJ hh:mm:ss'); ville const =('NY'); bâtiment const =('13'); json['heure'] =heure; json['ville'] =`${ville}`; json['bâtiment'] =`${bâtiment}`; json['données'] =`{${données}}`; console.log('json =',json); const root =wait publish(json);}function showPortClose() { console.log('Serial port closed.');}function showError(error) { console.log('Serial port error:' + error);}mam_receiveArduino.jsJavaScript
Système de surveillance de la qualité de l'air intérieur v2
Extrayez les données stockées du Tangle à l'aide de MAM et affichez les données.const Mam =require('./lib/mam.client.js');const IOTA =require('iota.lib.js');/ /const iota =new IOTA({ provider :'https://nodes.testnet.iota.org:443' });const iota =new IOTA({ provider :'https://potato.iotasalad.org:14265' });const MODE ='restreint'; // PUBLIC, PRIVÉ OU RESTRICTEDconst SIDEKEY ='mysecret'; // ENTRER UNIQUEMENT DES CARACTÈRES ASCIIlet root;let key;// VÉRIFIER LES ARGUMENTSconst args =process.argv;if(args.length !=3) { console.log('Racine manquante comme argument :node mam_receive.js' ); process.exit();} else if(!iota.valid.isAddress(args[2])){ console.log('Vous avez entré une racine invalide :'+ args[2]); process.exit();} else { root =args[2];}// INITIALIZE MAM STATElet mamState =Mam.init(iota); // SET CHANNEL MODEif (MODE =='restreint') { key =iota.utils .toTrytes(SIDEKEY); mamState =Mam.changeMode(mamState, MODE, key);} else { mamState =Mam.changeMode(mamState, MODE);}// RECEIVE DATA FROM THE TANGLEconst executeDataRetrieval =async function(rootVal, keyVal) { let resp =await Mam.fetch(rootVal, MODE, keyVal, function(data) { let json =JSON.parse(iota.utils.fromTrytes(data)); console.log(`City:${json.city}, Building:${json.building}, Time:${json.time} UTC, Data:${json.data}`); }); executeDataRetrieval(resp.nextRoot, keyVal);}executeDataRetrieval(root, key);
Schémas
Schematic diagram


Processus de fabrication
- Moniteur DIY Environnement et Qualité de l'Air
- Surveillance de la température ambiante avec un Raspberry Pi et Nagios
- Capteur de température Python et Raspberry Pi
- Surveillance de la température ambiante avec Moteino's et Raspberry Pi
- Système de capteur de mouvement infrarouge DIY pour Raspberry Pi
- Système de journal et d'alerte de la cellule photoélectrique Raspberry Pi
- Capteur de température et de luminosité Raspberry Pi
- Capteur de lumière activé par la voix et les SMS utilisant Raspberry Pi et Twilio
- Contrôle du capteur et de l'actionneur Raspberry Pi