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