Реклама ⓘ
Главная » Arduino
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Реклама ⓘ

Табло котировок Forex в режиме реального времени на RGB-матрице 32x64

Forex (Форекс) — это международный валютный рынок, товаром на котором служит валюта. Здесь покупают доллары за евро, евро за доллары и так далее. Таким образом, каждая пара валют представляет собой отдельный инструмент. Форекс работает круглосуточно в течение рабочей недели. 

Создадим табло для отображения в режиме реального времени некоторых котировок Forex, а также котировок акций и фьючерсных контрактов.

В проекте используем следующие комплектующие:

1) RGB-матрица HUB75 (aliexpress 16.5$

2) Микрокомпьютер Raspberry pi zero W (aliexpress - 23.48$)

3) Драйвер RGB-матриц для Raspberry pi (amperka - 990 руб)

4) Блок питания 5В 2-5А

RGB-матрица HUB75

2048 RGB светодиодов собраны в панель с диагональю 11 дюймов. Светодиоды панели светят с яркостью до 1200 кд/м² , что позволяет в деталях разглядеть изображение на матрице даже при ярком освещении. С обратной стороны распаяна схема управления и предусмотрены крепления под винт.

На самой матрице нет микроконтроллера и микросхем памяти. Светодиоды подключены через сдвиговые регистры и драйверы. LED матрица питается от 5 В и потребляет до 4 А.

Для подключения матрицы используется 16-проводной шлейф:

В качестве микроконтроллера будем использовать Raspberry pi, что позволяет управлять 12 матрицами 32х64.

Микрокомпьютер Raspberry pi zero W

Raspberry Pi Zero W – вторая модель миниатюрного одноплатного компьютера из линейки Raspberry Pi. По сравнению с Raspberry Pi Zero Version 1.3, Zero W не претерпел других изменений, кроме добавления чипа беспроводной связи Cypress CYW43438, поддерживающего Wi-Fi сети стандарта 802.11n и Bluetooth 4.1 (Bluetooth Classic и LE)

Установку операционной системы и подключение к локальной сети можно осуществить без использования монитора и клавиатурs, в headless-режиме. Скачиваем свежий образ Raspbian с официального сайта со страницы https://www.raspberrypi.org/downloads/raspbianЗаписываем скачанный образ на microSD-карточку. Можно использовать, например программу Win32DiskImager. Прежде чем устанавливать microSD-карту в слот микрокомпьютера Raspberry Pi Zero W и подавать на него питание, настроим подключение к сети. После записи образа нужно открыть microSD-карточку и создать в корневой папке два файла: ssh (без расширения) и wpa_supplicant.conf.  Файл ssh оставляем пустым (он нужен для того, чтобы активировать доступ по SSH, который по умолчанию в Raspbian отключен). В файл wpa_supplicant.conf вносим следующее содержимое, поменяв значения параметров ssid и psk на свои.

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=RU
network={
ssid="my_DLink"
psk="********"
key_mgmt=WPA-PSK
}

Устанавливаем microSD-карту в слот микрокомпьютера Raspberry Pi Zero W и подаем на него питание. Если имя точки доступа Wi-Fi и ее пароль указаны корректно, то Raspberry Pi Zero W при загрузке должен автоматически подключиться к локальной сети и получить локальный IP-адрес, который можно посмотреть на роутере.

Зная IP-адрес мы можем подключиться к микрокомпьютеру по ssh (из ОС Windows программой putty).  Логином pi, пароль raspberry

Драйвер RGB-матриц для Raspberry pi

Используется для подключения матрицы к Raspberry pi

 

Устанавливается сверху на Raspberry Pi методом бутерброда.

Соединяем сигнальные линии между драйвером и светодиодной матрицей через шлейф. Один контакт шлейфа в выходной разъём на контроллере, а другой — в разъём входящих данных на матрице DATA IN. Подключаем питание от драйвера на светодиодную матрицу силовым проводом. Один конец провода в клеммник PWR OUT на контроллере, а второй — в разъём POWER на матрице. Подключаем питание на модуль через внешний разъём «DC Barrel jack». Используем блок питания 5В. Потребление тока до 5А, но это при включении всех светодиодов на максимум (белый цвет). При подключении нескольких светодиодных панелей, соответственно увеличивается запас по току в N-раз, В проекте будет выводиться текстовая информация на черном фоне, поэтому можно ограничитьcя блоком питания на 2A.

