КОРЗИНА
магазина
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(None, NO_BEGIN)

# Если сценарию не были переданы аргументы
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.

pip3 install pyiArduinoI2Cled forex-python pyowm

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

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

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

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

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

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

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

from forex_python.converter import CurrencyRates
from pyowm.owm import OWM
from datetime import datetime
from time import sleep

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

# Объявляем объект библиотеки forex_python
c = CurrencyRates()

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

#print('after obj')
#disp1.setPull

# Объект 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)

try:

    while True:

        observation = mgr.weather_at_place("Moscow,ru").weather
        one_call = mgr.one_call(lat=55.7512, lon=37.6184)
        temp = observation.temp
        tMoscow = 0
        for value in temp.items():
            tMoscow = value[1]
            break
        tMoscow -= 273.15

        w = round(tMoscow)

        # Получаем курсы валют
        usd = c.get_rate('USD', 'RUB')
        eur = c.get_rate('EUR', 'RUB')
        t = "US:" + str(usd)
        s = "EU:" + str(eur)

        # Выводим значения
        disp1.print(t, RIGHT, POS4)
        disp2.print(s, RIGHT, POS4)
        disp3.print(w, LEFT, TEMP)
        sleep(10)

except:

    # Очищаем дисплеи если сценарий был прерван из-за исключения
    disp1.clear()
    disp2.clear()
    disp3.clear()
    disp1.reset()
    disp2.reset()
    disp3.reset()

Ссылки




Обсуждение

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