Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Система мониторинга качества воздуха и мусора в помещении

Компоненты и расходные материалы

Raspberry Pi 3, модель B
× 1
Arduino UNO
× 1
NodeMCU ESP8266 Breakout Board
× 1
Датчик температуры и влажности DHT11 (4 контакта)
× 1
Seeed Grove - датчик газа (MQ2)
× 1
Датчик газа CO MQ-7 (общий)
× 1
Ультразвуковой датчик - HC-SR04 (общий)
× 1
Блок питания Raspberry Pi
× 1
Кабель HDMI
× 1
Кабель USB-A - B
× 1
Перемычки (общие)
× 1
Батарея 5 В (общий)
× 1

Приложения и онлайн-сервисы

Клубок IOTA
Node.js
Raspberry Pi Raspbian
IDE Arduino
MQTT

Об этом проекте

1. Введение

Автоматизация зданий - это автоматическое централизованное управление системами отопления, вентиляции и кондиционирования, освещения и другими системами здания с помощью системы управления зданием или системы автоматизации здания (BAS). Целями автоматизации зданий являются повышение комфорта людей, эффективное функционирование систем здания, снижение энергопотребления и эксплуатационных расходов, а также улучшение жизненного цикла инженерных сетей.

IOTA - это технология распределенного учета с открытым исходным кодом, цель которой - безопасный обмен информацией и ценностями в Интернете вещей. Одним из основных нововведений IOTA является то, что вместо традиционного блокчейна он использует собственную архитектуру (Tangle), основанную на математической концепции, называемой направленным ациклическим графом (DAG). Эта архитектура делает возможным отсутствие комиссий, низкую задержку сети и лучшие перспективы масштабируемости. IOTA в настоящее время находится в стадии разработки, и ожидается, что в течение 2019 года технология будет готова к широкомасштабному внедрению.

Технические характеристики Raspberry Pi 3 B включают:

  • ЦП:четырехъядерный 64-разрядный ARM Cortex A53 с тактовой частотой 1,2 ГГц.
  • Графический процессор:мультимедиа VideoCore IV с тактовой частотой 400 МГц.
  • Память:1 ГБ LPDDR2-900 SDRAM (т. е. 900 МГц).
  • USB-порты:4.
  • Видеовыходы:HDMI, композитное видео (PAL и NTSC) через разъем 3,5 мм.
  • Сеть:Ethernet 10/100 Мбит / с и беспроводная локальная сеть 802.11n.

Особенности Arduino UNO доска :

  • Микроконтроллер:ATmega328.
  • Рабочее напряжение:5 В.
  • Входное напряжение (рекомендуемое):7–12 В.
  • Входное напряжение (пределы):6–20 В.
  • Цифровые выводы ввода / вывода:14 (из которых 6 обеспечивают вывод ШИМ).
  • Аналоговые входные контакты:6.
  • Постоянный ток на выводе ввода / вывода:40 мА.
  • Постоянный ток для вывода 3,3 В:50 мА.

NodeMCU , особенности:

  • И, наконец, программируемый модуль Wi-Fi.
  • Аппаратный ввод-вывод, подобный Arduino (программно определяемый).
  • Может быть запрограммирован с помощью Arduino IDE.
  • USB-TTL в комплекте, plug &play.
  • 10 GPIO D0-D10, функциональность PWM, связь IIC и SPI, 1-Wire, ADC A0 и т. д. - все на одной плате.

Этот проект разделен на три версии. Для лучшего понимания проекта мы разделили его на следующие главы:

  • 1. Введение
  • 2. Установка программного обеспечения
  • 3. Система мониторинга качества воздуха в помещении, версия 1
  • 4. Система мониторинга качества воздуха в помещении, версия 2
  • 5. Система мониторинга мусора
  • 6. Выводы

2. Установка программного обеспечения

а) Установите Raspbian на Raspberry PI 3 B

Я установил NOOBS ссылка для скачивания и инструкции находятся по адресу:https://www.raspberrypi.org/downloads/

б) Установить Node.JS

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

в) Загрузите и соберите библиотеку BCM2835 на Raspberry Pi. Эта библиотека помогает нам работать с датчиком 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

г) Загрузите и установите проект iota качества воздуха в помещении на Raspberry Pi

  $ 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

д) Загрузите и установите последовательный порт

  $ nmp установить последовательный порт  

