ESP32应用开发——天气预报

介绍

本文主要介绍ESP32联网访问知心天气平台获取深圳未来三天天气情况,并显示到OLED显示屏上。

一、开发环境

乐鑫自主研发ESP-IDF开发环境
版本:v4.3-beta3
开发环境搭建方法:
参考乐鑫官方文档:https://docs.espressif.com/projects/esp-idf/zh_CN/v4.3-beta3/esp32c3/get-started/index.html
更多版本开发环境搭建教程切换方法:
在这里插入图片描述
在这里插入图片描述

二、硬件部分

硬件组成

  1. 开发板:ESP32-S
  2. OLED显示屏:0.96寸OLED(SSD1306)
  3. 安卓接口数据线

硬件接线

ESP32OLED
V3.3V3.3
GNDGND
IO21SDA
IO22SCL

三、软件部分

第三方库的准备:

  1. OLED显示屏的驱动
  2. cJSON函数库
    关于OLED显示屏的驱动库的获取途径有很多,网上相关教程很多,淘宝店也有资料下载。cJSON库的获取方式就更多了,网上教程也很多,这里就不过多介绍。

1. 程序流程

整个工程代码的流程如下:
在这里插入图片描述

2.程序详解

WiFi部分程序

WiIFi连接参数配置

	wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    ESP_ERROR_CHECK(esp_wifi_init(&cfg));
    ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));	//设置ESP32处于STA模式
	
	wifi_config_t wifi_config= {
        .sta = {
            .ssid = WiFi_STA_SSID,						//设置室内WiFi账号
			.password = WiFi_STA_PASSWORD,				//设置室内WiFi密码
			.bssid_set = 0,
		}
	};

WiFi连接的事件处理

	static EventGroupHandle_t wifi_event_group;
	wifi_event_group = xEventGroupCreate();								//创建WiFi事件组				
	ESP_ERROR_CHECK(esp_event_loop_create_default());					//创建事件循环
    esp_netif_t *sta_netif = esp_netif_create_default_wifi_sta();		
    assert(sta_netif);
    ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL));	//注册WiFi连接事件至event loop中
	ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &event_handler, NULL));	//注册IP获取事件至event loop中

事件处理部分

	if(event_base == WIFI_EVENT){
		wifi_event_sta_connected_t *wifi_sta_event = (wifi_event_sta_connected_t*) event_data;
		switch(event_id){
			case WIFI_EVENT_STA_START:			//开始连接WiFi
				...
				esp_wifi_connect();
				break;
			case WIFI_EVENT_STA_CONNECTED:		//处理WiFi
				...
				break;
			case WIFI_EVENT_STA_DISCONNECTED:
				...
				break;
			default:
				break;
		}
	}else if(event_base ==  IP_EVENT){
		ip_event_got_ip_t* ip_event = (ip_event_got_ip_t*) event_data;
		if(event_id == IP_EVENT_STA_GOT_IP){	//获取IP
			...
			//start http  task
			xTaskCreate(http_client_task, "http_client", 5120, NULL, 3, NULL);
		}
	}

HTTP部分程序

连接目标服务器、发送get请求并接收响应数据
关于知心天气的访问接口等详情,参考知心官网:https://seniverse.yuque.com/books/share/e52aa43f-8fe9-4ffa-860d-96c0f3cf1c49/sl6gvt
在这里插入图片描述

	char output_buffer[MAX_HTTP_OUTPUT_BUFFER] = {0};   				//保存相应信息的字符数组
    int content_length = 0;
    //URL为你的知心账户中获取天气实况的域名,其组成如下:
	static const char *URL = "http://"HOST"/v3/weather/daily.json?key="UserKey"&location="Location"&language="Language"&unit=c&start="Strat"&days="Days;
    esp_http_client_config_t config = {
        .url = URL,
    };
    esp_http_client_handle_t client = esp_http_client_init(&config);	//初始化http连接

    // GET Request
    esp_http_client_set_method(client, HTTP_METHOD_GET);
    esp_err_t err = esp_http_client_open(client, 0);
    if (err != ESP_OK) {
        ESP_LOGE(HTTP_TAG, "Failed to open HTTP connection: %s", esp_err_to_name(err));
    } else {
        content_length = esp_http_client_fetch_headers(client);
        if (content_length < 0) {
            ESP_LOGE(HTTP_TAG, "HTTP client fetch headers failed");
        } else {
            int data_read = esp_http_client_read_response(client, output_buffer, MAX_HTTP_OUTPUT_BUFFER);
            if (data_read >= 0) {
                ESP_LOGI(HTTP_TAG, "HTTP GET Status = %d, content_length = %d",
                esp_http_client_get_status_code(client),				//获取响应状态信息
                esp_http_client_get_content_length(client));			//获取响应信息长度
                printf("data:%s", output_buffer);
				...
            } else {
                ESP_LOGE(HTTP_TAG, "Failed to read response");
            }
        }
    }
    esp_http_client_close(client);
	vTaskDelete(NULL);

OLED部分程序

初始化OLED显示屏

	i2c_master_init(&SSD1306, SSD1306_SDA_GPIO, SSD1306_SCL_GPIO, SSD1306_RST_GPIO);	//初始化i2c
	SSD1306._flip = true;
	ssd1306_init(&SSD1306, 128, 64);													//初始化ssd1306

显示数据

	ssd1306_clear_screen(&SSD1306, false);							//清屏
	ssd1306_contrast(&SSD1306, 0xff);								//设置对比度
	ssd1306_display_text(&SSD1306, 0, "Hello ESP32", 11, false);	//显示

3.工程程序获取

码云平台:https://gitee.com/ritage/esp32-demo

工程效果

在这里插入图片描述

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值