Оглавление:

Решение Seeed LoRa IoTea: 5 шагов
Решение Seeed LoRa IoTea: 5 шагов

Видео: Решение Seeed LoRa IoTea: 5 шагов

Видео: Решение Seeed LoRa IoTea: 5 шагов
Видео: Улучшаем качество ваших генераций в Stable Diffusion в десятки раз. Советы, лайфхаки и полезности 2024, Июль
Anonim
Решение Seeed LoRa IoTea
Решение Seeed LoRa IoTea

Автоматическая система сбора информации о чайных плантациях. Это часть интеллектуального сбора сельскохозяйственной информации.

Шаг 1. Вещи, использованные в этом проекте

Компоненты оборудования

  • Grove - Датчик углекислого газа (MH-Z16)
  • Grove - Цифровой датчик освещенности
  • Grove - Датчик пыли (PPD42NS)
  • Grove - Датчик кислорода (ME2-O2-Ф20)
  • Датчик влажности и температуры почвы
  • LoRa LoRaWAN Gateway - комплект 868 МГц с Raspberry Pi 3
  • Grove - Датчик температуры, влажности и барометра (BME280)

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

Microsoft Visual Studio 2015

Шаг 2: история

Интеллектуальное сельское хозяйство заключается в применении технологии Интернета вещей к традиционному сельскому хозяйству с использованием датчиков и программного обеспечения для управления сельскохозяйственным производством с помощью мобильных или компьютерных платформ, что делает традиционное сельское хозяйство более «умным».

На горе Мэндин к северо-востоку от Яань в провинции Сычуань горный хребет тянется с запада на восток в зеленом море. Это наиболее знакомое зрелище для 36-летнего Дэна, одного из очень немногих производителей чая Mengding своего поколения, с плантацией площадью 50 му (= 3,3 гектара), расположенной на высоте 1100 метров над уровнем моря. Дэн происходит из семьи мастеров чая, но сохранить семейное наследие - непростая задача. «Наши чаи выращиваются на большой высоте в экологически чистой среде, что гарантирует его превосходное качество. Но в то же время плотность роста низкая, стоимость высокая, а бутонизация неравномерная, что затрудняет сбор чая. Вот почему высокогорные чаи обычно собираются небольшими порциями, и их ценность не отражается на рынке ». Последние два года Дэн пытался повысить осведомленность потребителей о высокогорном чае, чтобы повысить его ценность. И когда он встретил Фэна, который искал плантацию для внедрения технологии Seeed IoTea, было найдено идеальное решение. Решение Seeed IoTea Solution направлено на то, чтобы помочь чайным фермерам лучше управлять плантациями без изменения традиционных методов выращивания чая, а также представлять экологические данные с плантаций в реальном времени на открытой платформе.

IoTea, состоящий из датчиков, узлов и шлюзов, собирает в реальном времени данные о факторах, которые могут повлиять на качество чая во время процессов выращивания и производства, включая температуру и влажность, CO2, O2, PM и воздействие света. Данные собираются датчиками, отправляются узлами на шлюз и, в конечном итоге, в облако, и становятся доступными для конечных клиентов на веб-странице.

Шаг 3: Подключение оборудования

Шаг 1: подключение к шлюзу

Шлюз устанавливается отдельно в коробку. Учитывая проблему отвода тепла, мы добавили 2 вентилятора. Один предназначен для отвода тепла от Raspberry Pi, другой - для внутренней и внешней циркуляции воздуха. Шлюз находится в доме фермера, поэтому нам не нужно учитывать его проблемы с питанием.

Изображение
Изображение

Шаг 2: подключение к узлу

Узел является конечным для данных, и все исходные данные берутся отсюда. К узлу подключено 6 датчиков. Помимо датчика влажности и температуры почвы, мы помещаем в решетчатый ящик другие датчики.

Изображение
Изображение
Изображение
Изображение

Узел помещается в водонепроницаемый бокс. Для лучшего подключения к узлу делаем плату адаптера. Наконец, мы предоставим ссылку для скачивания схемы этой платы. Как показано ниже, кабели датчиков подключаются к плате адаптера через клеммные колодки. Мы используем 3 МОП-лампы (SI2301) для создания схем переключения для управления включением и выключением датчиков и вентилятора. Вентилятор используется для охлаждения. У нас на плате установлен датчик температуры (DS18B20). Он может сказать нам внутреннюю температуру коробки, а затем микроконтроллер решит, включать ли вентилятор. Мы используем несколько резисторов, чтобы сделать схему делителя напряжения для измерения напряжения свинцово-кислотной батареи. Наконец, мы оставляем на плате 3 интерфейса IIC и последовательный порт для последующего расширения и отладки.

