//顯示台積電股價,及漲跌%
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const char* ssid = "Wokwi-GUEST";
const char* password = "";
void connectWiFi() {
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Connecting...");
display.display();
WiFi.begin(ssid, password);
unsigned long startAttemptTime = millis();
while (WiFi.status() != WL_CONNECTED && millis() - startAttemptTime < 20000) {
delay(1000);
}
display.clearDisplay();
display.setCursor(0, 0);
if (WiFi.status() == WL_CONNECTED) {
display.println("WiFi Connected!");
} else {
display.println("WiFi Failed!");
}
display.display();
delay(2000);
}
void resetDisplay() {
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
}
void readTSMCPrice() {
String url = "https://mis.twse.com.tw/stock/api/getStockInfo.jsp?ex_ch=tse_2330.tw&json=1&delay=0";
HTTPClient http;
http.begin(url);
int httpCode = http.GET();
if (httpCode == HTTP_CODE_OK) {
DynamicJsonDocument doc(1024);
deserializeJson(doc, http.getStream());
JsonArray stocks = doc["msgArray"];
if (stocks.size() > 0) {
float currentPrice = atof(stocks[0]["z"]);
float previousClose = atof(stocks[0]["y"]);
float changePercent = ((currentPrice - previousClose) / previousClose) * 100.0;
resetDisplay();
display.setTextSize(2);
display.setCursor(0, 0);
display.println("TSMC(2330)");
// 顯示當前股價
display.setTextSize(2);
display.setCursor(0, 20);
display.print(currentPrice, 2);
display.println("TWD");
// 顯示漲跌幅
display.setTextSize(2);
display.setCursor(0, 40);
if (changePercent < 0) {
display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); // 反白顯示跌幅
}
display.print(changePercent, 2);
display.println("%");
display.display();
}
} else {
resetDisplay();
display.setTextSize(1);
display.setCursor(0, 0);
display.println("HTTP Error!");
display.display();
}
http.end();
}
void setup() {
Serial.begin(115200);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(1);
display.setCursor(0, 0);
display.println("TSMC Stock Tracker");
display.display();
connectWiFi();
}
void loop() {
readTSMCPrice();
delay(5000); // 每 5 秒更新一次
}