Описание
В этом уроке мы сделаем онлайн-табло с текущим курсом валют по отношению к рублю и текущую температуру воздуха при помощи 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()
Обсуждение