Домашний погодный виджет с помощью arduino и raspberry

Создание домашнего погодного виджета с помощью Arduino и Raspberry

Продолжаем создавать свой собственный “Умный дом” и на очереди – объединение устройств в сеть, часть 1.

Используем Open Weather Map

Для создания умного дома, необходимо объединить все умные устройства в единую сеть. Для этого Arduino UNO не подойдет в своей обычной комплектации. Часто данная плата работает как периферийное устройство, которое связывает датчики или устройства вместе и уже отсылает данные в “мозг”. На роль данного “мозга” отлично подойдет Raspberry pi. Подробно рассказывать об этой плате я не буду. Она обладает всеми нужными функциями маломощного сервера, что для iot устройств отлично подходит.

Можно несколькими путями связать два устройства, но мы воспользуемся проводным подключением через UART – USB. На нашем сайте уже есть подробная статья, которая расскажет вам о данном способе подключения: https://arduinoplus.ru/podkluchenie-raspberry-arduino/ , и поэтому опустим инструкцию по подключению и применению.

Итак, первое, что мы делаем — это используем уже готовый погодный сервис, на котором мы будем брать всю нужную нам информацию о всех городах мира. Сервис – Open Weather Map. Сайт – https://openweathermap.org/. Для управления функциями данного сайта нужен специальный ключ, который нам дадут после создания аккаунта. После того, как вы его создали, переходим по ссылке “API keys”

И вот тот ключ, который мы будем использовать в нашем коде.

Если ключ у вас есть, то отлично, переходите к пункту два.

Теперь я попробую кратко, но информативно описать все, что в итоге будет происходить между raspberry pi и сервисом OpenWeatherMap. Raspberry отправляет http запрос на сервер, который в ответ отправляет json ответ (также возможет XML и HTML ответ, но их мы рассматривать не будем, про них можно узнать на офицальном сайте).

Выглядит это как-то так:

Ответ:

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

В запросе есть несколько изменяемых элементов.

  1. Город: weather?q=Rostov-na-Donu
  2. Ключ: app >В запросе можно изменить “город”, и информация ответа будет соответствовать данному городу. “Ключ” вы подставляете свой, который вы получил в пункте 1. “Измерение” влияет на единицы измерения полученного ответа. Есть 3 разных измерения: standard; metric; imperial.
    Разницу между всеми измерениями можно узнать по ссылке: https://openweathermap.org/weather-data.

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

Программа для Raspberry pi

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

Для начала попробуем сделать так, чтобы полученную информацию от сервера мы могли увидеть своими глазами и убедится, что наш код и сервис работает исправно.

В ответ на введённый город ‘Moscow’, он мне выдал точные данные про Москву на ближайшие 3 часа. Убедитесь, что вы вводите правильное название города, на карте open weather map вы можете посмотреть правильные названия, так мой родной город “Ростов-на-дону” (анг. “Rostov-on-Don”) там называется “Rostov-na-Donu”, что может изначально немного смутить.

Если у вас все получилось, то немного измените код, по которому из serial-порта будет приходить текст, в нашем случае название городов, raspberry подключается к погодному сервису и находит ближайшие погодные данные по присланному городу и после этого отправляет часть этих данных обратно.

Программа на Arduino UNO

Данная плата будет исполнять те функции, которые были в одной из прошлых статей (управление на расстоянии), а именно, отправлять команды и принимать информацию, которую позже мы сможем посмотреть через ЖК-дисплей.

С помощью потенциометра мы выбираем один из трех городов (Ростов-на-Дону, Санкт-Петербург, Москва) и нажимаем на кнопку, чтобы отправить данные о выбранном городе на raspberry. Если данные пришли, то нам будет показан список погодных условий данного города на ближайшее время, а также его географические координаты.

Всю электроную схему подключения модулей к arduino вы можете узнать из прошлой статьи “Управление умным домом на расстоянии (продолжение)”, оно не отличается.

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

