工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

室内空気質およびごみ監視システム

コンポーネントと消耗品

>
Raspberry Pi3モデルB
× 1
Arduino UNO
× 1
NodeMCUESP8266ブレイクアウトボード
× 1
DHT11温度および湿度センサー(4ピン)
× 1
Seed Grove-ガスセンサー(MQ2)
× 1
MQ-7 COガスセンサー(汎用)
× 1
超音波センサー-HC-SR04(汎用)
× 1
ラズベリーパイ電源
× 1
HDMIケーブル
× 1
USB-AからBへのケーブル
× 1
ジャンパー線(汎用)
× 1
5Vバッテリー(汎用)
× 1

アプリとオンラインサービス

>
IOTA Tangle
Node.js
Raspberry Pi Raspbian
Arduino IDE
MQTT

このプロジェクトについて

1.はじめに

ビルディングオートメーション は、ビル管理システムまたはビルディングオートメーションシステム(BAS)を介した、ビルの暖房、換気、空調、照明、およびその他のシステムの自動集中制御です。ビルディングオートメーションの目的は、居住者の快適性の向上、ビルシステムの効率的な運用、エネルギー消費と運用コストの削減、およびユーティリティのライフサイクルの改善です。

<図>

IOTA はオープンソースの分散型会計テクノロジーであり、その目的はモノのインターネットで情報と価値を安全に交換することです。 IOTAの主な革新の1つは、従来のブロックチェーンの代わりに、有向非巡回グラフ(DAG)と呼ばれる数学的概念に基づく独自のアーキテクチャ(Tangle)を使用することです。このアーキテクチャにより、手数料が発生せず、ネットワークの遅延が少なくなり、スケーラビリティの観点が改善されます。 IOTAは現在開発中であり、2019年を通じて、このテクノロジーを大規模に採用する準備が整うと予想されています。

<図>

Raspberry Pi 3 B の仕様 含める:

  • CPU:1.2GHzでクロックされるクアッドコア64ビットARMCortexA53。
  • GPU:400MHz VideoCoreIVマルチメディア。
  • メモリ:1GB LPDDR2-900 SDRAM(つまり、900MHz)
  • USBポート:4。
  • ビデオ出力:HDMI、3.5 mmジャックを介したコンポジットビデオ(PALおよびNTSC)。
  • ネットワーク:10 / 100Mbpsイーサネットおよび802.11nワイヤレスLAN。
<図>

Arduino UNO の機能 ボード

  • マイクロコントローラー:ATmega328。
  • 動作電圧:5V。
  • 入力電圧(推奨):7-12V。
  • 入力電圧(制限):6〜20V。
  • デジタルI / Oピン:14個(うち6個はPWM出力を提供)
  • アナログ入力ピン:6。
  • I / OピンあたりのDC電流:40mA。
  • 3.3VピンのDC電流:50mA。
<図>

NodeMCU 、機能:

  • 最後に、プログラム可能なWiFiモジュール。
  • Arduinoのような(ソフトウェア定義の)ハードウェアIO。
  • ArduinoIDEでプログラムできます。
  • USB-TTLが含まれ、プラグアンドプレイ。
  • 10個のGPIOD0〜D10、PWM機能、IICおよびSPI通信、1-WireおよびADCA0などがすべて1つのボードに含まれています。
<図>

このプロジェクトは3つのバージョンに分かれています。プロジェクトをよりよく理解するために、プロジェクトを次の章に分けました。

  • 1。はじめに
  • 2。ソフトウェアのインストール
  • 3。室内空気質監視システムv1
  • 4。室内空気質監視システムv2
  • 5。ごみ監視システム
  • 6。結論

2.ソフトウェアのインストール

a) Raspberry PI 3BにRaspbianをインストールする

NOOBS をインストールしました 、ダウンロードリンクと手順は次の場所にあります:https://www.raspberrypi.org/downloads/

b) Node.JSをインストールする

  $ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash- 
$ sudo apt-get install -y nodejs

