构建一个桌面级实时股票行情显示器,通过Python脚本爬取雅虎财经API获取多只股票数据,经串口发送给Arduino Mega 2560驱动LCD1602显示。支持自定义股票池、滚动显示开盘价/现价/涨跌幅,适合量化交易爱好者、金融从业者桌面监控。
| 组件 | 数量 | 说明 |
| Arduino Mega 2560 | 1 | 多串口优势,兼容Uno代码 |
| Adafruit 16x2 LCD (白字蓝背光) | 1 | HD44780兼容,I2C/并口均可 |
| 公母/公公杜邦线 | 17 | LCD并口接线需6数据+2控制+电源 |
| 3D打印LCD外壳(可选) | 1 | Thingiverse: 614241 |
软件环境准备
- Python 2.7(推荐Enthought Canopy发行版,含科学计算库)
- 依赖库安装:
pip install yahoo_finance # 雅虎财经API封装库
pip install pyserial # 串口通信库
- Arduino IDE 1.8+
Python端核心逻辑
from yahoo_finance import Share
import time, serial
# 自定义股票池(可扩展至50+只)
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) # 修改为实际Arduino端口
def printShare(share, name):
# 格式:名称*开盘价,现价
msg = name + ': *' + share.get_open() + ',' + share.get_price()
ser.write(msg.encode())
print(msg)
time.sleep(0.1)
def mainProgram():
for symbol in StockShares:
s = Share(symbol)
printShare(s, symbol)
s.refresh() # 刷新获取最新数据
time.sleep(9.5) # 避免API频率限制
if __name__ == '__main__':
while True:
mainProgram()
Arduino端核心逻辑
#include
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // RS,EN,D4,D5,D6,D7
String stockName;
float openPrice, currentPrice;
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor(0,0);
delay(1000);
}
void loop() {
if (Serial.available() > 0) {
// 解析格式:名称*开盘价,现价
stockName = Serial.readStringUntil('*');
openPrice = Serial.parseFloat();
currentPrice = Serial.parseFloat();
}
// 第1行:股票名 + 开盘价
lcd.clear();
lcd.setCursor(0,0);
lcd.print(stockName + " 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();
}
接线原理图
LCD并口标准连接:
- VSS → GND,VDD → 5V
- V0 → 10K电位器中间脚(对比度调节),两端接5V/GND
- RS → D12,RW → GND,EN → D11
- D4-D7 → D5-D2
- A(背光+) → 5V(串联220Ω电阻),K(背光-) → GND
进阶功能拓展建议
| 功能 | 实现方案 | 难度 |
| 多股票轮询切换 | Python端已实现,Arduino增加按键手动翻页 | ★☆☆ |
| 涨跌颜色指示 | 升级RGB LCD或加双色LED:红涨绿跌(中式)/绿涨红跌(美式) | ★★☆ |
| K线图显示 | 升级128x64 OLED/1.8" TFT,Python端计算历史数据 | ★★★ |
| WiFi联网直连 | ESP8266/ESP32替代Arduino+Python,直接HTTP请求API | ★★☆ |
| 多市场支持 | 集成Alpha Vantage/Twelve Data/新浪财经等API | ★★☆ |
| 告警推送 | 价格突破阈值 → 蜂鸣器/手机推送/邮件通知 | ★★☆ |
常见问题排查
- Python连接失败:检查COM端口号、波特率一致、Arduino未被串口监视器占用
- yahoo_finance库失效:雅虎API频繁变更,建议改用
yfinance或alpha_vantage库
- LCD显示乱码:检查接线、对比度电位器调节、共地可靠
- 数据延迟大:Python端
time.sleep(9.5)可调整,受API限流影响
开源资源