内容介绍
内容介绍
项目描述
本项目基于ESP32-S2模块的物联网平台,制作了一个本地气象台及温度计,项目内容包括通过Wi-Fi获取本地时间、天气和温度,并利用OLED屏进行显示。
平台介绍
本项目使用的物联网平台,使用了乐鑫公司的ESP32-S2-Mini-1模块,ESP32-S2-MINI-1是一颗通用型Wi-Fi MCU模组,功能强大,具有丰富的外设接口。ESP32-S2-MINI-1模组配置了4MB SPI flash,采用的是 ESP32-S2FN4 芯片。该芯片搭载了Xtensa® 32 位LX7 单核处理器,工作频率高达 240 MHz。官方提供了ESP-IDF和Arduino等开发框架,本项目中使用ESP-IDF作为开发框架开发。
功能实现
制作一个本地气象台/收音机
-
利用OLED显示
- 通过Wi-Fi获取本地时间、天气和温度
- 显示当前本地的时间、温度和气象信息
-
系统能够自动校时,能自动调节到准确的时间(年、月、日、时、分、秒)
设计思路
具体实现及代码说明
初始化
对于12864的OLED屏,使用SPI通讯。
U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=LCD_SCK*/ 36, /* data=LCD_SDA*/ 35, /* cs=*/ 46, /* dc=LCD_DC*/ 33, /* reset=LCD_RST*/ 34);
Wi-Fi配置
设置好Wi-Fi名称和密码后进行Wi-Fi连接,并在串口输出Wi-Fi连接状态。
WiFi.begin(ssid,password);
while(WiFi.status()!=WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println(" CONNECTED");
获取当地时间,自动校时
Wi-Fi连接好以后,访问设置好的ntpServer,获取当地时间。
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
struct tm timeinfo;
if(!getLocalTime(&timeinfo)){
Serial.println("Failed to obtian time");
return ;
}
Serial.println(&timeinfo,"%A, %B %d %Y %H:%M:%S");
获取天气温度
根据不同的城市代号,获取不同城市的天气和温度,并通过ArduinoJson库解析Json信息。
http.begin("http://t.weather.sojson.com/api/weather/city/101251101");
int httpCode = http.GET();
if(httpCode == HTTP_CODE_OK){
String pageData = http .getString();
DynamicJsonDocument doc(6144);
DeserializationError error = deserializeJson(doc, pageData);
if (error) {
Serial.print("deserializeJson() failed: ");
Serial.println(error.c_str());
return;
}
JsonObject cityInfo = doc["cityInfo"];
String cityInfo_city = cityInfo["city"];
JsonObject data = doc["data"];
JsonArray data_forecast = data["forecast"];
JsonObject data_forecast_0 = data_forecast[0];
String data_forecast_0_high = data_forecast_0["high"];
String data_forecast_0_low = data_forecast_0["low"];
String data_forecast_0_type = data_forecast_0["type"];
String cityInform ="地点:"+ cityInfo_city;
String tempInfo =data_forecast_0_low + "~" + data_forecast_0_high;
String cityWeatherinfo = "天气状况:" + data_forecast_0_type;
Serial.println("获得天气情况如下:");
printLocalTime();
Serial.print(cityInform);
Serial.print(tempInfo);
Serial.println(cityWeatherinfo);
}else{
Serial.println("GET ERR");
}
http.end();
OLED屏显示
利用u8g2库在OLED屏上适当位置显示出需要的信息。
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_wqy12_t_gb2312);
u8g2.setCursor(0, 13);
u8g2.print(cityInform);
u8g2.setCursor(0, 28);
u8g2.print(tempInfo);
u8g2.setCursor(0, 43);
u8g2.print(cityWeatherinfo);
u8g2.sendBuffer();
u8g2.setCursor(0,55);
u8g2.print(&timeinfo,"%F %T");
u8g2.sendBuffer();
遇到的主要难题及解决方法
刚开始虽然跟着乐鑫官方的教程搭建好了ESP-IDF的环境,但是由于对软件操作不太熟悉,再加上IDF中很多都是基于FreeRTOS,而从这里才刚刚接触FreeRTOS,因此在项目的推进上遇到很大的难题。由于Arduino内部有更多封装好的库与函数,感觉对新手更加友好,因此最终选择了Arduino作为本次项目的开发平台。
软硬件
元器件
ESP32-S2-MINI-1
2.4GHz WiFi (802.11 b/g/n) 模组, 内置ESP32S2系列芯片,Xtensa® 单核32位LX7微处理器, 内置芯片叠封4MB flash,可叠封2MB PSRAM, 37个GPIO,丰富的外设, 板载PCB天线或外部天线连接器
附件下载
homeworkFinal.ino
团队介绍
学生
团队成员
yushui
评论
0 / 100
查看更多
猜你喜欢
基于ESP32-S2制作的本地气象台温度计本项目采用乐鑫官方模块ESP32-S2-Mini-1主控,制作一个本地气象台温度计。功能为通过网络获取天气数据且自动校时,在12864oled屏上显示地区、天气、温度、时间和星期,并且绘制相应的天气图标。
co1
1339
基于ESP32-S2制作本地气象台/温度计使用ESP32-S2制作一个本地气象台/温度计,在oled屏幕上显示本地的时间和天气信息。
Look
1312
基于ESP32-S2模块制作一个本地气象台/温度计本项目使用了乐鑫公司的ESP-S2-Mini-1模块,主要利用了其三个核心功能:WiFi连接、OLED显示信息和按键控制参数,以此制作了一个本地的气象台/温度计。
lgem
1584