main/task_wifi.c

Thu, 30 Mar 2023 21:55:24 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Thu, 30 Mar 2023 21:55:24 +0200
changeset 6
bad3414f7bc4
parent 5
b1f38105ca7e
child 7
2b337dd92f25
permissions
-rw-r--r--

Added the getTempBaro and getVoltsCurrent functions to process the measured data. Added some main task code. Added subscribe to MQTT events.

4
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1 /**
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2 * @file task_wifi.c
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
3 * @brief WiFi task. Connects to a known Access Point.
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
4 */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
5
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
6
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
7 #include "config.h"
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
8
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
9
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
10 static const char *TAG = "task_wifi";
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
11
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
12 #define ESP_WIFI_SSID CONFIG_ESP_WIFI_SSID
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
13 #define ESP_WIFI_PASS CONFIG_ESP_WIFI_PASSWORD
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
14
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
15 SemaphoreHandle_t xSemaphoreWiFi = NULL; ///< Semaphore WiFi task.
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
16 EventGroupHandle_t xEventGroupWifi; ///< Events WiFi task.
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
17 wifi_config_t wifi_Config = { ///< Current STA configuration.
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
18 .sta = {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
19 .ssid = ESP_WIFI_SSID,
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
20 .password = ESP_WIFI_PASS,
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
21 .scan_method = WIFI_FAST_SCAN,
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
22 .sort_method = WIFI_CONNECT_AP_BY_SECURITY,
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
23 .threshold.rssi = -127,
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
24 .threshold.authmode = WIFI_AUTH_WPA2_PSK,
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
25 },
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
26 };
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
27 WIFI_State *wifi_state = NULL; ///< Public state for other tasks.
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
28 esp_netif_t *sta_netif = NULL; ///< Station interface
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
29
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
30
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
31 const int TASK_WIFI_REQUEST_STA_DISCONNECT = BIT1; ///< When set, means a client requested to disconnect from currently connected AP.
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
32 const int TASK_WIFI_REQUEST_STA_CONNECT = BIT2; ///< When set, means a client requested to connect to an access point.
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
33
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
34 const int TASK_WIFI_HAS_IP = BIT3; ///< Indicate that we have an IP address
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
35 const int TASK_WIFI_STA_FAILED = BIT5; ///< Indicate that we could not get a connection to AP as station.
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
36 const int TASK_WIFI_STA_DISCONNECTED = BIT6; ///< Indicate that we are disconnected from an ap station.
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
37 const int TASK_WIFI_STA_CONNECTED = BIT7; ///< Indicate that we are connected to AP as station, flip of BIT6.
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
38
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
39
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
40 /****************************************************************************/
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
41
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
42
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
43 bool ready_WiFi(void)
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
44 {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
45 if (wifi_state->STA_connected && wifi_state->STA_online)
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
46 return true;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
47 return false;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
48 }
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
49
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
50
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
51
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
52 void request_WiFi(bool connect)
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
53 {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
54 if (connect)
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
55 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_CONNECT);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
56 else
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
57 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_DISCONNECT);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
58 }
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
59
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
60
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
61
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
62 static void wifi_event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data)
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
63 {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
64 switch (event_id) {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
65
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
66 case WIFI_EVENT_STA_START:
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
67 ESP_LOGI(TAG, "Event wifi START");
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
68 // Set the hostname for the dhcp client.
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
69 #ifdef CONFIG_CODE_PRODUCTION
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
70 ESP_ERROR_CHECK(esp_netif_set_hostname(sta_netif, "balkon"));
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
71 #endif
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
72 #ifdef CONFIG_CODE_TESTING
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
73 ESP_ERROR_CHECK(esp_netif_set_hostname(sta_netif, "wemos"));
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
74 #endif
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
75 // ESP_ERROR_CHECK(esp_wifi_connect());
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
76 break;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
77
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
78 case WIFI_EVENT_STA_CONNECTED: {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
79 // system_event_sta_connected_t* event = (wifi_event_sta_connected_t*) event_data;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
80 wifi_ap_record_t ap_info;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
81 esp_wifi_sta_get_ap_info(&ap_info);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
82 ESP_LOGI(TAG, "Event STA connected rssi=%d", ap_info.rssi);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
83 if (xSemaphoreTake(xSemaphoreWiFi, 35) == pdTRUE) {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
84 wifi_state->STA_connected = true;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
85 wifi_state->STA_rssi = ap_info.rssi;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
86 xSemaphoreGive(xSemaphoreWiFi);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
87 } else {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
88 ESP_LOGE(TAG, "wifi_event_handler() lock error WIFI_EVENT_STA_CONNECTED");
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
89 }
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
90 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_CONNECTED);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
91 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
92 break;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
93 }
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
94
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
95 case WIFI_EVENT_STA_DISCONNECTED: {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
96 ESP_LOGI(TAG, "Event STA disconnected");
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
97 // wifi_event_sta_disconnected_t* disconnected = (wifi_event_sta_disconnected_t*) event_data;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
98 // ESP_LOGI(TAG, "Event STA disconnected, reason:%d", disconnected->reason);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
99 if (xSemaphoreTake(xSemaphoreWiFi, 35) == pdTRUE) {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
100 wifi_state->STA_connected = false;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
101 wifi_state->STA_online = false;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
102 //wifi_state->STA_rssi = 0;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
103 xSemaphoreGive(xSemaphoreWiFi);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
104 } else {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
105 ESP_LOGE(TAG, "wifi_event_handler() lock error WIFI_EVENT_STA_DISCONNECTED");
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
106 }
5
b1f38105ca7e Added task MQTT and some utilities. Added more power measurement variables and code. INA219 measurements are saved in the State record.
Michiel Broek <mbroek@mbse.eu>
parents: 4
diff changeset
107 connect_mqtt(false);
4
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
108 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_CONNECTED);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
109 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
110 break;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
111 }
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
112
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
113 default:
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
114 ESP_LOGW(TAG, "Unknown WiFi event %d", (int)event_id);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
115 break;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
116 }
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
117 }
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
118
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
119
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
120
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
121 static void got_ip_event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data)
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
122 {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
123 switch (event_id) {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
124
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
125 case IP_EVENT_STA_GOT_IP:
6
bad3414f7bc4 Added the getTempBaro and getVoltsCurrent functions to process the measured data. Added some main task code. Added subscribe to MQTT events.
Michiel Broek <mbroek@mbse.eu>
parents: 5
diff changeset
126 //ESP_LOGE(TAG, "got_ip_event_handler()");
4
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
127 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_HAS_IP);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
128 ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
129 if (xSemaphoreTake(xSemaphoreWiFi, 25) == pdTRUE) {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
130 wifi_state->STA_online = true;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
131 snprintf(wifi_state->STA_ip, 16, IPSTR, IP2STR(&event->ip_info.ip));
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
132 snprintf(wifi_state->STA_nm, 16, IPSTR, IP2STR(&event->ip_info.netmask));
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
133 snprintf(wifi_state->STA_gw, 16, IPSTR, IP2STR(&event->ip_info.gw));
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
134 xSemaphoreGive(xSemaphoreWiFi);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
135 } else {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
136 ESP_LOGE(TAG, "got_ip_event_handler() lock error IP_EVENT_STA_GOT_IP");
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
137 }
5
b1f38105ca7e Added task MQTT and some utilities. Added more power measurement variables and code. INA219 measurements are saved in the State record.
Michiel Broek <mbroek@mbse.eu>
parents: 4
diff changeset
138 connect_mqtt(true);
4
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
139 break;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
140
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
141 case IP_EVENT_STA_LOST_IP:
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
142 ESP_LOGW(TAG, "Lost IP address");
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
143 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_HAS_IP);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
144 if (xSemaphoreTake(xSemaphoreWiFi, 25) == pdTRUE) {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
145 wifi_state->STA_ip[0] = '\0';
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
146 wifi_state->STA_nm[0] = '\0';
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
147 wifi_state->STA_gw[0] = '\0';
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
148 wifi_state->STA_online = false;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
149 xSemaphoreGive(xSemaphoreWiFi);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
150 } else {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
151 ESP_LOGE(TAG, "got_ip_event_handler() lock error IP_EVENT_STA_LOST_IP");
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
152 }
5
b1f38105ca7e Added task MQTT and some utilities. Added more power measurement variables and code. INA219 measurements are saved in the State record.
Michiel Broek <mbroek@mbse.eu>
parents: 4
diff changeset
153 connect_mqtt(false);
4
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
154 break;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
155
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
156 case IP_EVENT_AP_STAIPASSIGNED:
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
157 ESP_LOGI(TAG, "IP_EVENT_AP_STAIPASSIGNED");
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
158 break;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
159
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
160 default:
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
161 ESP_LOGW(TAG, "Unknown IP event %d", (int)event_id);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
162 break;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
163 }
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
164 }
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
165
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
166
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
167
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
168 void task_wifi( void * pvParameters )
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
169 {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
170 ESP_LOGI(TAG, "Start WiFi");
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
171
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
172 /*
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
173 * Initialize NVS
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
174 */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
175 esp_err_t ret = nvs_flash_init();
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
176 if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
177 ESP_ERROR_CHECK(nvs_flash_erase());
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
178 ret = nvs_flash_init();
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
179 }
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
180 ESP_ERROR_CHECK(ret);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
181
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
182 /* event handler and event group for the wifi driver */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
183 xEventGroupWifi = xEventGroupCreate();
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
184 /* initialize the tcp stack */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
185 ESP_ERROR_CHECK(esp_netif_init());
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
186 ESP_ERROR_CHECK(esp_event_loop_create_default());
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
187 sta_netif = esp_netif_create_default_wifi_sta();
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
188 assert(sta_netif);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
189
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
190 /*
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
191 * memory allocation of objects used by the task
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
192 */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
193 xSemaphoreWiFi = xSemaphoreCreateMutex();
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
194 wifi_state = malloc(sizeof(WIFI_State));
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
195 memset(wifi_state, 0x00, sizeof(WIFI_State));
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
196 sprintf(wifi_state->STA_ssid, "%s", ESP_WIFI_SSID);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
197
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
198 /*
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
199 * init wifi as station
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
200 */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
201 wifi_init_config_t wifi_init_config = WIFI_INIT_CONFIG_DEFAULT();
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
202 ESP_ERROR_CHECK(esp_wifi_init(&wifi_init_config));
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
203
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
204 esp_event_handler_instance_t instance_any_id;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
205 esp_event_handler_instance_t instance_got_ip;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
206 ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL, &instance_any_id) );
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
207 ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT, /*IP_EVENT_STA_GOT_IP*/ ESP_EVENT_ANY_ID, &got_ip_event_handler, NULL, &instance_got_ip) );
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
208
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
209 ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
210 ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_Config) );
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
211 ESP_ERROR_CHECK(esp_wifi_start());
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
212
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
213 //xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_CONNECT);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
214 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_CONNECTED);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
215 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
216 EventBits_t uxBits;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
217
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
218 ESP_LOGI(TAG, "Startup completed, enter task loop");
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
219
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
220 for(;;) {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
221
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
222 /* actions that can trigger: request a connection or a disconnection */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
223 uxBits = xEventGroupWaitBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_CONNECT | TASK_WIFI_REQUEST_STA_DISCONNECT,
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
224 pdFALSE, pdFALSE, portMAX_DELAY );
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
225
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
226 if (uxBits & TASK_WIFI_REQUEST_STA_DISCONNECT) {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
227 /*
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
228 * user requested a disconnect, this will in effect disconnect the wifi
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
229 */
5
b1f38105ca7e Added task MQTT and some utilities. Added more power measurement variables and code. INA219 measurements are saved in the State record.
Michiel Broek <mbroek@mbse.eu>
parents: 4
diff changeset
230 connect_mqtt(false);
4
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
231 ESP_LOGI(TAG, "Request STA disconnect");
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
232 ESP_ERROR_CHECK(esp_wifi_disconnect());
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
233 xEventGroupWaitBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED, pdFALSE, pdTRUE, portMAX_DELAY );
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
234
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
235 /* finally: release the request bit */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
236 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_DISCONNECT);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
237
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
238 } else if (uxBits & TASK_WIFI_REQUEST_STA_CONNECT) {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
239
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
240 ESP_LOGI(TAG, "Request STA connect `%s' `%s'", wifi_Config.sta.ssid, wifi_Config.sta.password);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
241 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_FAILED);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
242 ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_Config));
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
243
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
244 esp_err_t wifierror = esp_wifi_connect();
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
245 if (wifierror != ESP_OK) {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
246 ESP_LOGE(TAG, "esp_wifi_connect() rc=%04x", (int)wifierror);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
247 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_FAILED);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
248 } else {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
249 ESP_LOGI(TAG, "Connected Ok");
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
250 }
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
251
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
252 /*
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
253 * 3 scenarios here: connection is successful and TASK_WIFI_STA_CONNECTED will be posted
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
254 * or it's a failure and we get a TASK_WIFI_STA_FAILED with a reason code.
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
255 * Or, option 3, the 5 seconds timeout is reached. This happens when the AP is not in range.
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
256 * Note that the reason code is not exploited. For all intent and purposes a failure is a failure.
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
257 */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
258 uxBits = xEventGroupWaitBits(xEventGroupWifi, TASK_WIFI_STA_CONNECTED | TASK_WIFI_STA_FAILED, pdFALSE, pdFALSE, 5000 / portTICK_PERIOD_MS);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
259
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
260 if (uxBits & (TASK_WIFI_STA_CONNECTED | TASK_WIFI_STA_FAILED)) {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
261 /*
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
262 * only save the config if the connection was successful!
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
263 */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
264 if (uxBits & TASK_WIFI_STA_CONNECTED) {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
265 /* save wifi config */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
266 //SaveStaConfig();
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
267 } else {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
268 ESP_LOGI(TAG, "No AP found");
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
269 vTaskDelay(3000 / portTICK_PERIOD_MS);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
270 ESP_LOGW(TAG, "Connection failed");
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
271 /* failed attempt to connect regardles of the reason */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
272
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
273 /* otherwise: reset the config */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
274 //memset(task_wifi_ConfigSTA, 0x00, sizeof(wifi_config_t));
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
275 }
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
276 }
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
277
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
278 /* finally: release the request bit */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
279 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_CONNECT);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
280 }
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
281
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
282 } /* for(;;) */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
283 vTaskDelay(10 / portTICK_PERIOD_MS);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
284 }
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
285
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
286

mercurial