Установка программного обеспечения на Raspberry pi.

Подключаемся к Raspberry pi zero W по ssh.

Скачиваем и запускаем скрипт для настройки программного обеспечения для работы Raspberry с LED панелями.

wget https://raw.githubusercontent.com/amperka/scriptsRPI/master/amperka-rpi-rgb-matrix.sh
sudo bash amperka-rpi-rgb-matrix.sh

Программа предложит выбор  вывода изображений:

1 - High Quality - на матрице выводиться изображение без мерцаний и бликов. Но тогда необходимо отключить аудио драйвер на Raspberry pi zero W. 

2 - Convenience - при выводе изображений возможны появления мерцаний. Но звук останется включенным. 

(Для режима 1 необходимо установить джампер на драйвер).

Выбираем режим 2 (перемычку не устанавливаем).

Начнётся процесс установки и компиляции, затем после перезагрузки в корневой папке должна появиться папка rpi-rgb-led-matrix.

Примеры работы с матрицей на python находятся в папке ./home/pi/rpi-rgb-led-matrix/bindings/python/samples.

Программирование.

Для получения котировок будем использовать API сайта одного из брокеров FOREX - https://www.instaforex.com/. Информация по получению котировок можно посмотреть на странице https://partners.instaforex.com/ru/quotes_description.php/. При обращении по адресу  https://quotes.instaforex.com/api/quotesTick получаем информацию о текущих котировках

symbol - символ валютной пары
bid - значение bid
ask - значение ask
change - величина показывающее изменение относительно предыдущей цены валютной пары
digits - величина показывающее до сколки знаков после запятой округлена цена валютной пары
lasttime - значение времени последнего изменения цены валютной пары
change24h - изменение относительно закрытия предыдущего дня

Для получения только необходимых валютных пар необходимо передать параметр q= со списком валютных пар через запятую.

Пример запроса: 

https://quotes.instaforex.com/api/quotesTick?q=eurusd,gold,%23bitcoin


Список пар можно посмотреть на странице https://www.instaforex.com/ru/trading_symbols, где есть валютные пары, драгметаллы, акции, криптовалюты, фьючерсы на нефть и прочее.

Выбираем необходимые пары и приступаем к написанию программы. 

Создаем в папке /home/pi/rpi-rgb-led-matrix/bindings/python/samples файл forex.py

Подключаем необходимые библиотеки

import json
import requests
import time
from rgbmatrix import RGBMatrix, RGBMatrixOptions
from rgbmatrix import graphics

Для матрицы необходимо установить настройки

# Configuration for the matrix
options = RGBMatrixOptions()

options.rows = 32
options.cols = 64
options.chain_length = 1
options.parallel = 1
options.row_address_type = 0
options.multiplexing = 0
options.pwm_bits = 11
options.brightness = 100
options.pwm_lsb_nanoseconds = 130
options.led_rgb_sequence = "RGB"
options.pixel_mapper_config = ""

Для хранения получаемых данных создадим словарь. Словари в python – это неупорядоченные коллекции произвольных объектов с доступом по ключу.

arr={'symbolurl':{0:'Forex',1:'EURUSD',2:'%23AAPL',3:'GOLD',4:'%23FB'},
   'symbol':{0:'Forex',1:' EUR/USD',2:'Apple inc',3:'  GOLD',4:'Facebook'},
   'ask':{0:' ',1:'0',2:'0',3:'0',4:'0'},
   'bid':{0:' ',1:'0',2:'0',3:'0',4:'0'},
   'change':{0:0, 1:0, 2:0 ,3:0 ,4:0},
   'lasttime':{0:' ',1:'0',2:'0',3:'0',4:'0'}
   }

Каждые 10 секунд формируем адрес для получения данных одной из пар и получаемые данные сохраняем в словаре. Данные из словаря выводим на экран и в терминал.

Содержимое файла forex.py

#!/usr/bin/env python

import json
import requests
import time
from rgbmatrix import RGBMatrix, RGBMatrixOptions
from rgbmatrix import graphics

