ESP32+TFTLCD实现WiFi天气语音播报(八)

ESP32实现天气播报



前言

前面几篇已经把WiFi天气语音播报涉及到的知识内容提了一下,这一篇进行项目的整合进而完成WiFi天气语音播报。


1、实现功能

自己编写相关代码,驱动WIFI模组,连接气象服务器,获取当地天气,同时还可以通过温湿度传感器采集到当前室内的温湿度值,并在LCD屏上进行显示,还可以进行语音播报
在这里插入图片描述
在这里就不使用温湿度传感器读取实时温湿度了。

2、获取并解析天气数据

首先我们要配置WIFI模块连上热点,检测是否接入 WIFI GOT IP,连接服务器,开启透传,获取天气结果。当WIFI模块获取服务器一次实时天气成功后,会返回对应的json格式数据,然后再对json格式数据解析获取需要的内容。需要说的是JSON是一种特殊的数据结构,ESP32中有一个内置的库cjson,用来处理json格式的数据并且获取内容。

void Get_Weather(void)
{
   
	static uint8_t count = 0;
	char http_cmd[256] = {
   0};
	uint8_t recv = 0;
	cJSON *root = NULL,*json_results = NULL,*json_arry = NULL,*json_location = NULL,*json_now = NULL,*json_daily = NULL,*json_daily_arr = NULL;
	

	switch(count)
	{
   
		case 0://退出透传
			weatherTime[1] = 1000;
			WIFI_SendStr("+++");
			count++;
			break;
		case 1://复位
			WIFI_SendStr("AT+RST\r\n");
			count++;
			break;
		case 2://自动连接网络  不直接连接服务器防止使用过程中断网
			recv = ESP8266_SendCmd_RecAck(NULL, "WIFI GOT IP", 30000, 1);
//			if(recv){
   
//				ESP8266_ConnectHotspot();//一键配网模式
//			}
			count++;
			break;
		case 3://连接服务器
			recv = ESP8266_SendCmd_RecAck("AT+CIPSTART=\"TCP\",\"116.62.81.138\",80\r\n", "OK", 20000, 1);
			if(recv == 0)	count++;
			break;
		case 4://开启透传
			recv = ESP8266_SendCmd_RecAck("AT+CIPMODE=1\r\n", "OK", 1000, 1);
			if(recv == 0)	count++;
			break;
		case 5://开始透传
			recv = ESP8266_SendCmd_RecAck("AT+CIPSEND\r\n", ">", 2000, 1);
			if(recv == 0)	count++;
			break;

		case 6://获取实时天气数据
			sprintf(http_cmd, "GET https://api.seniverse.com/v3/weather/now.json?key=%s&location=%s&language=en&unit=c\r\n", 
							Key_ID, 
							location[location_pos]);
			printf("%s\r\n", http_cmd);
			WIFI_SendStr(http_cmd);
			count++;
			break;		
		case 7://解析数据
			count = 
### 使用 ESP32 控制 TFT-LCD 的示例代码与教程 #### 配置开发环境 为了使 ESP32 能够成功控制 TFT-LCD 显示屏,首先需要设置好开发环境。这通常涉及到安装 Python 和配置 ESP-IDF 工具链[^1]。 #### 初始化显示控制器 对于特定型号如 ST7735S 的 TFT 屏幕,在 `Kconfig` 文件中有专门针对此类型的配置选项: ```c config LV_TFT_DISPLAY_USER_CONTROLLER_ST7735S bool "ST7735S" select LV_TFT_DISPLAY_CONTROLLER_ST7735S select LV_TFT_DISPLAY_PROTOCOL_SPI ``` 这段配置表明选择了 SPI 协议来通信,并启用了对 ST7735S 控制器的支持[^2]。 #### 编写初始化程序 下面是一个简单的 C 语言函数用来初始化 TFT 屏幕并清除其内容至黄色背景颜色的例子: ```c void Gui_Main(void) { LCD_Clear(YELLOW); } ``` 该片段来自一个更复杂的 GUI 主循环函数的一部分,其中调用了 `LCD_Clear()` 函数以填充整个屏幕为指定的颜色(这里是黄色),这是创建任何视觉输出前常见的第一步操作[^5]。 #### 绘制文本到屏幕上 继续上面提到的 `Gui_Main()` 方法,还可以向屏幕添加更多元素,比如绘制字符串: ```c Draw_Text_8_16_Str(10, 288, YELLOW, BLACK, "WiFi语音气象站"); ``` 这条语句会在坐标 (10, 288) 处用黑色字体打印白色背景下的一串汉字 “WiFi语音气象站”。注意这里的参数顺序分别是 X 坐标、Y 坐标、前景色、背景色以及要显示的文字串。 #### 利用第三方库简化编程过程 除了直接编写底层硬件接口外,也可以借助现成的 Arduino 或者其他框架下的图形库来进行更高层次的操作。例如,使用 `TFT_eSPI` 库可以让开发者更容易地完成诸如画线、圆圈或是加载位图图像的任务[^3]: ```cpp #include <TFT_eSPI.h> // Hardware-specific library TFT_eSPI tft = TFT_eSPI(); /* Create a TFT class object */ void setup() { tft.init(); } void loop() {} ``` 上述代码展示了如何利用 `TFT_eSPI` 类快速启动一块连接着 ESP32 的 TFT 屏幕。只需几行简洁明了的命令就能让设备准备好接收进一步指令。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值