Тикер котировок Yahoo Finance на Arduino: живой дисплей рынка
Компоненты и материалы
- Arduino Mega 2560 — 1 шт.
- LCD 16×2 (белый на синем, Adafruit) — 1 шт.
- Провода-перемычки: male/female — 12 шт., male/male — 5 шт.
- 3D-принтер (опционально, для корпуса дисплея)
Программное обеспечение (ПК)
- Python 2.7 (рекомендуется Enthought Canopy)
- Библиотеки:
pip install yahoo_finance pyserial
Принцип работы
- Python-скрипт опрашивает Yahoo Finance API по списку тикеров.
- Получает цену открытия и текущую цену.
- Отправляет данные по Serial на Arduino (формат:
TICKER*OPEN,CURRENT\n). - Arduino выводит на LCD: тикер, открытие, текущую цену, изменение. Текст прокручивается.
Настройка Serial-порта
В Python-скрипте укажите правильный COM-порт:
ser = serial.Serial('COM3', 9600) # замените на свой
Код Python (передача данных)
from yahoo_finance import Share
import time, serial
StockShares = ['DOW','YHOO','BAC','F','JPM','TWTR','CHK','PBR','FIT','COG',
'ABX','FCX','GE','TRGP','CNX','BSX','MRC','NKE','NEM','PBRA',
'HST','BP','MRK','HON','MET','CLR','WPX','EXC','JCP','YELP',
'GNC','TSLA','VRX','P','NFLX','CMG','SM','WYNN','SHAK','ICON']
ser = serial.Serial('COM1', 9600)
def printShare(share, name):
ser.write(name + ': *' + share.get_open() + ',' + share.get_price())
print(name + ': *' + share.get_open() + ',' + share.get_price())
time.sleep(0.1)
def mainProgram():
for i in StockShares:
s = Share(i)
printShare(s, i)
s.refresh()
time.sleep(9.5)
while True:
mainProgram()
Код Arduino (приём и вывод на LCD)
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
String ticker;
float openPrice, currentPrice;
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor(0,0);
delay(1000);
}
void loop() {
if (Serial.available() > 0) {
ticker = Serial.readStringUntil('*');
openPrice = Serial.parseFloat();
currentPrice = Serial.parseFloat();
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print(ticker + " open:" + String(openPrice,2));
lcd.setCursor(0,1);
lcd.print("current:" + String(currentPrice,2));
delay(2000);
// Прокрутка
for (int i=0; i<17; i++) { lcd.scrollDisplayLeft(); delay(200); }
delay(500);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("change: " + String(currentPrice - openPrice,2));
delay(2000);
for (int i=0; i<17; i++) { lcd.scrollDisplayLeft(); delay(200); }
lcd.clear();
}
Корпус для LCD
3D-модель: Thingiverse #614241
Схема подключения LCD
Стандартная схема 4-битного режима: RS→12, E→11, D4→5, D5→4, D6→3, D7→2, RW→GND, V0→потенциометр контраста.
Примечание
API Yahoo Finance устарело; для актуальных проектов рекомендуется использовать Alpha Vantage, Twelve Data или Finnhub с соответствующими правками в Python-коде.
Производственный процесс
- Эволюция, материалы и производство современных унитазов
- Револьвер: от истоков к современному производству
- Сборка Bluetooth-робота-шпиона на Arduino с управлением с телефона
- FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
- DIY Arduino TV-B-Gone: универсальный пульт для выключения любого телевизора
- Создание пользовательских LED-часов с будильником — видно с 12 метров
- Find Me: Умный поисковик вещей на Arduino и Bluetooth
- Оптимизированные решения питания для проектов на Arduino
- Крестики-нолики на Arduino с матрицей MAX7219 и картонным корпусом
- Пошаговое руководство: сборка умного четырёхногого робота на Arduino