f) Загрузите и установите Arduino IDE:

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

3. Система мониторинга качества воздуха в помещении, версия 1

Данные датчика DHT11 считываются и публикуются в Tangle с помощью MAM.

Как это работает?

а) В проекте Indo-Air-Quality-iota есть 3 файла сценария Java:

  • sensor.js :Данные датчика DHT11 считываются и отображаются:температура и влажность.
  • mam_sensor.js :Данные датчика DHT11 считываются и публикуются в IOTA Tangle с помощью MAM.
  • mam_receive.js :Извлеките сохраненные данные из IOTA Tangle с помощью MAM и отобразите данные.

б) Конечная точка полного узла и боковой ключ жестко запрограммированы в файлах javascript. Чтобы остановить выполнение сценария, нажмите CTRL + Z . .

в) Подключите к плате Arduino UNO датчик DHT11.

г) Запустите nodesensor.js . чтобы проверить, может ли Raspberry Pi считывать данные о температуре и влажности с модуля датчика DHT11.

  $ node sensor.js  

Здесь мы можем увидеть данные о влажности и температуре, полученные датчиком DHT11. Если все хорошо, то переходим к следующему шагу.

д) Выполнить узел mam_sensor.js . Этот скрипт сохранит данные о температуре и влажности от модуля датчика DHT11 в Tangle.

  $ node mam_sensor.js  

Мы протестировали три узла и получили лучшие результаты: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 '});

Вы можете ознакомиться с некоторыми доступными узлами по адресу:https://iotasalad.org/nodes

Мы отправляем следующую информацию:

  • Город:МЕКСИКА
  • Дом:65
  • Дата и время (UTC):YEAR. МЕСЯЦ, ДЕНЬ, ЧАС. МИНУТЫ И СЕКУНДЫ
  • Данные:температура в градусах Цельсия и Фаренгейта и относительная влажность в процентах.

е) Откройте другой терминал и введите: 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. Система мониторинга качества воздуха в помещении, версия 2

Данные датчиков DHT11, MQ-2 и MQ-7 считываются и публикуются в Tangle с помощью MAM

Как это работает?

а) Проект внутреннего качества воздуха йота состоит из 5 файлов:

  • sensorArduino.ino :Этот код предназначен для сбора данных трех датчиков:датчика влажности и температуры DHT11, датчика газа MQ-2 LPG и датчика газа MQ-7 CO.
  • listportsArduino.ino :Он показывает нам доступные порты платы Arduino UNO.
  • sensorArduino.js :Данные датчиков DHT11, MQ-2 и MQ-7 считываются и отображаются.
  • mam_sensorArduino.js :Данные датчиков DHT11, MQ-2 и MQ-7 считываются и публикуются в Tangle с помощью MAM.
  • mam_receiveArduino.js :Извлеките сохраненные данные из Tangle с помощью MAM и отобразите данные.

б) Конечная точка полного узла и боковой ключ жестко запрограммированы в файлах javascript. Чтобы остановить выполнение сценария, нажмите CTRL + Z . .

в) Подключите к плате Arduino UNO датчики:DHT11, MQ-2 и MQ-7.

г) В папке «sensorArduino», которая находится в проекте iota качества внутреннего воздуха, у нас есть библиотеки датчиков:DHT11, MQ-2 и MQ7. Мы должны установить их в библиотеках Arduino.

д) Загрузите скетч sensorArduino.ino , к плате Arduino UNO и запустите ее. Выберите порт связи с платой Arduino UNO, в моем случае это:Инструменты> Порт> / dev / ttyACM0

е) Откройте терминал и выполните node listportsArduino.js . чтобы убедиться, что наш порт активен.

  $ node listportsArduino.js  

g) Выполните узел mam_sensorArduino.js . . Этот скрипт сохранит данные с платы Arduino UNO в Tangle.

  $ node mam_sensorArduino.js  

Мы отправляем следующую информацию:

  • Город:Нью-Йорк
  • Дом:13
  • Дата и время (UTC):YEAR. МЕСЯЦ, ДЕНЬ, ЧАС. МИНУТЫ И СЕКУНДЫ
  • Данные:сжиженный нефтяной газ в миллионных долях, газ CO в миллионных долях, температура в градусах Цельсия, относительная влажность в процентах,

з) Откройте другой терминал и введите: 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 (соответственноnextRoot, keyVal);
}

Тест