Изображение
Изображение

Поговорим о проблеме с питанием узла. Узел размещается на чайной плантации случайным образом, поэтому традиционный метод электроснабжения больше не применим. Использование солнечной энергии - хорошая идея. В настоящее время на рынке представлено множество решений. Мы можем выбрать один из них, который соответствует нашим потребностям. Выбранное нами решение состоит из трех частей: солнечной панели, солнечного контроллера заряда и свинцово-кислотной батареи. Чтобы лучше улавливать солнечную энергию, мы кладем солнечную панель на верхнюю часть кронштейна и регулируем ее угол так, чтобы она была обращена к солнцу. Мы поместили контроллер солнечного заряда в один ящик с узлом. Поскольку внутри коробки нет лишнего места, нам пришлось найти новую водонепроницаемую коробку для размещения свинцово-кислотной батареи.

Изображение
Изображение
Изображение
Изображение
Изображение
Изображение

Шаг 4: Конфигурация программного обеспечения

Узел

В этом разделе мы представим в основном программную конфигурацию узла.

Формат данных

Данные, загруженные узлом на шлюз:

символ без знака Lora_data [15] = {0, 1, 2, 3,, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};

Значение каждого бита данных:

Lora_data [0] : Температура воздуха, ℃

Lora_data [1] : Влажность воздуха,%

Lora_data [2] : Высота большая восьмерка, м

Lora_data [3] : Высота малая восемь

Lora_data [4] : Концентрация CO2 высокая восемь, ppm

Lora_data [5] : Концентрация CO2 низкая восемь

Lora_data [6] : Концентрация пыли высокая восемь, шт / 0,01 куб.

Lora_data [7] : Концентрация пыли низкая восемь

Lora_data [8] : Сила света высокая восемь, люкс

Lora_data [9] : Интенсивность света низкая восемь

Lora_data [10] : Концентрация O2,% (исходные данные, деленные на 1000)

Lora_data [11] : Температура почвы, ℃

Lora_data [12] : Влажность почвы,%

Lora_data [13] : Напряжение АКБ, В

Lora_data [14] : Код ошибки датчиков

Код ошибки:

Lora_data [14] = [бит7, бит6, бит5, бит4, бит3, бит2, бит1, бит0]

Значение каждого бита:

бит 0: 1 ---- Ошибка датчика температуры, влажности и барометра (BME280)

бит 1: 1 ---- Ошибка датчика углекислого газа (MH-Z16)

бит 2: 1 ---- Ошибка датчика пыли (PPD42NS)

бит 3: 1 ---- Ошибка цифрового датчика освещенности

бит 4: 1 ---- Ошибка датчика кислорода (ME2-O2-Ф20)

бит 5: 1 ---- Ошибка датчика влажности и температуры почвы

бит 6: зарезервирован

бит 7: зарезервирован

Мы создали Error_code_transform.exe, откройте его и введите шестнадцатеричный код ошибки, вы быстро узнаете, какой датчик неисправен. Ссылка для скачивания находится в конце статьи.

Настройка параметров: а) Цикл передачи данных

// seeedtea.ino

#defineinterval_time 600 // секунда

Этот параметр можно изменять, чтобы изменить цикл передачи данных. В каждом цикле сбор данных занимает около 1 минуты. Таким образом, не рекомендуется изменять это значение менее чем на 60 секунд.

б) Время прогрева датчика пыли

//seeedtea.ino

#definePreheat_time 30000 // Время прогрева DustSensor, миллисекунды //Dust_other.cpp #definesampletime_ms 30000 // samplingtime30s

в) Коэффициент напряжения

//POWER_Ctrl.cpp

#defineBattery_coefficient 0.159864 // значение АЦП × Battery_coefficient = battery_voltage #defineSolar_coefficient 0,22559 // Значение АЦП × Solar_coefficient = solar_voltage

Эти два параметра рассчитываются на основе схемы делителя напряжения.

г) Порог температуры открытия вентилятора

//POWER_Ctrl.cpp

#defineFan_start_temp 45 // температурный порог #defineFan_start_light 500 // интенсивность света

Когда фактическая температура превышает пороговое значение, вентилятор начинает охлаждаться.

д) Параметр инициализации датчика O2

//Oxygen.cpp

# defineO2_percentage 208.00 //20.8%

е) Переключатель макросов

//seeedtea.ino

#defineLORA_RUN // После комментария инициализация Lora и передача данных прекратятся #defineSENSOR_RUN // После комментария внешние датчики перестанут работать //POWER_Ctrl.cpp #defineFAN_ON // Только для тестирования, практическое приложение необходимо закомментировать / **** *** DS18B20 режим управления ********************** / #defineSlower_Mode // Медленный режим для определения температуры. Комментировать в быстром режиме