# Configuration for the matrix
options = RGBMatrixOptions()

#adafruit-hat
#options.hardware_mapping = 'regular'
options.rows = 32
options.cols = 64
options.chain_length = 1
options.parallel = 1
options.row_address_type = 0
options.multiplexing = 0
options.pwm_bits = 11
options.brightness = 100
options.pwm_lsb_nanoseconds = 130
options.led_rgb_sequence = "RGB"
options.pixel_mapper_config = ""


matrix = RGBMatrix(options = options)

#
link="https://quotes.instaforex.com/api/quotesTick?q=";
arr={'symbolurl':{0:'Forex',1:'EURUSD',2:'%23AAPL',3:'GOLD',4:'%23FB'},
     'symbol':{0:'Forex',1:' EUR/USD',2:'Apple inc',3:'  GOLD',4:'Facebook'},
     'ask':{0:' ',1:'0',2:'0',3:'0',4:'0'},
     'bid':{0:' ',1:'0',2:'0',3:'0',4:'0'},
     'change':{0:0, 1:0, 2:0 ,3:0 ,4:0},
     'lasttime':{0:' ',1:'0',2:'0',3:'0',4:'0'}
      }

pos=0
offset=0;

matrix.Clear()
canvas=matrix
font1 = graphics.Font()
font1.LoadFont("../../../fonts/7x13.bdf")
font2 = graphics.Font()
font2.LoadFont("../../../fonts/5x7.bdf")
font3 = graphics.Font()
font3.LoadFont("../../../fonts/4x6.bdf")
textColor1 = graphics.Color(0, 255, 0)
textColor2 = graphics.Color(0, 0, 255)
textColor3 = graphics.Color(0, 0, 255)
textColor4 = graphics.Color(0, 255, 0)
textColor5 = graphics.Color(255, 0, 0)

s = graphics.DrawText(canvas, font2, 0, 15, textColor1, "instaforex.com")
time.sleep(2)   # 

ipos=arr.keys()
ipos=sorted(ipos)
for i in range(len(ipos)):
   print(ipos[i],"=",arr[ipos[i]][0])
   print(ipos[i],"=",arr[ipos[i]][1])
   print(ipos[i],"=",arr[ipos[i]][2])
   print(ipos[i],"=",arr[ipos[i]][3])
   print(ipos[i],"=",arr[ipos[i]][4])

while True:
   # 
   matrix.Clear()
   graphics.DrawText(canvas, font1, 0, 10, textColor2, arr['symbol'][pos])
   graphics.DrawText(canvas, font2, 5, 20, textColor2, str(arr['ask'][pos]))
   if arr['change'][pos]>0:
      graphics.DrawText(canvas, font2, 10, 30, textColor4, "+"+str(arr['change'][pos]))
   elif arr['change'][pos]<0:
      graphics.DrawText(canvas, font2, 10, 30, textColor5, str(arr['change'][pos]))
   else :
      graphics.DrawText(canvas, font2, 10, 30, textColor3, "")
   #
   pos=max(1,(pos+1)%5)
   print("pos=",pos)

   responce=requests.get("https://quotes.instaforex.com/api/quotesTick?q="+arr['symbolurl'][pos])
   data1=json.loads(responce.text)
   print("data1=",data1)
   i=0
   for rec in data1:
      print(pos)
      arr['ask'][pos]=rec['ask']
      arr['bid'][pos]=rec['bid']
      arr['change'][pos]=rec['change']
      #print("pos=",pos,"  ask=",arr['ask'][pos],"  bid=",rec['bid'], "  change=",rec['change'])
      i=i+1

   for rec in data1:
      #print(rec)
      ipos=rec.keys()
      ipos=sorted(ipos)
      for i in range(len(ipos)):
         print(ipos[i],"=",rec[ipos[i]])
      print("----------------")
   #
   time.sleep(10)
   

Запуск файла

sudo python3 /home/pi/rpi-rgb-led-matrix/bindings/python/samples/forex.py

 

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (1) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется напряжение?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Модуль измерения тока на ACS712 (30А)
Модуль измерения тока на ACS712 (30А)
Катушка Тесла Конструктор регулируемого преобразователя напряжения LM317
вверх