工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Yahoo!株価ティッカープロジェクト – ArduinoとPythonでリアルタイム株価表示

必要な部品と材料

Adafruit 16x2 キャラクターLCD (白文字/青背景) × 1
Arduino Mega 2560 × 1 (UNOでも可、シリアルバッファー余裕のためMega推奨)
オス-メス ジャンパーワイヤー × 12
オス-オス ジャンパーワイヤー × 5

必要な工具 (任意)

ソフトウェア環境 (PC側)

プロジェクト概要

PC上のPythonスクリプトが Yahoo Finance API から複数銘柄の株価 (始値・現在値) を定期取得し、シリアル通信で Arduino に送信。Arduino は受信データを 16x2 LCD にスクロール表示します。銘柄リストは自由に編集可能です。

配線 (LCD → Arduino Mega)

LCDピン機能Arduinoピン
1VSS (GND)GND
2VDD (+5V)5V
3VO (コントラスト)可変抵抗中点 (両端を5V/GND)
4RSD12
5RWGND (書込み固定)
6ED11
11D4D5
12D5D4
13D6D3
14D7D2
15LED+ (バックライト+)5V (抵抗経由推奨)
16LED- (バックライト-)GND

Pythonスクリプト (PC側)


from yahoo_finance import Share
import time
import 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, timeout=1)

def printShare(share, name):
    # 形式: "銘柄名: *始値,現在値"
    msg = name + ': *' + share.get_open() + ',' + share.get_price()
    ser.write(msg.encode() + b'\n')
    print(msg)
    time.sleep(0.1)

def mainProgram():
    for symbol in StockShares:
        try:
            s = Share(symbol)
            printShare(s, symbol)
            s.refresh()  # 最新データ取得
        except Exception as e:
            print("Error:", symbol, e)
        time.sleep(9.5)  # APIレート制限対策

if __name__ == '__main__':
    while True:
        mainProgram()

Arduinoスケッチ (LCD表示側)


#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // RS, E, D4, D5, D6, D7

String symbol = "";
float openPrice = 0;
float currentPrice = 0;

void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  delay(1000);
}

void loop() {
  if (Serial.available() > 0) {
    // "SYMBOL: *OPEN,CURRENT" 形式で受信
    symbol = Serial.readStringUntil('*');
    openPrice = Serial.parseFloat();
    currentPrice = Serial.parseFloat();
  }

  // 1行目: 銘柄 + 始値
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(symbol + " open:" + String(openPrice, 2));
  
  // 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();
}

現代的な改良版 (Python 3 + yfinance)

元の yahoo_finance ライブラリはメンテナンス終了しています。現在は yfinance の使用を推奨します。


# pip install yfinance pyserial
import yfinance as yf
import serial, time

ser = serial.Serial('COM3', 9600, timeout=1)  # ポート調整
tickers = yf.Tickers(' '.join(StockShares))

while True:
    for symbol in StockShares:
        try:
            hist = tickers.tickers[symbol].history(period='1d')
            if not hist.empty:
                open_p = hist['Open'].iloc[-1]
                curr_p = hist['Close'].iloc[-1]
                msg = f"{symbol}: *{open_p:.2f},{curr_p:.2f}\n"
                ser.write(msg.encode())
                print(msg.strip())
        except Exception as e:
            print(f"Error {symbol}: {e}")
        time.sleep(10)  # レート制限配慮

拡張アイデア

注意事項

製造プロセス

  1. 現代トイレの進化、材料、製造
  2. リボルバー:起源から現代製造まで
  3. Bluetooth操作のArduinoスパイボットを自作する
  4. FlickMote:ジェスチャー操作のIRリモコンでスマートホームを制御
  5. 自作Arduino TV-B-Gone:全テレビ対応の万能リモコン
  6. 12メートル先から見える大型LEDマスタークロック(アラーム機能付き)を自作しよう
  7. ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
  8. Arduinoプロジェクトのための最適化電源ソリューション
  9. Arduino三目並べ:MAX7219 LEDマトリクスと段ボールケースで自作
  10. スマートArduino四足歩行ロボットの製作:ステップバイステップガイド
  11. ゲーム用カスタムArduinoジョイスティックハンドルの製作