c) RaspberryPiにBCM2835ライブラリをダウンロードしてビルドします。このライブラリは、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) RaspberryPiにindoor-air-quality-iotaプロジェクトをダウンロードしてインストールします

  $ cd〜 
$ git clone https://github.com/guillengap/indoor-air-quality-and-garbage-monitoring-system.git
$ cd Indoor-air -quality-and-garbage-monitoring-system
$ npm install

e) シリアルポートをダウンロードしてインストールする

  $ nmp install serialport  

<コード> f) Arduino IDEをダウンロードしてインストールします:

https://www.arduino.cc/en/Main/Software

3.室内空気質監視システムv1

DHT11センサーデータは、MAMを使用して読み取られ、Tangleに公開されます。

どのように機能しますか?

a) Indoor-air-quality-iotaプロジェクトには、3つのJavaスクリプトファイルがあります。

  • Sensor.js :DHT11センサーデータが読み取られて表示されます:温度と湿度。
  • mam_sensor.js :DHT11センサーデータが読み取られ、MAMを使用してIOTATangleに公開されます。
  • mam_receive.js :MAMを使用してIOTA Tangleから保存されたデータを抽出し、データを表示します。

b) フルノードのエンドポイントとサイドキーは、どちらもjavascriptファイルにハードコードされています。スクリプトの実行を停止するには、 CTRL + Z を押します。

c) ArduinoUNOボードであるDHT11センサーに接続します。

<図>

d) nodesensor.js を実行します RaspberryPiがDHT11センサーモジュールから温度と湿度のデータを読み取れるかどうかを確認します。

  $ node Sensor.js  

ここでは、DHT11センサーによってキャプチャされた湿度と温度のデータを確認できます。すべてが順調であれば、次のステップに進みます。

e) ノードを実行します mam_sensor.js 。このスクリプトは、DHT11センサーモジュールからの温度と湿度のデータをTangleに保存します。

  $ node mam_sensor.js  
<図>

3つのノードでテストしたところ、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({プロバイダー:' https://peanut.iotasalad.org:14265 '});

https://iotasalad.org/nodes

で利用可能なノードを参照できます。

次の情報を送信しています:

  • 市:メキシコ
  • 建物:65
  • 日付と時刻(UTC):年。月、日、時間。分と秒
  • データ:摂氏と華氏の温度と相対湿度のパーセンテージ

f) 別のターミナルを開き、次のように入力します: node mam_receive.js your_root 保存されているセンサーデータが表示されます。例:

  $ node mam_receive.js AMBTIKZKEVEEQFCUGIDUOLDOXL9OZQ9GOMNBFYHVRAUCAMHDQQJBSNAMFZYRLTUVAHFDINHTTFKIPELIG  
<図>

受信したデータを管理するコードは次のとおりです。

  //もつれからデータを受け取る
