· 11 months ago · Feb 24, 2025, 02:00 AM
1#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4#include "freertos/FreeRTOS.h"
5#include "freertos/task.h"
6#include "esp_system.h"
7#include "esp_wifi.h"
8#include "esp_event.h"
9#include "esp_log.h"
10#include "esp_netif.h"
11#include "nvs_flash.h"
12
13#include "ssd1306.h"
14#define WIFI_SSID "XXXXXXX"
15#define WIFI_PASS "XXXXXXX"
16#define tag "SSD1306"
17#define TAG "WIFI_DISPLAY"
18
19SSD1306_t dev;
20
21static esp_ip4_addr_t ip_addr;
22static void wifi_init_sta(void);
23static void display_init(void);
24static void display_ip(void);
25static void event_handler(void* arg, esp_event_base_t event_base,
26 int32_t event_id, void* event_data)
27{
28 if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) {
29 esp_wifi_connect();
30 } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) {
31 esp_wifi_connect();
32 } else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) {
33 ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data;
34 ip_addr = event->ip_info.ip;
35 ESP_LOGI(TAG, "Got IP: " IPSTR, IP2STR(&ip_addr));
36 display_ip();
37 }
38}
39
40void app_main(void)
41{
42 display_init();
43 wifi_init_sta();
44}
45
46static void display_init(void)
47{
48ESP_LOGI(tag,"Initing display");
49 ESP_LOGI(tag, "INTERFACE is i2c");
50 ESP_LOGI(tag, "CONFIG_SDA_GPIO=%d",CONFIG_SDA_GPIO);
51 ESP_LOGI(tag, "CONFIG_SCL_GPIO=%d",CONFIG_SCL_GPIO);
52 ESP_LOGI(tag, "CONFIG_RESET_GPIO=%d",CONFIG_RESET_GPIO);
53 i2c_master_init(&dev, CONFIG_SDA_GPIO, CONFIG_SCL_GPIO, CONFIG_RESET_GPIO);
54#if CONFIG_FLIP
55 dev._flip = true;
56 ESP_LOGW(tag, "Flip upside down");
57#endif
58
59 ESP_LOGI(tag, "Panel is 128x64");
60 ssd1306_init(&dev, 128, 64);
61
62 ssd1306_clear_screen(&dev, false);
63 ssd1306_display_text(&dev, 0, "Connecting WiFi...", 17, false);
64ESP_LOGI(TAG,"Connecting WiFi...");
65 }
66
67static void display_ip(void)
68{
69 char ip_str[16];
70 snprintf(ip_str, sizeof(ip_str), IPSTR, IP2STR(&ip_addr));
71 ssd1306_clear_screen(&dev, false);
72 ssd1306_display_text(&dev, 0, "WiFi Connected!", 14, false);
73 ssd1306_display_text(&dev, 2, "IP:", 3, false);
74 ssd1306_display_text(&dev, 3, ip_str, strlen(ip_str), false);
75
76}
77
78static void wifi_init_sta(void)
79{
80 ESP_ERROR_CHECK(esp_netif_init());
81 ESP_ERROR_CHECK(esp_event_loop_create_default());
82 esp_netif_create_default_wifi_sta();
83
84 wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
85 ESP_ERROR_CHECK(esp_wifi_init(&cfg));
86 esp_event_handler_instance_t instance_any_id;
87 esp_event_handler_instance_t instance_got_ip;
88 ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,
89 ESP_EVENT_ANY_ID,
90 &event_handler,
91 NULL,
92 &instance_any_id));
93 ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT,
94 IP_EVENT_STA_GOT_IP,
95 &event_handler,
96 NULL,
97 &instance_got_ip));
98 wifi_config_t wifi_config = {
99 .sta = {
100 .ssid = WIFI_SSID,
101 .password = WIFI_PASS,
102 .threshold.authmode = WIFI_AUTH_WPA2_PSK
103 },
104 };
105 ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
106 ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config));
107 ESP_ERROR_CHECK(esp_wifi_start());
108}
109