Изображения

5. Система мониторинга мусора

Отправьте данные датчика SRF05 с помощью NodeMCU и MQTT в IOTA Tangle с помощью MAM

Как это работает?

а) В этом проекте 3 файла:

  • trashcan.ino :Этот код вычисляет количество мусора внутри корзины в%. Затем отправьте данные на плату Raspberry Pi 3B, используя протокол MQTT.
  • nodemcu_mqtt_mam .js :Данные датчика SRF05 считываются и публикуются в Tangle с помощью MAM.
  • nodemcu_mam_receive.js :Извлеките сохраненные данные из Tangle с помощью MAM и отобразите данные.

б) Конечная точка полного узла и боковой ключ жестко запрограммированы в файлах javascript. Чтобы остановить выполнение сценария, нажмите CTRL + Z . .

в) Подключите к NodeMCUboard ультразвуковые датчики SRF05.

г) Установите пакеты esp8266 с помощью Boards Manager. Откройте окно настроек Arduino IDE и введите в поле Additional Board Manager URLs:http://arduino.esp8266.com/stable/package_esp8266com_index.json

Выберите меню:Инструменты> Плата> Менеджер доски ... В поле поиска введите:esp8266 и установите последнюю версию.

д) Теперь давайте заставим NodeMCU взаимодействовать с сервером mosquitto. Сначала начните с добавления библиотеки PubSubClient в IDE Arduino. Эта библиотека предназначена для обмена сообщениями MQTT и поддерживает NodeMCU.

  • Выберите меню:"Эскиз"> "Включить библиотеку"> "Управление библиотеками".
  • Искать:PubSub
  • Выберите PubSubClient (Ник О'Лири) и установите последнюю версию.

е) Далее установить Mosquitto (MQTT) на RaspberryPi 3B. Протокол 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 broker и mosquito.

  $ sudo apt-get install mosquitto mosquitto-clients  

Если у вас возникла проблема с установкой MQTT, вы можете попробовать:

  $ npm install mqtt --save  

Перезагрузите Raspberry Pi. Откройте терминал и проверьте версию Mosquito:

  $ mosquito -v  

Вы можете запускать и останавливать москитный сервер:

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

Мы проверяем IP Raspberry Pi:

  $ ifconfig  

g) Загрузите эскиз trashcan.ino на плату NodeMCU. Проверить следующие данные:

  • Плата NodeMCU 1.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; // ДЛИНА МОЕГО ТРАНСПОРТА 25 СМ

з) Запустите nodemcu_mqtt_mam.js . , этот скрипт сохранит данные с платы NodeMCU в Tangle.

  $ nodemcu_mqtt_mam.js  