const 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.dateTime} UTC、データ:$ {json.data} `);
});
}

テスト

画像

<図> <図>

4.室内空気質監視システムv2

DHT11、MQ-2、およびMQ-7センサーのデータは、MAMを使用して読み取られ、Tangleに公開されます

どのように機能しますか?

a) Indoor-Air-quality-iotaプロジェクトには5つのファイルがあります:

  • SensorArduino.ino :このコードは、DHT11湿度および温度センサー、MQ-2 LPGガスセンサー、およびMQ-7COガスセンサーの3つのセンサーのデータをキャプチャするためのものです。
  • listportsArduino.ino :ArduinoUNOボードの利用可能なポートが表示されます。
  • SensorArduino.js :DHT11、MQ-2、およびMQ-7センサーのデータが読み取られて表示されます。
  • mam_sensorArduino.js :DHT11、MQ-2、およびMQ-7センサーのデータは、MAMを使用して読み取られ、Tangleに公開されます。
  • mam_receiveArduino.js :MAMを使用してTangleから保存されたデータを抽出し、データを表示します。

b) フルノードのエンドポイントとサイドキーは、どちらもjavascriptファイルにハードコードされています。スクリプトの実行を停止するには、 CTRL + Z を押します。

c) Arduino UNOボード、センサー(DHT11、MQ-2、MQ-7)に接続します。

<図>

d) Indoor-air-quality-iotaプロジェクトにある「sensorArduino」フォルダーには、DHT11、MQ-2、MQ7のセンサーライブラリがあります。 Arduinoライブラリにインストールする必要があります。

e) スケッチをアップロードする SensorArduino.ino 、ArduinoUNOボードに接続して実行します。 Arduino UNOボードとの通信ポートを選択します。私の場合は、[ツール]> [ポート]> / dev / ttyACM0

です。

f) ターミナルを開き、 node listportsArduino.js を実行します ポートがアクティブであることを確認します。

  $ node listportsArduino.js  
<図>

<コード> g) node mam_sensorArduino.js を実行します 。このスクリプトは、ArduinoUNOボードからTangleにデータを保存します。

  $ node mam_sensorArduino.js  
<図>

次の情報を送信しています:

  • 市:ニューヨーク
  • 建物:13
  • 日付と時刻(UTC):年。月、日、時間。分と秒
  • データ:LPGガス(ppm)、COガス(ppm)、温度(摂氏)、相対湿度パーセンテージ

h) 別のターミナルを開き、次のように入力します: node mam_receiveArduino.js your_root 保存されているセンサーデータが表示されます。例:

<図>

受信したデータを管理するコードは次のとおりです。

  //もつれからデータを受け取る
const 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、データ:$ {json.data} `);
});
executeDataRetrieval(resp.nextRoot、keyVal);
}

テスト

画像

<図> <図>

5.ごみ監視システム

NodeMCUとMQTTを使用してSRF05センサーデータをMAMを使用してIOTATangleに送信する

どのように機能しますか?

a) このプロジェクトには3つのファイルがあります:

  • trashcan.ino :このコードは、ゴミ箱の中のゴミの量を%で計算します。次に、MQTTプロトコルを使用して、データをRaspberry Pi3Bボードに送信します。
  • nodemcu_mqtt_mam .js :SRF05センサーデータが読み取られ、MAMを使用してTangleに公開されます。
  • nodemcu_mam_receive.js :MAMを使用してTangleから保存されたデータを抽出し、データを表示します。

b) フルノードのエンドポイントとサイドキーは、どちらもjavascriptファイルにハードコードされています。スクリプトの実行を停止するには、 CTRL + Z を押します。

c) NodeMCUboard、SRF05超音波センサーに接続します。

<図>

d) BoardsManagerを使用してesp8266パッケージをインストールします。 Arduino IDE設定ウィンドウを開き、[追加のボードマネージャーURL]フィールドに入力します:http://arduino.esp8266.com/stable/package_esp8266com_index.json

メニューを選択します:[ツール]> [ボード]> [ボードマネージャー...]検索フィールドに「esp8266」と入力し、最新バージョンをインストールします。

<図>

e) 次に、NodeMCUをmosquittoサーバーと通信させます。まず、PubSubClientライブラリをArduinoIDEに追加することから始めます。このライブラリはMQTTメッセージング用であり、NodeMCUをサポートしています。

  • メニューの選択:スケッチ>ライブラリを含める>ライブラリの管理
  • 検索:PubSub
  • PubSubClient(Nick O'Leary)を選択し、最新バージョンをインストールします

f) 次に Mosquitto(MQTT)をインストールします RaspberryPi3Bで。 MQTTプロトコルは、パブリッシュ/サブスクライブモデルを使用してメッセージングを実行する軽量の方法を提供します。これにより、低電力センサーなどのモノのインターネットメッセージングや、電話、組み込みコンピューター、マイクロコントローラーなどのモバイルデバイスに適しています。 Raspberry Piにログインし、ターミナルを開いて次のように入力します。

  $ 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

次に、以下をインストールします。

  $ 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

libss ...最新バージョンはここにあります:http://security.debian.org/debian-security/pool/updates/main/o/openssl/

