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

Обсуждение