Мы отправляем следующую информацию:

  • Город:БЕРЛИН
  • Дом:7
  • Дата и время (UTC):YEAR. МЕСЯЦ, ДЕНЬ, ЧАС. МИНУТЫ И СЕКУНДЫ
  • Данные:процент корзины.

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, Data:$ {json.data} `);
});
executeDataRetrieval (соответственноnextRoot, keyVal);
}

В этом случае доступный узел был другим:https://iotasalad.org/nodes

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

Тест

Изображения

6. Выводы

Система мониторинга качества воздуха в помещении, версия 1:

Этот проект работал удовлетворительно, и мы следим за качеством воздуха внутри здания, что мы видим по полученным результатам. Мы моделируем этот проект в здании, которое находится в Мехико. Это был базовый тест с использованием датчика влажности и температуры DHT11 и платы Raspberry Pi 3B, кода Java Script и протокола IOTA.

Система мониторинга качества воздуха в помещении, версия 2:

В этом проекте мы использовали датчики DHT11, MQ-2 (LPG) и MQ-7 (CO). В этом случае. мы моделируем сбор данных в здании, расположенном в Нью-Йорке, и отправляем эти данные с помощью плат Arduino UNO и Raspberry Pi в IOTA Tangle с использованием скрытых аутентифицированных сообщений (MAM). Это был практичный и быстрый способ добавить больше датчиков. Эту версию можно использовать в умных зданиях и в отраслях, где используется сжиженный газ и где при пожарах образуется окись углерода.

Система мониторинга мусора:

Цель этого проекта - взять под контроль мусорное хранилище в умном здании, расположенном в Берлине или любом районе. Скопление мусора может приводить к появлению неприятного запаха продуктов разложения, но теперь мы можем знать, сколько времени осталось у мусорной лодки с мусором и какой процент этого мусора.


Код

  • 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; // ПИН GPIO МАЛИНЫ ОТ ДАТЧИКА DHT11function readSensor () {sensor.read (SENSORTYPE, GPIOPIN, function (err, temperature, влажность) {if (! Err) {console.log ('temp:' + temperature.toFixed (1 ) + 'C,' + 'влажность:' + влажность.toFixed (1) + '%');} else {console.log (err);}});} readSensor (); // АВТОМАТИЧЕСКОЕ ОБНОВЛЕНИЕ ЗНАЧЕНИЯ ДАТЧИКА КАЖДЫЙ 10 СЕКУНД setInterval (readSensor, TIMEINTERVAL * 1000); 
mam_sensor.js JavaScript
Система мониторинга качества воздуха в помещении v1
Этот код сохраняет данные о температуре и влажности от модуля датчика DHT11 в Tangle
 const sensor =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 ({provider:' https://potato.iotasalad.org:14265 '}); // const iota =new IOTA ({provider:' https://peanut.iotasalad.org :14265 '}); const MODE =' ограничено '; // ПУБЛИЧНАЯ, ЧАСТНАЯ ИЛИ ОГРАНИЧЕННАЯconst SIDEKEY ='mysecret'; // ИСПОЛЬЗУЕТСЯ ТОЛЬКО В ОГРАНИЧЕННОМ РЕЖИМЕ const SECURITYLEVEL =3; const TIMEINTERVAL =30; // SECONDSconst SENSORTYPE =11; // 11 =DHT11, 22 =DHT22const GPIOPIN =14; // ПИН GPIO МАЛИНЫ ОТ ДАТЧИКА DHT11 // ИНИЦИАЛИЗИРУЕМ СОСТОЯНИЕ MAMlet mamState =Mam.init (iota, undefined, SECURITYLEVEL); // РЕЖИМ КАНАЛАif (MODE =='ограниченный') {const key =iota.utils.toTrytes (SIDEKEY); mamState =Mam.changeMode (mamState, MODE, key);} else {mamState =Mam.changeMode (mamState, MODE);} // ПУБЛИКАЦИЯ В TANGLEconst publish =async function (packet) {// СОЗДАТЬ ЗАГРУЗКУ MAM const trytes =iota .utils.toTrytes (JSON.stringify (пакет)); const message =Mam.create (mamState, trytes); // СОХРАНИТЬ НОВОЕ СОСТОЯНИЕ mamState =message.state; console.log ('Корень:', message.root); console.log ('Адрес:', сообщение.адрес); // ПРИСОЕДИНЯЙТЕ ЗАГРУЗКУ await Mam.attach (message.payload, message.address); return message.root;} функция readSensor () {sensor.read (SENSORTYPE, GPIOPIN, асинхронная функция (ошибка, температура, влажность) {if (! err) {const city =('MEXICO'); const building =('65 '); const dateTime =moment (). utc (). format (' ГГГГ / ММ / ДД чч:мм:сс '); const data =`{Температура:$ {temperature.toFixed (1)} ° C ($ {(temperature.toFixed (1) * 1.8) +32} ° F), Влажность:$ {влажность.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}, время:$ {json. dateTime} UTC, Data:$ {json.data}, root:$ {root} `);} else {console.log (err);}});} // ЗАПУСК ITreadSensor (); // АВТОМАТИЧЕСКОЕ ОБНОВЛЕНИЕ ЗНАЧЕНИЯ ДАТЧИКА КАЖДЫЕ 30 СЕКУНД setInterval (readSensor, TIMEINTERVAL * 1000); 
mam_receive.js JavaScript
Система мониторинга качества воздуха в помещении v1
Отображаются сохраненные данные датчика.
 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 iota =новый IOTA ({поставщик:'https://peanut.iotasalad.org:14265'}); const MODE ='ограниченный'; // ПУБЛИЧНАЯ, ЧАСТНАЯ ИЛИ ОГРАНИЧЕННАЯconst SIDEKEY ='mysecret'; // ИСПОЛЬЗУЕТСЯ ТОЛЬКО В ОГРАНИЧЕННОМ РЕЖИМЕlet root; let key; // ПРОВЕРКА АРГУМЕНТОВ const args =process.argv; if (args.length! =3) {console.log ('Отсутствует корень в качестве аргумента:node mam_receive.js  '); process.exit ();} else if (! iota.valid.isAddress (args [2])) {console.log ('Вы ввели неверный корень:' + args [2]); process.exit ();} else {root =args [2];} // ИНИЦИАЛИЗАЦИЯ СОСТОЯНИЯ MAMlet mamState =Mam.init (iota); // УСТАНОВКА РЕЖИМА КАНАЛАif (MODE =='ограничено') {key =iota.utils .toTrytes (Боковой ключ); mamState =Mam.changeMode (mamState, MODE, key);} else {mamState =Mam.changeMode (mamState, MODE);} // ПОЛУЧЕНИЕ ДАННЫХ ИЗ 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}, Время:$ {json.dateTime} UTC, Данные:$ {json.data} `);}); } executeDataRetrieval (корень, ключ); 