MQTTブローカーと蚊のクライアントをインストールします。

  $ sudo apt-get install mosquitto mosquitto-clients  

MQTTのインストールに問題がある場合は、次のことを試すことができます。

  $ npm install mqtt --save  

RaspberryPiを再起動します。ターミナルを開き、蚊のバージョンを確認します:

  $ mosquito -v  

モスキートサーバーを起動および停止できます:

  $ sudo /etc/init.d/mosquitto start 
$ sudo /etc/init.d/mosquitto stop

Raspberry PiのIPを確認します:

  $ ifconfig  

g) スケッチをアップロードする trashcan.ino 、NodeMCUボードに。次のデータを確認します:

  • NodeMCU1.0ボード
  • シリアルポート
  • Serial.begin(115200);
  • const char * wifi_ssid ="ARRIS-WXYZ";
  • const char * wifi_password ="XXXXXXXXXXXX";
  • const char * mqtt_server ="192.168.0.12"; //ラズベリーIP
  • int trashcan =25; //私のゴミ箱には25cmの長さがあります
<図>

h) nodemcu_mqtt_mam.js を実行します 、このスクリプトは、NodeMCUボードからTangleにデータを保存します。

  $ nodemcu_mqtt_mam.js  
<図>

次の情報を送信しています:

  • 市:ベルリン
  • 建物:7
  • 日付と時刻(UTC):年。月、日、時間。分と秒
  • データ:ゴミ箱の割合。

i) 別のターミナルを開き、次のように入力します: node mam_receiveArduino.js your_root 保存されているセンサーデータが表示されます。例:

<図>

受信したデータを管理するコードは次のとおりです。

  //タングルからデータを受信
const 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}、dateTime :$ {json.dateTime} UTC、データ:$ {json.data} `);
});
executeDataRetrieval(resp.nextRoot、keyVal);
}

この場合、使用可能なノードは異なります:https://iotasalad.org/nodes

  const iota =new IOTA({provider: 'https://durian.iotasalad.org:14265'});  

テスト

画像

<図> <図>

6.結論

室内空気質監視システムv1:

このプロジェクトは順調に進んでおり、得られた結果からわかるように、建物内の空気の質を監視しています。メキシコシティにある建物でこのプロジェクトをシミュレートします。これは、DHT11湿度および温度センサーとRaspberry Pi 3Bボード、Javaスクリプトコード、およびIOTAプロトコルを使用した基本的なテストでした。

室内空気質監視システムv2:

このプロジェクトでは、DHT11、MQ-2(LPG)、およびMQ-7(CO)センサーを使用しました。この機会に。ニューヨーク市にある建物でのデータのキャプチャをシミュレートし、ArduinoUNOおよびRaspberryPiボードを使用してこのデータを、Masked Authenticated Messaging(MAM)を使用してIOTATangleに送信します。これは、センサーを追加するための実用的で迅速な方法でした。このバージョンは、スマートビルディングや、LPガスが使用され、一酸化炭素が火災によって生成される業界で使用できます。

ごみ監視システム:

このプロジェクトの目標は、ベルリン市または任意の地区にあるスマートビルディングのごみの堆積を管理することです。ごみがたまると、分解時に製品の悪臭が発生する可能性がありますが、ごみの入ったゴミ箱の長さとこのごみの割合を知ることができます。


コード

  • Sensor.js
  • mam_sensor.js
  • mam_receive.js
  • mam_sensorArduino.js
  • mam_receiveArduino.js
Sensor.js JavaScript
室内空気質監視システムv1
DHT11センサーをテストするコード
 const Sensor =require( 'node-dht-sensor'); const TIMEINTERVAL =10; // SECONDSconst SENSORTYPE =11; // 11 =DHT11、22 =DHT22const GPIOPIN =4; // DHT11センサーからのRASPBERRYGPIO PINfunction readSensor(){sensor.read(SENSORTYPE、GPIOPIN、function(err、temperature、heimumty){if(!err){console.log( 'temp:' + temperature.toFixed(1 )+ 'C、' + '湿度:' +湿度.toFixed(1)+ '%');} else {console.log(err);}});} readSensor(); //センサー値をすべて自動的に更新10 SECONDSsetInterval(readSensor、TIMEINTERVAL * 1000); 
mam_sensor.js JavaScript
室内空気質監視システムv1
このコードは、DHT11センサーモジュールからTangleに温度と湿度のデータを保存します
 constsensor =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({プロバイダー: 'https://nodes.testnet.iota.org:443 '}); const iota =new IOTA({プロバイダー:' https://potato.iotasalad.org:14265 '}); // const iota =new IOTA({プロバイダー:' https://peanut.iotasalad.org :14265 '}); const MODE ='制限付き '; // PUBLIC、PRIVATE、またはRESTRICTEDconst SIDEKEY ='mysecret'; //制限付きモードでのみ使用constSECURITYLEVEL =3; const TIMEINTERVAL =30; // SECONDSconst SENSORTYPE =11; // 11 =DHT11、22 =DHT22const GPIOPIN =14; // DHT11センサーからのRASPBERRYGPIO PIN // MAMSTATEの初期化letmamState =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);} //もつれに公開constpublish =async function(packet){// CREATE MAM PAYLOAD const trytes =iota .utils.toTrytes(JSON.stringify(packet)); const message =Mam.create(mamState、trytes); //新しいMAMSTATEを保存mamState =message.state; console.log( 'ルート:'、message.root); console.log( 'アドレス:'、message.address); //ペイロードを添付awaitMam.attach(message.payload、message.address); return message.root;} function readSensor(){sensor.read(SENSORTYPE、GPIOPIN、async function(err、temperature、Hydrium){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.toFixed(1)}%} `; const json ={" data ":data、" dateTime ":dateTime、" building ":building、" city ":city}; const root =await publish(json); console.log(` City:$ {json.city}、Building:$ {json.building}、Time:$ {json。 dateTime} UTC、データ:$ {json.data}、root:$ {root} `);} else {console.log(err);}});} // START ITreadSensor(); //センサー値を自動的に更新30秒ごとsetInterval(readSensor、TIMEINTERVAL * 1000); 