Если у вас все получилось, то вы можете поэкспериментировать с погодным ресурсом и добавить больше автоматики, подробно о возможностях погодного виджета вы найдете на просторах сети. Первая часть подошла к концу и увидимся скоро во второй части, где мы поговорим о протоколе MQTT и его реализации. Становитесь умнее вместе с вашим умным домом!

Cервер домашней метеостанции на Arduino + Виджет на Andro >

Одним из первых моих проектов при изучении Arduino была работа с цифровым датчиком температуры DS18B20. Затем я подключил три датчика DS18B20 и отправлял показания на сайт. Не так давно приобрел датчик температуры и влажности и к конкурсу решил создать проект сервера домашней метеостанции, при обращению к которому выдаются результаты с датчиков по JSON и написать виджет к телефону Android, показывающий данные показания. Виджет выводит показания с датчиков при нахождении дома (домашняя сеть), или из любого другого места при подключении телефона к интернету.

Создание домашнего сервера метео на Arduino

Дома подключены три датчика DS18B20 и один датчик DHT11

Схема подключения следующая:

При написании программы использовались следующие библиотеки Arduino

  • Ethernet – библиотека для работы с Ethernet-shield
  • spi – взаимодействовать с устройствами поддерживающими SPI протокол
  • onewire – взаимодействие с устройствами по протоколу 1-Wire
  • dht – Arduino библиотека для работы с датчиками DHT11,DHT22

Создаем web-сервер, присваиваем ip и порт обращения 10001, и при обращении к серверу опрашиваем датчики DS18B20 и DHT11. Чтобы сервер не тратил время на опрос и поиск кодов датчиков DS18B20 я внес уже полученные коды в массив my_addr. Результат сервер отдает в формате JSON.

Теперь пишем виджет на Android, чтобы на телефоне видеть показания датчиков, находясь в любом месте при наличии соединения с интернет.

Виджеты — это маленькие приложения, которые могут быть размещены на рабочем столе вашего Android-устрйства. Виджет периодически получает новые данные и обновляет свой вид.

Для создания виджета вам необходимо:
1. Создать XML-layout файл со слоем, в котором описывается внешний вид виджета.
2. Создать XML файл метаданных, в котором задаются различные характеристики виджета:

– layout-файл (из п.1.), чтобы виджет знал, как он будет выглядеть
– размер виджета, чтобы виджет знал, сколько места он должен занять на экране
– интервал обновления, чтобы система знала, как часто ей надо будет обновлять виджет

3. Создать BroadcastReceiver, который будет использован для обновления виджетов. Этот приёмник расширяет AppWidgetProvider, который обеспечивает жизненный цикл виджета.
4. Изменения в файле AndroidManifest.xml

Рассматривать программирование на Android я здесь не буду, займет слишком много места. Проблем при программировании обнаружилось много, сначала делал для Android 2.1, этот код для Android 2.3 уже давал ошибки при работе со строками, измененный код не пошел для Android 3.2 – изменились методы получения сетевых данных (работа стала возможна только в отдельном потоке), для Android 4.0 проверить не на чем, эмулятор постоянно виснет, а устройств нет. В общем времени для написания программы ушло больше недели. Для тех кому интересно в конце топика выложена ссылка на файлы данного проекта проекта для среды Eclipse.

При запуске виджета он пытается соединиться с внутренней сетью (192.168.1.111:10001 на тот случай, если я нахожусь дома), при неудаче с адресом в сети интернет хх.хх.хх.хх:10001

Если соединение удачно – парсим JSON-ответ выводим данные виджете и обновляем виджет

При неудаче – сообщение в виджет об отсутствии соединения

При нажатии на иконку происходит обновление данных.

У меня дома интернет через ADSL-модем, необходимо открыть порт 10001

Архив с файлами проекта для среды Eclipse находится в файле ArduinoMeteo.rar

Из ближайших планов модернизации проекта:
– подключение дополнительных датчиков (например BMP085 (уже заказан и в пути)),
– получение данных сервера метеостанции ROS и выдача голосовых сообщений по запросу голосом (см. проект) и по будильнику.
– придание программе на Android товарного вида (настройки и пр.) (это уже когда появится время).

Умный дом на Raspberry Pi и Arduino

Давно хотели автоматизировать базовые функции вашего дома, сделать их легкодоступными и управляемыми удаленно? Предлагаем вашему вниманию статью, которая поможет сделать собственный умный дом на базе Raspberry Pi и Arduino. В данной статье мы расскажем, как создать блок управления, который позволит нам управлять освещением в разных комнатах, измерять температуру и влажность, управлять игровой приставкой PlayStation 4, домофоном, принимать сигналы с датчиков движения. Все это можно автоматизировать посредством Apple HomeKit.

Что необходимо иметь?

  • RaspberryPi 3 – $42.50
  • NodeMCU ESP-12E – $2.98
  • Датчик движения HC SR501 – $1.39
  • Датчик температуры и влажности DHT21 – $2.59
  • 5V модуль реле, 10A 250V – $1.48×2
  • MicroSD 8GB, 10 Class – $8.55
  • Блок питания – $5.18
  • Провода

Можно выбрать любую другую версию Raspberry Pi. Наш выбор – Raspberry Pi 3 из-за наличия встроенного WiFi и Bluetooth. Вместо NodeMCU можете взять обычный Arduino Nano и отдельный модуль ESP8266 для WiFi. Далее все это спаять, перепрошить и настроить. Однако, для задач, которые мы будем выполнять, не нужны лишние затраты времени. В связи с чем, как по цене так и по трудозатратам, разумнее взять NodeMCU или что-то другое, уже готовое. Относительно силового реле – выберите необходимое вам количество. В нашем случае будут задействованы 3 устройства, в связи с чем мы будем использовать два реле с двумя отдельно-управляемыми отсеками. Ну и само собой, датчик движения вы тоже можете не использовать, если у вас нет в нем необходимости. Статья расскажет об установке, настройке всех этих компонентов, а каким именно образом использовать – решать вам.

Установка Raspbian Jessie

Настройка Wifi на Raspberry Pi

  1. После загрузки Raspberry открываем файл интерфейсов сети, для этого пишем:
    sudo nano /etc/network/interfaces Находим iface wlan0 inet manual и меняем на iface wlan0 inet static , под ним добавляем статичный локальный адрес. В нашем случае получилось так:
    auto wlan0
    allow-hotplug wlan0
    iface wlan0 inet static

address 192.168.1.150
netmask 255.255.255.0
gateway 192.168.1.1
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf address, netmask, gateway – разумеется пишем под настройки вашего роутера.
После введения изменений нажимаем CTRL+X, потом Y, потом ENTER

  • Открываем файл супликанта, вводя в командную строку следующее:
    sudo nano /etc/wpa_supplicant/wpa_supplicant.conf В открывшемся файле пишем настройки вашего WiFi, как указано ниже. В нашем случае получилось так:
    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
    update_config=1
    network= <
    ss
    psk=”AcC3S4R@SBP1″
    > Естественно, вместо PerfectoWeb – ваш SSID, а вместо AcC3S4R@SBP1 – ваш пароль.
    После введения изменений нажимаем CTRL+X, потом Y, потом ENTER.
  • Вводим в командную строку: sudo ifdown wlan0 После завершения процесса вводим: sudo ifup wlan0 Перезагружаемся командой: sudo reboot Wifi настроен и будет автоматически подключаться при старте Raspberry Pi.
  • Обновление системы

    1. До начала настройки рекомендуем обновиться и проапгрейдится. Для этого вводим в командную строку: sudo apt-get update
      sudo apt-get upgrade
    2. Если вдруг, вы используете не Raspbian Jessie, то стоит установить необходимый компилятор. Проверить версию можно по команде:
      g++-4.9 -v Если в ответе вы получили gcc version 4.9.2 (Raspbian 4.9.2-10) , то все в порядке. Если же у вас старая версия или вовсе не установлен компилятор, то необходимо установить следующей командой:
      sudo apt-get install g++

    Установка Node.js

    Нам необходимо установить Node.js начиная с версии 4.0. Именно с этой версии Node.js начал поддерживать ARM платформы по умолчанию. Мы установим версию 6.х, так как на данный момент многие плагины Homebridge не адаптированы под версию 8.х. Для установки последней актуальной версии из линейки 6.х выполняем следующие команду:
    curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash –
    sudo apt-get install -y nodejs Проверяем корректность установленной версии:
    nodejs -v В нашем случае установилась версия v6.11.2

    Установка Homebridge

    1. Изначально необходимо установить Avahi и прочие зависимости, которые необходимы для пакета MDNS из библиотеки HAP-NodeJS.
      Выполняем команду: sudo apt-get install avahi-daemon avahi-discover libnss-mdns libavahi-compat-libdnssd-dev
    2. Устанавливаем Homebridge и все зависимости последовательностью следующих команд:
      sudo npm install -g –unsafe-perm homebridge hap-nodejs node-gyp
      cd /usr/lib/node_modules/homebridge/
      sudo npm install –unsafe-perm bignum
      cd /usr/lib/node_modules/hap-nodejs/node_modules/mdns
      sudo node-gyp BUILDTYPE=Release rebuild
      Проверяем тестовым запуском:
      homebridge В ответ должны получить:
      [2017-08-15 10:05:15] —
      [2017-08-15 10:05:15] config.json (/home/pi/.homebridge/config.json) not found.
      Scan this code with your HomeKit App on your iOS device to pair with Homebridge:

    [2017-08-15 10:05:15] Homebridge is running on port 44278 Это означает, что все успешно установлено и работает. Вы можете заметить, что Homebridge не смог найти файл конфигурации config.json. Именно его необходимо создать на следующем шаге.

  • Создаем файл конфигурации следующими командами:
    sudo -i
    mkdir /root/.homebridge
    touch /root/.homebridge/config.json
    Пример с минимальной конфигурацией:
    <
    “bridge”: <
    “name”: “RaspberryPi”,
    “username”: “08:61:6E:E3:2D:7A”,
    “port”: 51826,
    “pin”: “031-45-170”
    > > Но мы рекомендуем скачать нашу версию, с уже прописанными плагинами, чтобы в конечном итоге у вас получилась такая-же система, как и у нас.
  • Далее делаем homebridge демоном и добавляем его в автозагрузку. Для этого вам необходимо создать файл:
    sudo nano /etc/init.d/homebridge Скачиваем скрипт для автозагрузки и копируем его содержимое в /etc/init.d/homebridge .
    После сохранения, выполняем следующие команды
    chmod 755 /etc/init.d/homebridge
    update-rc.d homebridge defaults Теперь при запуске Raspberry Pi у нас homebr >

    Установка плагинов Homebridge

    Homebridge, посредством плагинов от сотни разработчиков, может управлять GPIO Raspberry Pi на разном уровне, а также IR, Wifi, Bluetooth устройствами. Для нашей сборки необходимо установить следующие плагины:

    1. Устанавливаем cmdswitch2 для вкл/выкл устройств скриптом
      sudo npm install -g homebridge-cmdswitch2
    2. Устанавливаем homebridge-cmd_light_control для вкл/выкл и диммирования света
      sudo npm install -g homebridge-cmd_light_control
    3. Устанавливаем HttpTemphum для получения данных температуры и влажности через HTTP в формате JSON
      sudo npm install -g homebridge-httptemperaturehumidity
    4. Устанавливаем homebridge-hc-sr501 для считывания данных с датчика движения HC-SR501
      sudo npm install -g homebridge-hc-sr501
    5. Устанавливаем ps4-waker для вкл/выкл PlayStation 4
      sudo npm install -g ps4-waker

    Данный набор плагинов достаточен для нашей сборки, их конфигурации вы можете найти и изменить в config.json, который скачали ранее.

    Подключение устройств

    Далее вам необходимо подключить все необходимые устройства в пины Raspberry Pi, как это указано на фотографии.
    БУДЬТЕ ОСТОРОЖНЫ при работе с реле и высоким напряжением! Если вы чего-то не знаете точно, лучше не трогать!

    После подключения, скатайте архив со скриптами, разархивируйте и загрузите в директорию /home/pi/ .
    Обратите внимание: все файлы должны иметь права 0777.
    Для этого вы можете выполнять команду для всех файлов по отдельности следующим образом:
    chmod 0777 /home/pi/light_bathroom_off.py
    . Выполните данную команду для всех файлов, которые вы скачали и загрузили в директорию /home/pi/

    Подключение к PlayStation 4

    Настройка термометра на Arduino

    1. Подключаем NodeMCU к компьютеру и открываем официальный программатор.
      Для NodeMCU необходимо установить драйвер, в нашем случае он построен на чипе CH340G. Для этого необходимо зайти в File > Preferences , далее в поле Additional Boards Manager URLs указать ссылку для скачивания альтернативных плат http://arduino.esp8266.com/stable/package_esp8266com_index.json и нажать OK. После, переходим в раздел Tools > Boards > Boards Manager , в строке поиска пишем esp8266, находим esp8266 by ESP8266 Community и устанавливаем.
    2. Устанавливаем модуль для управления датчиком DHT и модуль Adafruit Sensor master.
    3. Скачиваем скетч для создания HTTP сервера и вывода данных с датчика температуры и влажности DHT21.
      В скетче смените IP адрес и данные для подключения к WiFi на ваши. Заливаем скетч и идем дальше.
    4. Подключаем датчик, как показано на фотографии. В нашем случае подключение идет на ножку D5, GDN и 3.3V.

    Запускаемся!

    1. Очищаем кеш аксессуаров и persist на Raspberry Pi следующими командами:
      sudo -i
      rm -r /root/.homebridge/accessories
      rm -r /root/.homebridge/persist
      Перезагружаемся:
      reboot
    2. Включаем Arduino к USB 5V/1A и ставим в нужное место в комнате.
    3. Открываем iPad, iPhone и заходим в приложение Home (Дом). Нажимаем добавить аксессуар и ваш планшет или смартфон должен увидеть устройство с названием RaspberryPi. Добавляем его и радуемся!

    Вуаля! Теперь мы можем управлять светом на кухне, в ванной, управлять PlayStation 4, получать данные от датчика движения, узнавать температуру и влажность. Мы также можем автоматизировать некоторые действия в Apple Home. Например, чтобы все устройства автоматически выключались, когда вы уходите из дома. Или, чтобы при достижении определенной температуры, реле включало не свет, а вентилятор. Надеемся, данная статья была полезной для вас и на основе нее вы сможете автоматизировать и другие, необходимые вам устройства.

    Домашняя метеостанция на базе Ардуино

    Давненько хотелось сделать мини метеостанцию-надоело выглядывать в окно чтобы посмотреть на градусник за стеклом. Этот приборчик заменит гигрометр, барометр и термометр а также покажет текущее время. В данном посту я расскажу как быстро и просто собрать небольшую метеостанцию на базе Ардуино. Основой будет плата Arduino Nano можно применить другие платы- Arduino Uno, Arduino Pro mini). Данные атмосферного давления и температуры в помещении будем получать с датчика BMP180, а влажность и температуру на улице с датчика DHT11. Часы реального времени DS1302 будут указывать текущее время. Всю информацию выводим на двухстрочный дисплей LCD1602.

    Датчик DHT11 передает информацию по одному проводу на ардуино. Питается напряжением 5 В. Он измеряет влажность в пределах от 20 до 80%. Температура измеряет в диапазоне от 0 до 50 о С.

    Эта самоделка сделана на базе готовых плат и датчиков, поэтому ее можно повторить любому начинающему любителю поработать с паяльником. Заодно можно получить азы программирования Ардуино. Я программировал эту метеостанцию в программе визуального программирования FLPROG за 15 минут. Не нужно вручную часами писать скетчи, данная программа помогает начинающим (и не только) быстро освоить азы программирования устройств на основании платформы Ардуино.

    Кому лень повозиться с программой – скетч ( только выставлять текущее время часов надо будет):

    Применять такой прибор можно где угодно или дома, на природе или поместить в автомобиль. Есть возможность запитать схему от аккумуляторов, применив плату заряда, в итоге будет переносная модель метеостанции.

    Всю информацию можно получить посмотрев в видео:

    Перечень материалов и инструментов

    -плата Arduino Nano
    -двухстрочный дисплей LCD1602;
    -часы реального времени DS1302;
    -датчик атмосферное давления и температуры BMP180;
    -датчик температуры и влажности DHT11;
    -блок зарядки от телефона;
    -любой подходящий корпус
    -пинцет;
    ножницы;
    -паяльник;
    -кембрик;
    -тестер;
    -соединительные провода;
    -провод четырехжильный для выносного датчика.

    Шаг первый. Делаем корпус для метеостанции

    Подобрал пластмассовую коробочку из магазина Fix Price (всего то 17р). Предварительно вырезал в крышке окно для дисплея. Затем вырезал частично перегородки в коробке, сделал отверстия для USB разъема платы Arduino проем для датчика BMP180 Датчика BMP180 будет находится на наружной стороне корпуса, чтобы исключить лишний нагрев от электронной начинки находящейся внутри. После я покрасил корпус самоделки изнутри потому что пластик прозрачный. Коробка закрывается на защелку и в ней все элементы неплохо поместились.

    Шаг второй. Сборка схемы прибора.

    Далее надо скоммутировать по схеме все платы и датчики метеостанции. Делаем это с помощью монтажных проводов с соответствующими разъемами. Я не делал соединения на пайке ,так в перспективе при выходе какого то модуля из строя (или по другим причинам) можно легко его заменить. На винтовом разъеме подключается кабель датчика DHT11 идущий на улицу. Питание можно осуществить с разъема USB платы Ардуино на компьютер, или подав напряжение 7-12В на контакт VIN и GND.

    Сначала я собрал схему вне корпуса и запрограммировал и отладил ее в программе FLPROG.

    Фото блок схемы в программе FLPROG.

    Когда первый раз запрограммировал и включил схема метеостанции заработала. Сейчас стало возможным иметь данные о погоде за бортом и в комнате. В общем получилась интересная домашняя метеостанция с множеством различных функций.

    Неплохая получилась самодельная конструкция собранная в выходные. Было увлекательно самому сделать интересный и полезный приборчик. Сделать самостоятельно такой девайс, я думаю по плечу даже начинающему.Это не требует больших затрат времени и денег. Применить можно его где хочешь в доме на загородной даче. На всю работу пошло два выходных вечера всю электронику брал на Алиэкспресс. Остальные материалы нашлись у меня по сусекам. На базе платформы Ардуино можно собирать множество разнообразных полезных устройств.

    Всем спасибо за внимание, вам успехов и удачи и в вашей жизни и в творчестве!

    Источники:

    http://cxem.net/arduino/arduino79.php

    http://perfecto-web.com/ru/blog/hardware/smart-home-with-raspberrypi-arduino-homebridge.html

    http://usamodelkina.ru/9703-domashnyaya-meteostanciya-na-baze-arduino.html

    http://arduinoplus.ru/sozdaem-meteostanciju-na-osnove-esp32-i-datchikov/

  • Ссылка на основную публикацию