Оглавление:
- Запасы
- Шаг 1. Припаяйте все компоненты и загрузите программу в NodeMCU
- Шаг 2: настройка SQL Server
- Шаг 3: Настройка файлового сервера
- Шаг 4: Пользовательская документация
- Шаг 5: Настройка модуля
- Шаг 6. Пришло время передать данные в облако
- Шаг 7. Обновление по воздуху (OTA)
- Шаг 8: Как пользователь / клиент может получить доступ к данным…
- Шаг 9: Ограничения этого проекта
- Шаг 10: Дальнейшие улучшения, которые можно внести в этот проект
- Шаг 11: Несколько слов для аудитории
Видео: Интеллектуальная распределенная система мониторинга погоды IoT с использованием NodeMCU: 11 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:48
Возможно, вы все знаете о традиционной метеостанции; но задумывались ли вы, как это работает на самом деле? Поскольку традиционные метеостанции являются дорогостоящими и громоздкими, плотность этих станций на единицу площади очень мала, что способствует неточности данных. Я объясню вам, как: предположим, что станция расположена в центре города, и это единственная станция, которая находится в радиусе 'x' метров, ее можно легко смещать, если поблизости присутствует какой-либо агент, вызывающий загрязнение. станции, показывающей всю зону радиуса «x» метров как загрязненную, поскольку эта единственная станция отвечает за определение погодных данных для всей области.
Чтобы решить эту проблему, необходимо увеличить плотность модулей, что возможно только в том случае, если модули дешевле и занимают меньшую площадь, чем существующий.
По этой причине предлагаемое мной решение является идеальным решением этой проблемы. Оно стоит менее 10 долларов и легко лежит на моей ладони.
Как это работает…
Этот проект состоит из 3 основных частей.
Сторона устройства:
Устройство представляет собой модуль IoT, показанный на рисунке, который отправляет данные о погоде на сервер каждые x интервалов времени. Данные включают в себя актуальные погодные данные, географическое положение модуля; т.е. его координаты, его MAC-адрес; чтобы однозначно идентифицировать устройство, версия прошивки, на которой оно работает. Сторона устройства состоит из N-модулей, распределенных по области, активно передающих данные серверу.
На стороне сервера:
Как следует из названия, это централизованный сервер, который обрабатывает несколько операций, таких как получение данных от модулей и их сохранение в базе данных, обновление модуля последней прошивкой, если он работает на более старой версии, отправка данных о погоде в клиент по запросу.
Клиентская / Пользовательская сторона:
Это конечный пользователь, который запрашивает данные о погоде с сервера. Клиент отправляет текущее местоположение, и на основе местоположения сервер вычисляет расстояние между клиентом и всеми модулями и отправляет клиенту данные о погоде ближайшего модуля, что считается точным.
Запасы
- NodeMCU (ESP8266-12E)
- DHT11 (датчик влажности и температуры)
- BMP180 (датчик давления и температуры)
- MQ-135 (датчик индекса качества воздуха)
- USB-кабель (для загрузки программы)
- Источник питания 5 вольт
- Конденсаторы (опционально: устанавливаются параллельно линии электропередачи)
- Arduino IDE (для отладки и загрузки программы)
- Приложение POSTMAN (необязательно: для отладки API)
- Веб-сайт (для размещения серверов PHP и MySQL)
Шаг 1. Припаяйте все компоненты и загрузите программу в NodeMCU
Припаяйте все компоненты к NodeMCU, как показано на принципиальной схеме на печатной плате. Кроме того, припаяйте конденсатор параллельно линиям электропередач, так как скачки напряжения возникают во время активной передачи и приема данных.
После завершения пайки загрузите код из файла «code.c».
Примечание. Не забудьте заменить учетные данные своими учетными данными. Также поместите файл с именем "html_file.h" в папку эскиза arduino. Здесь можно найти все файлы заголовков, используемые в этом проекте.
Особенности кода:
Точка доступа: поскольку в массовом производстве сложно запрограммировать каждый модуль с учетными данными, модуль размещает веб-страницу при первой загрузке, чтобы принять учетные данные Wi-Fi, к которым модули должны подключаться, и сохраняет в EEPROM для последующего использования.
После настройки учетных данных NodeMCU проверяет учетные данные в EEPROM и подключается к учетным данным WiFi, присутствующим в EEPROM.
После успешного подключения к Wi-Fi NodeMCU начинает загружать данные на сервер каждые интервалы времени «x», данные включают данные о погоде, MAC-адрес модуля, версию прошивки, географическое положение устройства.
Обновление OTA: модуль также проверяет наличие новых обновлений прошивки каждый день в определенное время, указанное в коде. Эта функция полезна, поскольку ни один производитель не может продолжать и изменять программу отдельного модуля в случае, если необходимо внести какие-либо изменения.
Сторожевой таймер: у Atlast должен быть способ самовосстановления без какого-либо вмешательства человека, если он застрянет или выйдет из строя. Этого можно добиться с помощью сторожевого таймера. Это работает следующим образом: есть подпрограмма прерывания, которая запускается каждую секунду. ISR увеличивает счетчик каждый раз, когда он выполняется, и проверяет, достиг ли счетчик максимального количества. Когда счетчик достигает максимального значения, модуль сбрасывается, предполагая, что он разбился. При нормальной работе счетчик всегда сбрасывается до того, как достигнет максимального значения.
Шаг 2: настройка SQL Server
Настройка SQL Server также очень проста. Просто создайте базу данных на сервере SQL и импортируйте настройку, импортировав файл с именем «database_structure.txt». Вы можете найти файл на этом этапе. Поскольку инструкция не позволяет загружать файлы ".sql", я переименовал файл в ".txt".
Примечание. Переименуйте файл с «.txt» в «.sql».
Шаг 3: Настройка файлового сервера
Настроить сервер очень просто, если у вас есть веб-сайт, размещенный в Интернете. Я не буду описывать всю процедуру настройки веб-сайта и его размещения, поскольку это выходит за рамки данного руководства. Но вы можете разместить его на своем собственном компьютере как localhost, чтобы попробовать работать с файлами.
Поскольку Instructable не позволяет загружать файлы PHP, я переименовал файлы в «.txt».
Примечание: переименуйте расширение файлов в «.php». Также не забудьте изменить учетные данные файла «config.php».
Просто загрузите файлы на сервер, и все готово.
Я дам вам краткую информацию о файлах PHP.
db_config.php:
В этом файле хранятся все учетные данные, необходимые для подключения к серверу SQL.
db_connect:
В этом файле присутствует класс, необходимый для подключения к базе данных.
insert.php:
NodeMCU вызывает этот файл PHP для загрузки данных на сервер с помощью метода GET. Этот файл также отвечает за хранение тех же данных на сервере SQL.
retrieve.php:
Пользователь / Клиент вызывает этот PHP с помощью метода GET. Сервер рассчитывает расстояние между пользователем и всеми модулями. Затем данные ближайшего модуля отправляются в качестве ответа клиенту в формате JSON / XML, который предпочитает клиент.
update.php:
Этот файл PHP вызывается модулем каждый день в определенное время, чтобы проверить, работает ли на модуле последняя версия прошивки. Просто поместите последний файл «.bin» на файловый сервер и укажите каталог файла в переменной файла.
Если поначалу такое количество файлов кажется пугающим, я включил пользовательскую документацию на следующем шаге.
Шаг 4: Пользовательская документация
Вступление:
Weather API предоставляет простой интерфейс для запроса данных о погоде для местоположений на поверхности земли. Вы запрашиваете информацию о погоде для конкретной пары широта / долгота с указанным выходным форматом. API возвращает температуру, влажность, давление и индекс качества воздуха, которые последний раз были записаны ближайшим модулем из запрошенного места.
Прежде чем вы начнете:
Этот документ предназначен для разработчиков веб-сайтов и мобильных устройств, которые хотят включить информацию о погоде в разрабатываемое приложение. Он знакомит с использованием API и справочными материалами по доступным параметрам.
Запросы данных о погоде:
Запросы API погоды строятся в виде строки URL. API возвращает данные о погоде для точки на Земле, заданной парой широта / долгота. Обратите внимание, что точность данных о погоде прямо пропорциональна плотности модулей, размещенных в области.
Запрос Weather API принимает следующую форму:
example.com/retrieve.php?lat=25.96446&lon=53.9443&format=json
Где выходной формат (формат) может быть одним из следующих значений:
- JSON (рекомендуется), указывает вывод в нотации объектов JavaScript (JSON); или
- XML указывает вывод в формате XML, заключенный в узел.
Параметры запроса:
Как правило, для всех URL-адресов параметры разделяются символом амперсанда (&). Список параметров и их возможные значения указаны ниже.
Обязательные параметры:
- lat: обозначает широту местоположения для поиска. (например, широта = 19,56875)
- lon: отображение долготы местоположения для поиска. (например, lon = 72,97568)
Дополнительные параметры:
формат: задает выходной формат ответа для данных о погоде. Это может быть JSON или XML. По умолчанию используется JSON. (например, format = json или format = xml)
Погодные реакции:
Для каждого действительного запроса служба часового пояса будет возвращать ответ в формате, указанном в URL-адресе запроса. Каждый ответ будет содержать следующие элементы:
-
успех: значение, указывающее статус ответа.
- 0: отрицательно; указывает на неправильный формат запроса.
- 1: утвердительный; указывает, что запрос был успешным.
- message: строка, указывающая причину некорректности запроса. Доступно только при отрицательном статусе.
-
data: массив с несколькими погодными параметрами.
- temp: данные о температуре.
- гул: данные о наличии влажности.
- прес: данные об абсолютном давлении.
- aqi: настоящий индекс качества воздуха.
Примеры ответов обоих форматов можно увидеть на изображениях.
Шаг 5: Настройка модуля
Точка доступа создается, и веб-страница размещается на IP-адресе (по умолчанию: 192.168.4.1) для получения учетных данных от диспетчера устройств / пользователя при самой первой загрузке или если модуль не находит уже сохраненные учетные данные в EEPROM.
Пользователь должен ввести SSID и пароль, к которому пользователь хочет подключить модуль. Широта и долгота заполняются автоматически, если вы разрешаете браузеру доступ к местоположению.
После того, как все данные введены, нажмите кнопку «ОТПРАВИТЬ», и все учетные данные будут записаны в EEPROM модуля.
Этот шаг очень важен, поскольку при массовом производстве модулей невозможно запрограммировать все модули с его точными данными о местоположении и учетными данными Wi-Fi. Кроме того, не рекомендуется жестко кодировать учетные данные в программе, поскольку, если нам вообще нужно переместить модуль в какое-то другое место или мы хотим изменить учетные данные WiFi, нам нужно будет перепрограммировать модуль. Чтобы избежать этих хлопот, реализована функция начальной настройки.
Шаг 6. Пришло время передать данные в облако
После того, как все предыдущие шаги выполнены, теперь пора позволить модулю загрузить данные на сервер. Он автоматически начнет загрузку после того, как вы сохраните учетные данные.
Он вызывает «insert.php» как вызов API с передачей всех параметров для отправки в методе GET.
Приведенный ниже фрагмент кода показывает, как обрабатываются параметры.
if (isset ($ _ GET ['temp']) && isset ($ _ GET ['hum']) && isset ($ _ GET ['pres']) && isset ($ _ GET ['aqi']) && isset ($ _ GET ['mac']) && isset ($ _ GET ['lat']) && isset ($ _ GET ['lon'])) 2. {3. // основная программа 4.}
Таким образом, все модули начинают выгружать данные.
Примечание. Уменьшите частоту загрузки в коде, если вы чувствуете, что сервер перегружен.
Шаг 7. Обновление по воздуху (OTA)
После того, как модуль настроен и начинает загружать данные, он проверяет наличие обновлений прошивки каждый день в определенное время, указанное в программе. Если он их обнаруживает, он загружает и записывает в него двоичный файл. А если этого не происходит, продолжается обычная операция загрузки данных.
Чтобы проверить наличие нового обновления, модуль вызывает update.php, отправляя MAC-адрес в заголовке запроса. Затем сервер проверяет, есть ли для этого конкретного MAC-адреса какое-либо новое обновление, если да, то он отправляет двоичный файл последней прошивки в ответ.
Он также проверяет наличие всех необходимых заголовков, необходимых для базовой аутентификации модуля.
Шаг 8: Как пользователь / клиент может получить доступ к данным…
Получить доступ к данным с сервера довольно просто. Просто вызвав «retrieve.php», мы получим данные о погоде в ответ в формате JSON. После этого остается лишь проанализировать данные JSON для доступа к отдельным элементам. То же самое и с ответом XML. Пользователь всегда может указать предпочтительный формат ответа, с которым ему удобно работать. Если пользователь не указывает формат, по умолчанию используется формат JSON.
Образец запроса делается с помощью инструмента POSTMAN для проверки работы API.
Пример синтаксического анализа ответа JSON в javascript показан во фрагменте кода ниже.
var url = "https://example.com/retrieve.php?lat=19.044848&lon=72.8464373";function httpGet (theUrl) {var xmlHttp = new XMLHttpRequest (); xmlHttp.open («ПОЛУЧИТЬ», theUrl, false); // false для синхронного запроса xmlHttp.send (null); return xmlHttp.responseText; } var myVar = httpGet (URL); var obj = JSON.parse (myVar); document.getElementById ("aqi"). innerHTML = obj.data [0].aqi; document.getElementById ("температура"). innerHTML = Math.round (obj.data [0].temp) + "° C"; document.getElementById ("temp"). innerHTML = Math.round (obj.data [0].temp) + "° C"; document.getElementById («влажность»). innerHTML = Math.round (obj.data [0].hum) + «%»; document.getElementById ("давление"). innerHTML = Math.round (obj.data [0].pres) + "mb";
Исходный код примера HTML-страницы, анализирующей ответ JSON, доступен в конце этого шага.
Примечание. Измените расширение файла на «.html».
Шаг 9: Ограничения этого проекта
- Проект использует GET для отправки данных; даже несмотря на то, что он не имеет дело с конфиденциальными данными, данными можно легко манипулировать, поскольку он не имеет никакого механизма для проверки подлинности источника, кроме проверки заголовков, которые можно легко изменить, и даже обычное устройство можно подделать казаться погодным модулем.
- Поскольку модуль полностью полагается и зависит от другой точки доступа (WIFI) для отправки данных, которые в большинстве случаев будут принадлежать другим организациям. Если по какой-то причине точка доступа вообще не работает, модуль не сможет отправлять данные.
- Несмотря на то, что проект построен для повышения точности существующей системы, датчик, доступный на рынке, менее точен, чем ожидалось, что в результате приводит к сбою его основной цели.
- При планировании проекта я планировал включить режим, в котором сервер усредняет значение данных в зависимости от местоположения для исправления ошибок. Но после реализации этой функции я понял, что для перевода координат в географические регионы нужны сторонние API.
Шаг 10: Дальнейшие улучшения, которые можно внести в этот проект
- Точность модуля может быть дополнительно повышена за счет специальной настройки датчиков для конкретной цели вместо использования универсального модуля, доступного на рынке.
- Модуль можно модифицировать, чтобы он работал еще более независимо, используя специальный чип, который по беспроводной связи обменивается данными с вышками сотовой связи для отправки данных, что повышает отказоустойчивость.
- Солнечная панель и аккумуляторная система могут использоваться в сочетании с режимом глубокого сна ESP, что повышает энергоэффективность и делает его более независимым от внешнего источника питания.
- POST может использоваться для отправки данных с некоторым механизмом аутентификации, например с использованием циклических кодов для каждой передачи данных.
- Вместо NodeMCU, который представляет собой макетную плату, мы можем использовать специальный микроконтроллер в массовом производстве, что не только снижает стоимость, но и позволяет наилучшим образом использовать системные ресурсы.
- В сочетании с API геолокации Google и подключением к любому доступному открытому Wi-Fi модуль может работать даже без его настройки; готов к передаче данных с завода без каких-либо дополнительных настроек.
Шаг 11: Несколько слов для аудитории
Привет, ребята, я понимаю, что это руководство совсем не для новичков, так как я не упомянул все детали, которые необходимо осветить. К тому же этот проект действительно обширен, чтобы его можно было описать в инструкциях. Тем не менее, я изо всех сил старался охватить все важные аспекты проекта. Я также знаю, что видео, демонстрирующее работу над проектом, было бы действительно здорово, но, поскольку это моя первая инструкция и, честно говоря, это моя первая публикация чего-либо подобного, я очень нервничал, оказавшись перед камера.
Если вам нужна помощь в создании этого проекта или чего-то подобного, просто напишите мне на [email protected] или оставьте комментарий, как всегда. Я постараюсь помочь вам в меру своих возможностей.
Спасибо!!
Рекомендуемые:
Система мониторинга погоды с использованием датчика Raspberry Pi3 и DHT11: 4 шага
Система мониторинга погоды с использованием датчика Raspberry Pi3 и DHT11: в этом руководстве я покажу вам, как подключить DHT11 к Raspberry Pi и вывести показания влажности и температуры на ЖК-дисплей. Датчик температуры и влажности DHT11 - это красивый маленький модуль. который обеспечивает цифровую температуру и влажность
Интеллектуальная система мониторинга погоды и скорости ветра на основе IOT: 8 шагов
Интеллектуальная система мониторинга погоды и скорости ветра на основе IOT: разработана - Нихилом Чудасма, Дханашри Мудлиар и Ашита Радж Введение Важность мониторинга погоды существует во многих отношениях. Необходимо следить за погодными параметрами, чтобы поддерживать развитие сельского хозяйства, теплиц
Интеллектуальная система мониторинга энергии: 5 шагов
Интеллектуальная система мониторинга энергии: в Керале (Индия) потребление энергии отслеживается и рассчитывается путем частых выездов технических специалистов из отдела электричества / энергетики на места для расчета тарифов на электроэнергию, что является трудоемкой задачей, так как будут построены тысячи домов
Домашняя система мониторинга погоды IoT с поддержкой приложений Android (Mercury Droid): 11 шагов
Домашняя система мониторинга погоды IoT с поддержкой приложений Android (Mercury Droid): Введение Mercury Droid - это один из видов встроенной системы IoT (Интернета вещей), основанный на мобильном приложении Mercury Droid для Android. Которая способна измерить & следить за погодой в доме. это очень недорогая домашняя система мониторинга погоды
PInt @ t10n: Интеллектуальная система мониторинга предприятия: 9 шагов
PInt @ t10n: Интеллектуальная система мониторинга предприятия: PI @ nt @ t10n Этот проект был создан в качестве теста для облака ibm iot. Мы используем esp-8266 для отправки и получения данных в облако ibm и из него. Связь между esp и облаком ibm происходит через MQTT. Для обработки всех данных и представления