mam_receive.js JavaScript
室内空気質監視システムv1
保存されたセンサーデータが表示されます。
 constMam =require( './ lib / mam.client.js'); const IOTA =require( 'iota.lib.js'); // const iota =new IOTA( {プロバイダー: 'https://nodes.testnet.iota.org:443'}); const iota =new IOTA({プロバイダー: 'https://potato.iotasalad.org:14265'}); // const iota =new IOTA({プロバイダー: 'https://peanut.iotasalad.org:14265'}); const MODE ='制限付き'; // PUBLIC、PRIVATE、またはRESTRICTEDconst SIDEKEY ='mysecret'; //制限付きモードでのみ使用letroot; let key; //引数を確認constargs =process.argv; if(args.length!=3){console.log( '引数としてrootがありません:node mam_receive.js  '); process.exit();} else if(!iota.valid.isAddress(args [2])){console.log( '無効なルートを入力しました:' + 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);} //タングルからデータを受信するconstexecuteDataRetrieval =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}、時間:$ {json.dateTime} UTC、データ:$ {json.data} `);}); } executeDataRetrieval(root、key); 
mam_sensorArduino.js JavaScript
室内空気質監視システムv2
DHT11、MQ-2、およびMQ-7センサーのデータは、MAMを使用して読み取られ、Tangleに公開されます。
 constSerialPort =require( 'serialport'); const moment =require( 'moment'); const IOTA =require ( 'iota.lib.js'); const Mam =require( './ lib / mam.client.js'); // const iota =new IOTA({プロバイダー: 'https://nodes.testnet.iota。 org:443 '}); const iota =new IOTA({provider:' https://potato.iotasalad.org:14265 '}); const MODE =' restricted '; // PUBLIC、PRIVATE、RESTRICTEDconst SIDEKEY ='mysecret'; // ASCII文字のみconstSECURITYLEVEL =3; // 1、2、3const PORTNAME ='/ dev / ttyACM1'; //有効なポートを入力constport =new SerialPort(PORTNAME、{baudRate:9600、autoOpen:true}); const Readline =SerialPort.parsers.Readline; const parser =port.pipe(new Readline({delimiter: '\ r \ n '})); // MAMSTATEの初期化letmamState =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);} //もつれに公開constpublish =async function(packet){// CREATE MAM PAYLOAD const trytes =iota .utils.toTrytes(JSON.stringify(packet)); const message =Mam.create(mamState、trytes); //新しいMAMSTATEを保存mamState =message.state; console.log( 'ルート:'、message.root); console.log( 'アドレス:'、message.address); //ペイロードを添付awaitMam.attach(message.payload、message.address); return message.root;} //シリアルポートライブラリイベントSport.on( 'open'、showPortOpen); parser.on( 'data'、readSerialData); port.on( 'close'、showPortClose); port.on( 'error '、showError); // CALLBACK FUNCTIONSfunction showPortOpen(){console.log('シリアルポートが開いています。データレート: '+ port.baudRate);}非同期関数readSerialData(data){let json ={}; const time =moment()。utc()。format( 'YYYY / MM / DD hh:mm:ss'); const city =( 'NY'); const building =( '13'); json ['time'] =時間; json ['city'] =`$ {city}`; json ['building'] =`$ {building}`; json ['data'] =`{$ {data}}`; console.log( 'json ='、json); const root =await publish(json);} function showPortClose(){console.log( 'シリアルポートが閉じています。');} function showError(error){console.log( 'シリアルポートエラー:' +エラー);} 