g) Отображение контактов

D2: светодиодный индикатор и внешний микроконтроллер сброса IIC: SCL и SDA

//Dust_other.h

#defineDust_pin 3 // Датчик пыли //CO2.cpp # defineCO2_serial Serial1 // использовать аппаратный последовательный порт (D0 и D1) //seeedtea.ino #definedataPin 6 // Вывод данных о почве #defineclockPin 7 // Вывод тактового сигнала почвы // POWER_Ctrl. h # defineDS18B20_pin 8 // DS18B20 #defineFan_pin 9 // Fan #defineAir_CtrlPin 10 // Управляющий контакт для датчиков, размещенных в жалюзи #defineSoil_CtrlPin 11 // Контакт переключателя датчика влажности почвы и температуры #defineBattery_pin A2 / Измерение напряжения батареи # A3DefineSolar_pin / Измерение напряжения солнечной панели //Oxygen.h # defineO2_pin A1 // Датчик O2

з) Сторожевой таймер

Сторожевой таймер используется для отслеживания рабочего состояния системы. Когда система работает ненормально, узел будет сброшен, чтобы он мог работать непрерывно в течение длительного времени.

Библиотека, на которую нужно ссылаться:

  • Adafruit_SleepyDog.h добавлен в проект
  • Adafruit_ASFcore-master.zip упакован в папку проекта и должен быть вручную добавлен в IDE Arduino.

Связанные функции:

Включить сторожевой таймер

int WatchdogSAMD:: enable (int maxPeriodMS, bool isForSleep)

Входные параметры:

Int maxPeriodMS: время ожидания в миллисекундах. Максимально допустимое значение - 16000 миллисекунд.

возвращаемое значение:

Тип Int, возвращает фактическое время ожидания

Сбросить сторожевой таймер

void WatchdogSAMD:: reset ()

Вызовите эту функцию, чтобы сбросить сторожевой таймер, называемый «кормлением собаки». Превышение времени ожидания без сброса приведет к перезапуску узла.

Сторожевой пес

void WatchdogSAMD:: disable ()

Шлюз

В этом разделе мы расскажем, как подключиться к серверу Loriot.

Шаг 1: Регистрация шлюза сервера Loriot

а) Новому пользователю необходимо сначала зарегистрировать учетную запись, нажмите регистрационный адрес. Введите имя пользователя, пароль и адрес электронной почты для регистрации, после регистрации вам будет отправлено электронное письмо, пожалуйста, следуйте инструкциям в электронном письме для активации.

б) После успешной активации щелкните здесь, чтобы войти в систему. Уровень по умолчанию - «Сеть сообщества», он поддерживает 1 шлюз (RHF2S001) и 10 узлов.

c) Войдите в Dashboard -> Gateway, нажмите Add Gateway start, чтобы добавить шлюз.

г) Выберите Raspberry Pi 3

д) Установите, как показано ниже:

  • Интерфейс радио -> RHF2S001 868/915 МГц (SX1257)
  • АВТОБУС -> SPI

е) Введите MAC-адрес вашего RHF2S001 в формате b8: 27: eb: xx: xx: xx. А также введите информацию о местоположении шлюза.

g) Нажмите «Зарегистрировать шлюз Raspberry Pi», чтобы завершить регистрацию.

Изображение
Изображение

h) Щелкните зарегистрированный шлюз, чтобы перейти на страницу конфигурации, вручную переключите «План частот», ваш план здесь определяется типом вашего RHF2S001, доступный план - CN470, CN473, CN434, CN780, EU868, после выбора обновите страницу чтобы получить точный канал. В этой вики мы выбираем EU868.

i) Запустите команду в терминале шпатлевки :

cd /home/rxhf/loriot/1.0.2

sudo systemctl stop pktfwd sudo gwrst wget > -O loriot-gw.bin chmod +x loriot-gw.bin./loriot-gw.bin -f -s cn1.loriot.io

j) Finish gateway registration. You will see the gateway is Connected now. Next is to register node.

Изображение
Изображение

Шаг 2: устройство узла подключения к серверу Loriot

а) Получите доступные каналы шлюза

Текущие каналы шлюза можно получить из Панели управления -> Шлюз -> Ваш шлюз, вы можете увидеть доступные каналы, как показано на рисунке ниже.

Изображение
Изображение

б) Конфигурация Seeeduino LoRAWAN GPS (RHF3M076)

Откройте последовательный монитор ArduinoIDE, коснитесь команды ниже.

at + ch

Чтобы подтвердить канал по умолчанию для вашего Seeeduino_LoRAWAN GPS, вы получите 3 канала. Если доступный канал недоступен, вы можете изменить каналы Seeeduino_LoRAWAN с помощью команды ниже.

