使用 ESP32 和 TFT 屏幕构建航班信息显示器

使用 ESP32 和 TFT 屏幕构建航班信息显示器

屏幕坏了一半,将i就一下

效果展示

在本次项目中,我们使用了 ESP32 微控制器与 TFT 屏幕,连接到 AviationStack API,实时获取从郑州到杭州的航班动态信息,并将其显示在屏幕上。这是一个极具实用性的项目,展示了物联网设备如何与在线数据源相结合,为用户提供实时、可视化的信息。

项目概述

项目目标:使用 ESP32 和 TFT 屏幕连接 AviationStack API,并从中提取指定航班的相关信息,比如郑州到杭州的航班,实时显示航班状态、起飞和到达时间。

使用的硬件和工具

ESP32:一款功能强大的 Wi-Fi 微控制器,用于与互联网通信并从 API 获取数据。

TFT_eSPI 屏幕:用于显示从 API 获取的航班信息。

AviationStack API:提供实时航班数据的 API,用于查询航班状态、时间等。

软件环境

Arduino IDE:编写和上传代码到 ESP32。

ArduinoJson 库:用于解析从 AviationStack API 返回的 JSON 数据。

HTTPClient 库:用于通过 HTTP GET 请求获取 API 数据。\

cpp 复制代码
#include <TFT_eSPI.h>   // 硬件专用库
#include <WiFi.h>       // ESP32 WiFi 库
#include <HTTPClient.h> // HTTP 请求库
#include <ArduinoJson.h> // JSON 解析库

// Wi-Fi 网络名称和密码
const char* ssid = "Zkystudent";
const char* password = "5201314520";

// AviationStack API 配置
const String apiKey = "333decadf28ccab610c792eed3ef6b91";
const String apiUrl = "http://api.aviationstack.com/v1/flights?access_key=" + apiKey + "&dep_iata=CGO&arr_iata=HGH&limit=1"; // 不指定日期限制,查看是否能获取数据

// 创建TFT对象
TFT_eSPI tft = TFT_eSPI();

void setup() {
  // 初始化串口和TFT屏幕
  Serial.begin(115200);
  tft.init();
  tft.setRotation(2);
  tft.fillScreen(TFT_BLACK);

  // 连接Wi-Fi
  tft.setCursor(10, 50);
  tft.setTextColor(TFT_WHITE, TFT_BLACK);
  tft.setTextSize(2);
  tft.println("Connecting to WiFi...");
  
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  tft.fillScreen(TFT_BLACK);
  tft.println("Connected to WiFi");
}

void loop() {
  if (WiFi.status() == WL_CONNECTED) {
    HTTPClient http;
    http.begin(apiUrl);
    int httpCode = http.GET();
    
    if (httpCode > 0) {
      String payload = http.getString();
      
      // 打印完整的JSON数据到串口监视器
      Serial.println(payload);
      
      // 使用 ArduinoJson 解析JSON数据
      DynamicJsonDocument doc(8192);
      deserializeJson(doc, payload);
      
      // 确保返回的数据不为空
      if (doc["data"].size() > 0) {
        // 获取航班信息数据
        const char* flight_number = doc["data"][0]["flight"]["iata"];
        const char* departure_airport = doc["data"][0]["departure"]["airport"];
        const char* arrival_airport = doc["data"][0]["arrival"]["airport"];
        const char* status = doc["data"][0]["flight_status"];
        
        // 获取日期和时间数据(计划的出发时间)
        const char* departure_date_utc = doc["data"][0]["departure"]["scheduled"];
        
        // 显示航班信息数据
        tft.fillScreen(TFT_BLACK);
        
        tft.setCursor(10, 20);
        tft.setTextSize(2);
        tft.setTextColor(TFT_CYAN);
        tft.print("Flight: ");
        tft.println(flight_number);
        
        tft.setCursor(10, 60);
        tft.setTextColor(TFT_YELLOW);
        tft.print("From: ");
        tft.println(departure_airport);
        
        tft.setCursor(10, 100);
        tft.setTextColor(TFT_GREEN);
        tft.print("To: ");
        tft.println(arrival_airport);
        
        tft.setCursor(10, 140);
        tft.setTextColor(TFT_WHITE);
        tft.print("Date: ");
        tft.println(departure_date_utc);
        
      } else {
        tft.fillScreen(TFT_BLACK);
        tft.setCursor(10, 50);
        tft.setTextSize(2);
        tft.setTextColor(TFT_RED);
        tft.println("No flights found");
      }

    } else {
      tft.fillScreen(TFT_BLACK);
      tft.setCursor(10, 50);
      tft.setTextSize(2);
      tft.setTextColor(TFT_RED);
      tft.println("HTTP request error");
    }

    http.end();
  }
  
  delay(60000); // 每分钟更新一次航班信息
}
相关推荐
星越华夏20 小时前
ESP32-CAM图像传输项目说明文档
java·后端·struts·esp32
2301_805962932 天前
ESP32 使用 PlatformIO 编译点灯程序
stm32·esp32
weixin_467182283 天前
Arduino进阶二|自定义类库保姆级教程(从零手写属于自己的传感器类库+完整源码)
c语言·c++·单片机·嵌入式硬件·arduino·c++面向对象·diy库文件
大江东去浪淘尽千古风流人物5 天前
【Micro-WL Robot】桌面级轮腿机器人全栈解析:LQR平衡控制、SimpleFOC驱动与五连杆腿部机构源码深度拆解
驱动开发·机器人·esp32·lqr·simplefoc·轮腿机器人·平衡控制
π同学11 天前
ESP-IDF+vscode开发ESP32第十五讲——队列、流缓冲区、环形缓冲区
vscode·esp32·缓冲区
taiguisheng11 天前
Docker中编译esp32
windows·docker·esp32
止观止15 天前
基于 BSP 组件的 ESP-IDF 开发实践:从零开始点亮 M5Stack CoreS3 屏幕
esp32·esp-idf·m5stack cores3
优信电子18 天前
ESP32驱动YX5300/6300串口MP3音乐播放模块
arduino·esp32开发板·yx5300串口mp3播放模块·yx6300串口mp3播放模块
π同学18 天前
ESP-IDF+vscode开发ESP32第十三讲——NVS
vscode·esp32·nvs
NPE~19 天前
[嵌入式]嵌入式在线仿真平台 —— Wokwi 入门指南
stm32·嵌入式·esp32·教程·平台