mam_receiveArduino.js JavaScript
室内空気質監視システムv2
MAMを使用してTangleから保存されたデータを抽出し、データを表示します。
 const Mam =require( './ lib / mam.client.js'); const IOTA =require( 'iota.lib.js'); / / const iota =new IOTA({プロバイダー: 'https://nodes.testnet.iota.org:443'}); const iota =new IOTA({プロバイダー: 'https://potato.iotasalad.org:14265' }); const MODE ='制限付き'; // PUBLIC、PRIVATE、またはRESTRICTEDconst SIDEKEY ='mysecret'; // ASCII文字のみを入力letroot; let key; //引数を確認constargs =process.argv; if(args.length!=3){console.log( '引数としてrootがありません:node mam_receive.js ' ); process.exit();} else if(!iota.valid.isAddress(args [2])){console.log( '無効なルートを入力しました:' + args [2]); process.exit();} else {root =args [2];} // MAMSTATEの初期化letmamState =Mam.init(iota); //チャンネルモードの設定if(MODE =='restricted'){key =iota.utils .toTrytes(SIDEKEY); mamState =Mam.changeMode(mamState、MODE、key);} else {mamState =Mam.changeMode(mamState、MODE);} //タングルからデータを受信するconstexecuteDataRetrieval =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}、時間:$ {json.time} UTC、データ:$ {json.data} `);}); executeDataRetrieval(resp.nextRoot、keyVal);} executeDataRetrieval(root、key); 

回路図

回路図 概略図 概略図

製造プロセス

  1. DIY環境と空気品質モニター
  2. RaspberryPiとNagiosを使用して室温を監視する
  3. PythonとRaspberryPiの温度センサー
  4. MoteinoとRaspberryPiを使用して室温を監視する
  5. ラズベリーパイ用DIY赤外線モーションセンサーシステム
  6. Raspberry PiPhotocellログおよびアラートシステム
  7. ラズベリーパイ温度および光センサー
  8. RaspberryPiとTwilioを使用した音声およびSMS対応の光センサー
  9. ラズベリーパイセンサーとアクチュエーター制御
  10. ラズベリーパイと湿度センサーを備えたエアロポニックス
  11. カメラとPIRセンサーを備えたRaspberryPiホームセキュリティシステム