Data sensor DHT11 dibaca dan dipublikasikan ke Tangle menggunakan MAM.
Disini kita bisa melihat data kelembaban dan suhu yang ditangkap oleh sensor DHT11. Jika semuanya baik-baik saja, maka kita lanjutkan ke langkah berikutnya.
Kami menguji dengan tiga node dan mendapatkan hasil yang lebih baik dengan:https://potato.iotasalad.org:14265
Anda dapat berkonsultasi dengan beberapa node yang tersedia di:https://iotasalad.org/nodes
Data sensor DHT11, MQ-2, dan MQ-7 dibaca dan dipublikasikan ke Tangle menggunakan MAM
$ node mam_sensorArduino.js
Kami mengirimkan informasi berikut:
- Kota:NY
- Gedung:13
- Tanggal dan Waktu (UTC):TAHUN. BULAN, HARI, JAM. MENIT DAN DETIK
- Data:Gas LPG dalam ppm, gas CO dalam ppm, Suhu dalam derajat Celcius, Persentase Kelembaban Relatif,
h) Buka terminal lain dan ketik:node mam_receiveArduino.js your_root dan data sensor yang disimpan ditampilkan. Misalnya:
Kode yang mengelola data yang diterima adalah:
// MENERIMA DATA DARI TANGLE
const executeDataRetrieval =fungsi asinkron(rootVal, keyVal) {
let resp =menunggu Mam.fetch(rootVal, MODE, keyVal, function(data) {
biarkan json =JSON.parse(iota.utils.fromTrytes(data));
console.log(`Kota:${json.city}, Bangunan:${json.building}, Waktu :${json.time} UTC, Data:${json.data}`);
});
executeDataRetrieval(resp.nextRoot, keyVal);
}
Uji
Gambar
5. Sistem Pemantauan Sampah
Kirim data sensor SRF05 menggunakan NodeMCU dan MQTT ke IOTA Tangle menggunakan MAM
Bagaimana cara kerjanya?
a) Proyek ini memiliki 3 file:
- tempat sampah.ino :Kode ini menghitung jumlah sampah, di dalam tempat sampah dalam %. Kemudian, kirim data ke board Raspberry Pi 3B, menggunakan protokol MQTT.
- nodemcu_mqtt_mam .js :Data sensor SRF05 dibaca dan dipublikasikan ke Tangle menggunakan MAM.
- nodemcu_mam_receive.js :Ekstrak data yang tersimpan dari Tangle menggunakan MAM dan tampilkan datanya.
b) Titik akhir simpul penuh dan kunci samping keduanya di-hardcode dalam file javascript. Untuk menghentikan skrip agar tidak berjalan, tekan CTRL+Z .
c) Hubungkan ke NodeMCUboard, sensor ultrasonik SRF05.
d) Instal paket esp8266 menggunakan Boards Manager. Buka jendela preferensi Arduino IDE dan masukkan di bidang URL Manajer Papan Tambahan:http://arduino.esp8266.com/stable/package_esp8266com_index.json
Pilih menu:Tools> Board> Board Manager... Di kolom pencarian, ketik:esp8266 dan instal versi terbaru.
e) Sekarang mari buat NodeMCU berkomunikasi dengan server mosquitto. Pertama mulai dengan menambahkan library PubSubClient ke Arduino IDE. Pustaka ini untuk pesan MQTT dan mendukung NodeMCU.
- Pilih menu:Sketsa> Sertakan Perpustakaan> Kelola Perpustakaan
- Telusuri:PubSub
- Pilih PubSubClient (Nick O'Leary) dan instal versi terbaru
f) Selanjutnya pasang Mosquitto (MQTT) pada RaspberryPi 3B. Protokol MQTT menyediakan metode ringan untuk melakukan pengiriman pesan menggunakan model publish/subscribe. Ini membuatnya cocok untuk pesan Internet of Things seperti dengan sensor daya rendah atau perangkat seluler seperti telepon, komputer tertanam, atau mikrokontroler. Masuk ke Raspberry Pi Anda, buka terminal dan ketik:
$ 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
Sekarang instal yang berikut ini:
$ 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
Versi terbaru libss... dapat Anda temukan di sini:http://security.debian.org/debian-security/pool/updates/main/o/openssl/
Instal broker MQTT dan klien nyamuk.
$ sudo apt-get install mosquitto mosquitto-clients
Jika Anda memiliki masalah dengan instalasi MQTT, Anda dapat mencoba:
$ npm install mqtt --save
Reboot Raspberry Pi. Buka terminal dan verifikasi versi nyamuk:
$ nyamuk -v
Anda dapat memulai dan menghentikan server nyamuk:
$ sudo /etc/init.d/mosquitto start
$ sudo /etc/init.d/mosquitto stop
Kami memverifikasi IP Raspberry Pi:
$ ifconfig
g) Unggah sketsa trashcan.ino , ke papan NodeMCU. Verifikasi data berikutnya:
- Papan NodeMCU 1.0
- Port Serial
- Serial.begin(115200);
- const char* wifi_ssid ="ARRIS-WXYZ";
- const char* wifi_password ="XXXXXXXXXXXX";
- const char* mqtt_server ="192.168.0.12"; // IP RASPBERRY
- int tempat sampah =25;// SAMPAH SAYA MEMILIKI PANJANG 25 CM
h) Jalankan nodemcu_mqtt_mam.js , skrip ini akan menyimpan data dari papan NodeMCU ke Tangle.
$ nodemcu_mqtt_mam.js
Kami mengirimkan informasi berikut:
- Kota:BERLIN
- Gedung:7
- Tanggal dan Waktu (UTC):TAHUN. BULAN, HARI, JAM. MENIT DAN DETIK
- Data:persentase tempat sampah.
i) Buka terminal lain dan ketik:node mam_receiveArduino.js your_root dan data sensor yang disimpan ditampilkan. Misalnya:
Kode yang mengelola data yang diterima adalah:
// MENERIMA DATA FRON THE TANGLE
const executeDataRetrieval =fungsi asinkron(rootVal, keyVal) {
let resp =menunggu 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, Data:${json.data}`);
});
executeDataRetrieval(resp.nextRoot, keyVal);
}
Pada kesempatan ini node yang tersedia berbeda:https://iotasalad.org/nodes
const iota =new IOTA({ provider:'https://durian.iotasalad.org:14265' });
Uji
Gambar
6. Kesimpulan
Sistem Pemantauan Kualitas Udara Dalam Ruangan v1:
Proyek ini telah berjalan dengan baik dan kami memantau kualitas udara di dalam suatu gedung, seperti yang dapat kita lihat pada hasil yang diperoleh. Kami mensimulasikan proyek ini di sebuah bangunan yang terletak di Mexico City. Ini adalah pengujian dasar menggunakan sensor Kelembaban dan Suhu DHT11 dan papan Raspberry Pi 3B, kode Java Script, dan protokol IOTA.
Sistem Pemantauan Kualitas Udara Dalam Ruangan v2:
Dalam proyek ini kami telah menggunakan Sensor DHT11, MQ-2 (LPG) dan MQ-7 (CO). Pada kesempatan ini. kami mensimulasikan pengambilan data di gedung yang berlokasi di New York City, dan kami mengirim data ini menggunakan papan Arduino UNO dan Raspberry Pi, ke IOTA Tangle menggunakan Masked Authenticated Messaging (MAM). Ini adalah cara praktis dan cepat untuk menambahkan lebih banyak sensor. Versi ini dapat digunakan di gedung pintar dan industri di mana gas LP digunakan dan di mana karbon monoksida dihasilkan oleh kebakaran.
Sistem Pemantauan Sampah:
Tujuan dari proyek ini adalah untuk mengendalikan timbunan sampah di gedung pintar yang terletak di kota Berlin atau Distrik mana pun. Penumpukan sampah, dapat menghasilkan bau tidak sedap dari produk yang didekomposisi, tetapi sekarang kita dapat mengetahui, berapa lama kapal sampah dengan sampah dan persentase sampah ini.
Kode
- sensor.js
- mam_sensor.js
- mam_receive.js
- mam_sensorArduino.js
- mam_receiveArduino.js
sensor.jsJavaScript
Sistem Pemantauan Kualitas Udara Dalam Ruangan v1
Kode untuk menguji sensor DHT11const sensor =require('node-dht-sensor');const TIMEINTERVAL =10; // SECONDSconst SENSORTYPE =11; // 11=DHT11, 22=DHT22konst GPIOPIN =4; // PIN GPIO RASPBERRY DARI SENSOR DHT11fungsi readSensor(){ sensor.read(SENSORTYPE, GPIOPIN, function(err, temperatur, kelembaban) { if (!err) { console.log('temp:' + temperature.toFixed(1 ) + 'C, ' + 'humidity:' + moisture.toFixed(1) + '%'); } else { console.log(err); } });}readSensor();// OTOMATIS UPDATE SENSOR NILAI SETIAP 10 SECONDSsetInterval(readSensor, TIMEINTERVAL*1000);
mam_sensor.jsJavaScript
Sistem Pemantauan Kualitas Udara Dalam Ruangan v1
Kode ini menyimpan data suhu dan kelembaban dari modul sensor DHT11 ke Tangleconst sensor =require('node-dht-sensor');const Mam =require('./lib/mam.client.js');const IOTA =membutuhkan('iota.lib.js');const momen =membutuhkan('moment');//const iota =new IOTA({ penyedia:'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' });const MODE ='dibatasi'; // PUBLIK, SWASTA ATAU TERBATASconst SIDEKEY ='rahasiaku'; // DIGUNAKAN HANYA DALAM MODE TERBATAS, TINGKAT KEAMANAN =3; const INTERVAL WAKTU =30; // SECONDSconst SENSORTYPE =11; // 11=DHT11, 22=DHT22konst GPIOPIN =14; // PIN GPIO RASPBERRY DARI SENSOR DHT11// INITIALIZE 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 =sedikit .utils.toTrytes(JSON.stringify(paket)); const pesan =Mam.create(mamState, trytes); // SIMPAN MAMSTATE BARU mamState =message.state; console.log('Akar:', pesan.root); console.log('Alamat:', pesan.alamat); // Lampirkan PAYLOAD menunggu Mam.attach(message.payload, message.address); return message.root;}function readSensor(){ sensor.read(SENSORTYPE, GPIOPIN, async function(err, temperature, moisture) { if (!err) { const city =('MEKSIKO'); const building =('65 '); const dateTime =momen().utc().format('YYYY/MM/DD jj:mm:ss'); const data =`{Suhu:${temperature.toFixed(1)}°C ($ {(temperature.toFixed(1)*1.8)+32}°F), Kelembaban:${humidity.toFixed(1)}%}`; const json ={"data":data, "dateTime":dateTime, " building":building, "city":city}; const root =menunggu publish(json); console.log(`City:${json.city}, Building:${json.building}, Time:${json. dateTime} UTC, Data:${json.data}, root:${root}`); } else { console.log(err); } });}// MULAI ITreadSensor();// AUTOMATICALLY UPDATE SENSOR NILAI SETIAP 30 DETIKsetInterval(readSensor, TIMEINTERVAL*1000);
mam_receive.jsJavaScript
Sistem Pemantauan Kualitas Udara Dalam Ruangan v1
Data sensor yang disimpan ditampilkan.const Mam =require('./lib/mam.client.js');const IOTA =require('iota.lib.js');//const iota =new IOTA( { penyedia:'https://nodes.testnet.iota.org:443' });const iota =new IOTA({ penyedia:'https://potato.iotasalad.org:14265' });//const iota =new IOTA({ provider:'https://peanut.iotasalad.org:14265' });const MODE ='restricted'; // PUBLIK, SWASTA ATAU TERBATASconst SIDEKEY ='rahasiaku'; // HANYA DIGUNAKAN DALAM MODE TERBATAS root;let key;// PERIKSA ARGUMENTSconst args =process.argv;if(args.length !=3) { console.log('Missing root as argument:node mam_receive.js '); process.exit();} else if(!iota.valid.isAddress(args[2])){ console.log('Anda telah memasukkan root yang tidak valid:'+ args[2]); process.exit();} else { root =args[2];}// INITIALISE MAM STATElet mamState =Mam.init(iota);// SET CHANNEL MODEif (MODE =='restricted') { key =iota.utils .toTrytes(SIDEKEY); mamState =Mam.changeMode(mamState, MODE, key);} else { mamState =Mam.changeMode(mamState, MODE);}// MENERIMA DATA DARI TANGLEconst executionDataRetrieval =async function(rootVal, keyVal) { let resp =menunggu Mam .fetch(rootVal, MODE, keyVal, function(data) { biarkan json =JSON.parse(iota.utils.fromTrytes(data)); console.log(`City:${json.city}, Building:${json .building}, Waktu:${json.dateTime} UTC, Data:${json.data}`); }); }executeDataRetrieval(root, kunci);
mam_sensorArduino.jsJavaScript
Sistem Pemantauan Kualitas Udara Dalam Ruangan v2
Data sensor DHT11, MQ-2, dan MQ-7 dibaca dan dipublikasikan ke Tangle menggunakan MAM.const SerialPort =require('serialport');const moment =require('moment');const IOTA =memerlukan ('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, PRIVATE, RESTRICTEDconst SIDEKEY ='rahasiaku'; // HANYA ASCII CHARACTERSconst SECURITYLEVEL =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({ pembatas:'\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 =sedikit .utils.toTrytes(JSON.stringify(paket)); const pesan =Mam.create(mamState, trytes); // SIMPAN MAMSTATE BARU mamState =message.state; console.log('Akar:', pesan.root); console.log('Alamat:', pesan.alamat); // Lampirkan PAYLOAD menunggu 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);}fungsi async readSerialData(data){ let json ={}; const waktu =momen().utc().format('YYYY/MM/DD jj:mm:dd'); const kota =('NY'); bangunan const =('13'); json['waktu'] =waktu; json['kota'] =`${kota}`; json['bangunan'] =`${bangunan}`; json['data'] =`{${data}}`; console.log('json =',json); const root =await publish(json);}function showPortClose() { console.log('Serial port closed.');}function showError(error) { console.log('Serial port error:' + error);}
mam_receiveArduino.jsJavaScript
Indoor Air Quality Monitoring System v2
Extract the stored data from the Tangle using MAM and display the data.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 ='restricted'; // PUBLIC, PRIVATE OR RESTRICTEDconst SIDEKEY ='mysecret'; // ENTER ONLY ASCII CHARACTERSlet root;let key;// CHECK THE ARGUMENTSconst args =process.argv;if(args.length !=3) { console.log('Missing root as argument:node mam_receive.js '); process.exit();} else if(!iota.valid.isAddress(args[2])){ console.log('You have entered an invalid root:'+ args[2]); process.exit();} else { root =args[2];}// INITIALIZE MAM STATElet mamState =Mam.init(iota);// SET CHANNEL MODEif (MODE =='restricted') { 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);
Skema
Schematic diagram Schematic diagram Schematic diagram