基于ESP32-S2模块的本地温度计
利用基于ESP32-S2模块的物联网、音频信号处理平台实现本地气象时间、温度和气象信息的显示
标签
嵌入式系统
2022寒假在家练
ACE
更新2022-03-01
南通大学
1181

开发平台介绍

乐鑫公司的ESP32-S2-Mini-1模块是一颗通用型Wi-Fi MCU模组,功能强大,具有丰富的外设接口,可用于可穿戴电子设备、智能家居等场景。ESP32-S2-MINI-1采用PCB板载天线,模组配置了4MB SPI flash,采用的是 ESP32-S2FN4 芯片。该芯片搭载了Xtensa® 32 位LX7 单核处理器,工作频率高达 240 MHz。用户可以关闭 CPU 的电源,利用低功耗协处理器监测外设的状态变化或某些模拟量是否超出阈值。

该模块可以广泛应用于下面的一些领域:

  • 通用低功耗 IoT 传感器 Hub
  • 通用低功耗 IoT 数据记录器
  • USB 设备
  • 语音识别
  • 图像识别
  • Mesh 网络
  • 家庭自动化
  • 智慧楼宇
  • 工业自动化
  • 健康/医疗/看护
  • Wi-Fi 玩具
  • 可穿戴电子产品
  • 零售 & 餐饮
  • 智能 POS 应用

完成本项目只用到上述部分功能即可,包括SPI_OLED显示屏、WiFi模块等。

可实现:wifi连接、获取网络服务器推流、程序主控、获取网络时间等

CH340C:USB总线的转接芯片,实现USB转串口或者USB转打印口,内置时钟,无需外部晶振

可实现:type-c口驱动、程序烧录、ticker等

RDA5807:FM收音机模块

可实现:FM频率搜索、输出等

NCP2890:1W功率的音频功率放大器

可实现:网络电台音频解码、播放

SPI_OLED:SPI驱动显示屏

可实现:GUI输出等

本项目主要利用基于ESP32-S2模块的物联网、音频信号处理平台实现本地气象时间、温度和气象信息的显示。

硬件:基于ESP32-S2-Mini-1模块的音频处理平台

软件实现:

Arduino IDE:开源IDE

可实现:程序编写、调试、烧录等工作

程序设计思路:

FrtcrpH0WeY_zU49Dxqx_gDlHC5g

程序部分:

WiFi模块

void Wifi_connect()
{
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED)
    {
        delay(500);
        Serial.print(".");
    }
    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
}

http请求模块:

void httpRequest()
{
    WiFiClient client;
    if (!client.connect(host, 80))
    {
        Serial.println("Connect host failed!");
        return;
    }
    Serial.println("host Conected!");
    String httpURL= "/v3/weather/now.json?key=";
    httpURL += privateKey;
    httpURL += "&location=";
    httpURL += city;
    httpURL += "&language=";
    httpURL += language;
    client.print(String("GET ") + httpURL + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
    Serial.println("Get send");
    char endOfHeaders[] = "\r\n\r\n";
    bool ok = client.find(endOfHeaders);
    if (!ok)
    {
        Serial.println("No response or invalid response!");
    }
    Serial.println("Skip headers");
    String line="";
    line += client.readStringUntil('\n'); 
    Serial.println(client.readStringUntil('\n'));
    Serial.println(line);
    Json(line);
    client.stop();
}

JSON解析:

void Json(String line)
{
    DynamicJsonDocument doc(1400);
    DeserializationError error = deserializeJson(doc, line);
    struct WeatherData weatherdata = {0};
    Serial.println(doc["results"][0]["daily"][0].as<const char*>());
    strcpy(weatherdata.city, doc["results"][0]["location"]["name"].as<const char*>());
    strcpy(weatherdata.weather, doc["results"][0]["now"]["text"].as<const char*>());
    strcpy(weatherdata.temperature, doc["results"][0]["now"]["temperature"].as<const char*>());
    OLEDDisplay(weatherdata.city, weatherdata.weather, weatherdata.temperature);
    Serial.println("City");
    Serial.println(weatherdata.city);
    Serial.println("textDay");
    Serial.println(weatherdata.weather);
    Serial.println("temperature");
    Serial.println(weatherdata.temperature);
    Serial.println("read json success");
    Serial.println();
    Serial.println("closing connection");
}

OLED显示模块:

void OLEDDisplay(String cityName, String cityweather, String citytemperature)
{   struct tm timeinfo;
    
    if(!getLocalTime(&timeinfo)){
      Serial.println("Failed to obtain time");
      return;
    }
    u8g2.setFont(u8g2_font_wqy12_t_gb2312);
    u8g2.setFontDirection(0);
    u8g2.clearBuffer();
    u8g2.setCursor(5,10);
    u8g2.print("城市: ");
    u8g2.print(cityName);
    u8g2.setCursor(5, 22);
    u8g2.print("天气: ");
    u8g2.print(cityweather);
    u8g2.setCursor(5, 34);
    u8g2.print("温度: ");
    u8g2.print(citytemperature);
    u8g2.print("'C");
    u8g2.setCursor(5, 46);
    u8g2.print(&timeinfo, "%F");
    u8g2.print(" ");
    u8g2.print(&timeinfo, "%A");
    u8g2.setCursor(5, 58);
    u8g2.print("时间: ");
    u8g2.print(&timeinfo, "%T");
    u8g2.sendBuffer();
    delay(1000);
}

程序执行效果:

FpceW6ZIcWoV_1Tyi-jADQEqdpmq

最后显示城市、温度、日期、星期还有时间。

 

程序可改进的地方:

目前只能实时播报,未来可以设置未来三天的天气预报,并且显示天气的图标,外接屏幕更大的显示屏来显示。

 

总结:

通过本次项目提升我的编程能力和项目能力,希望以后能多多做这样的项目,为未来打好基础。

软硬件
元器件
ESP32-S2-MINI-1
2.4GHz Wi­Fi (802.11 b/g/n) 模组, 内置ESP32­S2系列芯片,Xtensa® 单核32位LX7微处理器, 内置芯片叠封4MB flash,可叠封2MB PSRAM, 37个GPIO,丰富的外设, 板载PCB天线或外部天线连接器
电路图
附件下载
weather.ino
团队介绍
南通大学 孙柳萌
团队成员
ACE
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号