при + ch = 0,868,1

при + ch = 1, 868,3 при + ch = 2, 868,5

Затем вы можете снова использовать at + ch для проверки.

c) Добавьте Seeeduino_LoRAWAN GPS в качестве ABP NodeLog на сервере Loriot, нажмите Dash Board -> Applications -> SimpleApp. Нажмите Импортировать ABP , введите под элементами

  • DevAddr: Seeeduino_LoRAWAN GPS получить через команду «AT + ID» (Примечание: Loriot не поддерживает коннектор двоеточия, необходимо удалить вручную)
  • FCntUp : Setto 1
  • FCntDn : Setto 1
  • NWKSKEY : Значение по умолчанию 2B7E151628AED2A6ABF7158809CF4F3C
  • APPSKEY : Значение по умолчанию 2B7E151628AED2A6ABF7158809CF4F3C
  • EUI : DEVEUI, Seeeduino_LoRAWAN GPS получить через команду "AT + ID"
Изображение
Изображение

Нажмите кнопку «Импортировать устройство», чтобы завершить импорт устройства. Теперь выберите Dashboard-> Applications -> SampleApp, вы увидите новый узел ABP, который вы только что добавили.

Изображение
Изображение

г) Отправить данные из Seeeduino_LoRAWAN

ВНИМАНИЕ! Это просто тест.

Вернитесь к последовательному монитору ArduinoIDE, отправьте команду:

AT + CMSGHEX = "0a 0b 0c 0d 0e"

Затем перейдите в Dashboard -> Applications -> SampleApp -> Device, щелкните Node Device EUI или DevAddr, вы найдете здесь данные, которые вы только что отправили.

Изображение
Изображение

За подробностями обращайтесь к этой вики.

Шаг 5. Создание веб-сайта

Связанные инструменты

  • virtualenv
  • Python3
  • Gunicorn
  • Руководитель
  • Nginx
  • MySQL

Мы используем CentOS7 в качестве тестовой среды развертывания

virtualenv

Используйте virtualenv для создания автономной производственной среды python3

а) установить

pip install virtualenv

б) создать виртуальную среду python3

virtualenv -p python3 iotea

в) запустите виртуальную среду и войдите в каталог iotea

исходный бункер / активировать

г) существует среда

деактивировать

Python3

а) установить

yum install epel-release

ням установить python36

б) установить зависимую библиотеку PyMySQL, DBUtils, Flask, websocket-client, configparser

pip установить pymysql

pip install dbutils pip install flask pip install websocket-client pip install configparser

Gunicorn

а) установить (в среде Python3)

pip install gunicorn

б) запустить проект фляги (в каталоге проекта iotea)

gunicorn -w 5 -b 0.0.0.0:5000 приложение: приложение

c) запустите websocket-clint, чтобы получить данные loriot

Gunicorn loriot: приложение

г) просмотреть дерево процессов Gunicorn

pstree -ap | grep gunicorn

Руководитель

а) установить (пользователь root)

руководитель установки pip

б) генерировать файлы конфигурации

echo_supervisord_conf> /etc/supervisord.conf

c) создать каталог и ввести конфигурацию каталога

mkdir -p /etc/supervisor/conf.d

Отредактируйте /etc/supervisord.conf и измените поле файлов в [include] в конце файла.

Обратите внимание, что вам нужно удалить ';' перед этими двумя строками - символ комментария.

[включают]

Файлы = /etc/supervisor/conf.d/*.conf

Средство для введения /etc/supervisor/conf.d/. Следующий файл конфигурации используется в качестве файла конфигурации процесса (отслеживается супервизором).

г) входящая конфигурация (в каталоге iotea)

cp iotea.conf /etc/supervisor/conf.d/

cp loriot.conf /etc/supervisor/conf.d/

д) открыть iotea serve

superviosrctl reload # перезагрузить файл конфигурации

superviosrctl start loriot # открыть прием данных loriot superviosrctl start iotea # открыть приложение iotea flask

е) другие общие операции

supervisorctl reload # перезагрузить файл конфигурации

supervisorctl обновить supervisorctl start xxx supervisorctl stop xxx supervisorctl status xxx supervisorctl help # просмотреть дополнительные команды

Nginx

а) установить

yum install -y nginx

б) конфигурация

cp NginxIotea.conf /etc/nginx/conf.d/

в) запустить Nginx

systemctl запустить nginx.service

MySQL

а) связанные параметры

пользователь = 'корень'

passwd = '1234' db = 'iotea' порт = 3306

б) файл

iotea_iotea.sql

в) файл конфигурации

db.ini

Рекомендуемые: