КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

Курсы валют и метеоданные на Raspberry Pi

Описание

В этом уроке мы сделаем онлайн-табло с текущим курсом валют по отношению к рублю и текущую температуру воздуха при помощи Raspberry Pi и Trema-модулей Четырёхразрядный индикатор.

Видео

Нам понадобится

Подключение

Перед подключением необходимо установить адреса модулей Четырёхразрядных индикаторов. В нашем случае это адреса 0x09, 0x0a и 0x0b в шестнадцатеричной системе счисления. Для этого необходимо подключить модули по одному к Raspberry и выполнить следующий скрипт, указывая новый адрес в качестве аргумента, передаваемого скрипту в десятичной системе или в переменной newAddress, если скрипт выполняется из Thonny Python IDE.

Подробнее про установку адресов модулей с технологией Flash-i2C

# Подключаем библиотеку для работы с модулем
from pyiArduinoI2Cled import *
import sys

# Объявляем объект module для работы с функциями и методами библиотеки pyiArduinoI2Cled.
# Если при объявлении объекта указать адрес, например, module(0x0B),
# то пример будет работать с тем модулем, адрес которого был указан.
module = pyiArduinoI2Cled(auto = NO_BEGIN, bus = "/dev/i2c-3")

# Если сценарию не были переданы аргументы
if len(sys.argv) < 2:
    # Назначаем модулю адрес (0x07 < адрес < 0x7F).
    newAddress = 0x09

# Иначе
else:
    # Новый адрес - первый аргумент
    newAddress = int(sys.argv[1])

# Если датчик найден
if module.begin():
    print("Найден модуль %#.2x" % module.getAddress())

    # Если адрес удалось изменить
    if module.changeAddress(newAddress):
            print("Адрес изменён на %#.2x" % module.getAddress())

    else:
            print("Адрес не изменён!")

else:
    print("Модуль не найден!")


Получение ключа API Open Weather Map

Заходим на сайт Open Weather Map и нажимаем Sign In.

Нажимаем Create an Account и создаём новую учётную запись.

Входим в свою учётную запись, нажимаем на треугольник рядом с названием учётной записи и выбираем пункт меню My API Keys и копируем API ключ в скрипт проекта, в переменную OWMKEY.

Установка библиотек

Откроем эмулятор терминала

Для проекта понадобится установить библиотеки forex-python, pyowm и pyiArduinoI2Cled в существующую или новую виртуальную стреду:

pip install pyiArduinoI2Cled forex-python pyowm

Подробнее об установке библиотек можно узнать в этой статье.

Cкрипт проекта

Скрипт можно запустить из эмулятора терминала, сохранив его в файл например под названием currency.py, командой python currency.py или скопировать содержимое скрипта в программу Thonny Python IDE и запустить его там. Для работы в Thonny IDE так же необходимо установить все вышеперечисленные библиотеки в его виртуально среде. Подробнее об установке библиотек можно узнать в этой статье.

Для написания скриптов мы будем использовать рекомендованный Raspberry Pi Foundation редактор Thonny Python IDE. Для запуска нажмём на кнопку меню в правом верхнем углу, затем Программирование->Thonny Python IDE:

Откроется редактор, можем приступать к написанию скриптов:

Для работы с модулем необходимо включить шину I2C.

Ссылка на подробное описание как это сделать.

import requests
from pyowm import OWM
from datetime import datetime
from time import sleep

OWMKEY = 'ВАШ КЛЮЧ OWM'
# Подключаем библиотеку для работы с индикатором I2C-flash.
from pyiArduinoI2Cled import *

# Объявляем объект библиотеки pyiArduinoI2Cled, указывая адрес модуля на шине I2C.
disp1 = pyiArduinoI2Cled(bus = "/dev/i2c-3", address = 0x09, auto = NO_BEGIN)
disp2 = pyiArduinoI2Cled(bus = "/dev/i2c-3", address = 0x0a, auto = NO_BEGIN)
disp3 = pyiArduinoI2Cled(bus = "/dev/i2c-3", address = 0x0b, auto = NO_BEGIN)


# Объект OpenWeatherMap с ключом
owm = OWM(OWMKEY)

# Объект менеджера OpenWeatherMap
mgr = owm.weather_manager()

# Ждём инициализации модулей
while not disp1.begin():
    print("waiting module 1")
    sleep(.5)
    pass
while not disp2.begin():
    print("waiting module 2")
    sleep(.5)
    pass
while not disp3.begin():
    print("waiting module 3")
    sleep(.5)
    pass

# Выключаем все светодиоды всех модулей
disp1.clear()
disp2.clear()
disp3.clear()

# Указываем двоеточию не мигать (если оно выводится на индикатор).
disp1.blink(0, False)
disp2.blink(0, False)
disp3.blink(0, False)


while True:

    try:

        # Получаем курсы валют
        rate = requests.get("https://open.er-api.com/v6/latest/USD")
        rates_json = rate.json()
        usd_to_rub = rates_json["rates"]["RUB"]
        eur_tu_rub = usd_to_rub/rate.json()["rates"]["EUR"]
        usd = "US:" + str(round(usd_to_rub))
        eur = "EU:" + str(round(eur_tu_rub))

        observation = mgr.weather_at_place("Moscow,ru").weather
        tem = str(observation.temperature('celsius')["temp"])

        # Выводим значения
        disp1.print(usd, RIGHT, POS4)
        disp2.print(eur, RIGHT, POS4)
        disp3.print(tem, LEFT, TEMP)
        sleep(30)

    except KeyboardInterrupt:
        disp1.clear()
        disp2.clear()
        disp3.clear()
        disp1.reset()
        disp2.reset()
        disp3.reset()
        exit(1)

    except:
        print("oops")

Ссылки




Обсуждение

Гарантии и возврат Используя сайт Вы соглашаетесь с условями