mam_sensorArduino.js JavaScript
Система мониторинга качества воздуха в помещении v2
Данные датчиков DHT11, MQ-2 и MQ-7 считываются и публикуются в Tangle с помощью 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 ({поставщик:' https://potato.iotasalad.org:14265 '}); const MODE =' ограничено '; // ПУБЛИЧНАЯ, ЧАСТНАЯ, ОГРАНИЧЕННАЯconst SIDEKEY ='mysecret'; // ТОЛЬКО СИМВОЛЫ ASCIIconst SECURITYLEVEL =3; // 1, 2, 3const PORTNAME ='/ dev / ttyACM1'; // ВВОД ДЕЙСТВИТЕЛЬНОГО ПОРТА const port =new SerialPort (PORTNAME, {baudRate:9600, autoOpen:true}); const Readline =SerialPort.parsers.Readline; const parser =port.pipe (new Readline ({delimiter:'\ r \ n '})); // ИНИЦИАЛИЗИРУЕМ СОСТОЯНИЕ MAMlet mamState =Mam.init (iota, undefined, SECURITYLEVEL); // УСТАНАВЛИВАЕМ РЕЖИМ КАНАЛАif (MODE ==' limited ') {const key =iota.utils.toTrytes (SIDEKEY); mamState =Mam.changeMode (mamState, MODE, key);} else {mamState =Mam.changeMode (mamState, MODE);} // ПУБЛИКАЦИЯ В TANGLEconst publish =async function (packet) {// СОЗДАТЬ ЗАГРУЗКУ MAM const trytes =iota .utils.toTrytes (JSON.stringify (пакет)); const message =Mam.create (mamState, trytes); // СОХРАНИТЬ НОВОЕ СОСТОЯНИЕ mamState =message.state; console.log ('Корень:', message.root); console.log ('Адрес:', сообщение.адрес); // ПРИСОЕДИНЯЙТЕ ЗАГРУЗКУ await Mam.attach (message.payload, message.address); return message.root;} // БИБЛИОТЕКА ПОСЛЕДОВАТЕЛЬНЫХ ПОРТОВ EVENTSport.on ('open', showPortOpen); parser.on ('data', readSerialData); port.on ('close', showPortClose); port.on ('error ', showError); // ФУНКЦИИ ОБРАТНОГО ВЫЗОВА function showPortOpen () {console.log (' Последовательный порт открыт. Скорость передачи данных:'+ port.baudRate);} async function readSerialData (data) {let json ={}; const time =moment (). utc (). format ('ГГГГ / ММ / ДД чч:мм:сс'); const city =('Нью-Йорк'); const building =('13'); json ['время'] =время; 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 ('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);

Схема

Schematic diagram Schematic diagram Schematic diagram

Производственный процесс

  1. Монитор окружающей среды и качества воздуха своими руками
  2. Мониторинг комнатной температуры с Raspberry Pi и Nagios
  3. Датчик температуры Python и Raspberry Pi
  4. Мониторинг комнатной температуры с помощью Moteino’s и Raspberry Pi
  5. Самодельная инфракрасная система датчиков движения для Raspberry Pi
  6. Журнал фотоэлементов Raspberry Pi и система предупреждений
  7. Датчик температуры и освещенности Raspberry Pi
  8. Датчик освещенности с поддержкой голоса и SMS с использованием Raspberry Pi и Twilio
  9. Управление датчиком и исполнительным механизмом Raspberry Pi
  10. Аэропоника с Raspberry Pi и датчиком влажности