main/task_wifi.c

Fri, 31 Mar 2023 20:31:12 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Fri, 31 Mar 2023 20:31:12 +0200
changeset 7
2b337dd92f25
parent 6
bad3414f7bc4
child 8
115e93bf8796
permissions
-rw-r--r--

Added volts/current loop calculations. Added millis() timer running on the hardware clock. Completed most of the main state loop. Added MQTT wait for disconnect. MQTT disconnect in two passes, disconnect and stop.

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 }
7
2b337dd92f25 Added volts/current loop calculations. Added millis() timer running on the hardware clock. Completed most of the main state loop. Added MQTT wait for disconnect. MQTT disconnect in two passes, disconnect and stop.
Michiel Broek <mbroek@mbse.eu>
parents: 6
diff changeset
107 if (ready_mqtt())
2b337dd92f25 Added volts/current loop calculations. Added millis() timer running on the hardware clock. Completed most of the main state loop. Added MQTT wait for disconnect. MQTT disconnect in two passes, disconnect and stop.
Michiel Broek <mbroek@mbse.eu>
parents: 6
diff changeset
108 connect_mqtt(false);
4
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
109 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_CONNECTED);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
110 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
111 break;
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
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
114 default:
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
115 ESP_LOGW(TAG, "Unknown WiFi event %d", (int)event_id);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
116 break;
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
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
122 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
123 {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
124 switch (event_id) {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
125
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
126 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
127 //ESP_LOGE(TAG, "got_ip_event_handler()");
4
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
128 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_HAS_IP);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
129 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
130 if (xSemaphoreTake(xSemaphoreWiFi, 25) == pdTRUE) {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
131 wifi_state->STA_online = true;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
132 snprintf(wifi_state->STA_ip, 16, IPSTR, IP2STR(&event->ip_info.ip));
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
133 snprintf(wifi_state->STA_nm, 16, IPSTR, IP2STR(&event->ip_info.netmask));
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
134 snprintf(wifi_state->STA_gw, 16, IPSTR, IP2STR(&event->ip_info.gw));
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
135 xSemaphoreGive(xSemaphoreWiFi);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
136 } else {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
137 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
138 }
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
139 connect_mqtt(true);
4
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
140 break;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
141
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
142 case IP_EVENT_STA_LOST_IP:
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
143 ESP_LOGW(TAG, "Lost IP address");
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
144 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_HAS_IP);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
145 if (xSemaphoreTake(xSemaphoreWiFi, 25) == pdTRUE) {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
146 wifi_state->STA_ip[0] = '\0';
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
147 wifi_state->STA_nm[0] = '\0';
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
148 wifi_state->STA_gw[0] = '\0';
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
149 wifi_state->STA_online = false;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
150 xSemaphoreGive(xSemaphoreWiFi);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
151 } else {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
152 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
153 }
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
154 connect_mqtt(false);
4
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
155 break;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
156
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
157 case IP_EVENT_AP_STAIPASSIGNED:
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
158 ESP_LOGI(TAG, "IP_EVENT_AP_STAIPASSIGNED");
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
159 break;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
160
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
161 default:
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
162 ESP_LOGW(TAG, "Unknown IP event %d", (int)event_id);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
163 break;
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
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
169 void task_wifi( void * pvParameters )
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
170 {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
171 ESP_LOGI(TAG, "Start WiFi");
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 /*
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
174 * Initialize NVS
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
175 */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
176 esp_err_t ret = nvs_flash_init();
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
177 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
178 ESP_ERROR_CHECK(nvs_flash_erase());
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
179 ret = nvs_flash_init();
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
180 }
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
181 ESP_ERROR_CHECK(ret);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
182
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
183 /* event handler and event group for the wifi driver */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
184 xEventGroupWifi = xEventGroupCreate();
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
185 /* initialize the tcp stack */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
186 ESP_ERROR_CHECK(esp_netif_init());
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
187 ESP_ERROR_CHECK(esp_event_loop_create_default());
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
188 sta_netif = esp_netif_create_default_wifi_sta();
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
189 assert(sta_netif);
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 /*
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
192 * memory allocation of objects used by the task
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
193 */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
194 xSemaphoreWiFi = xSemaphoreCreateMutex();
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
195 wifi_state = malloc(sizeof(WIFI_State));
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
196 memset(wifi_state, 0x00, sizeof(WIFI_State));
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
197 sprintf(wifi_state->STA_ssid, "%s", ESP_WIFI_SSID);
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 /*
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
200 * init wifi as station
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
201 */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
202 wifi_init_config_t wifi_init_config = WIFI_INIT_CONFIG_DEFAULT();
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
203 ESP_ERROR_CHECK(esp_wifi_init(&wifi_init_config));
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
204
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
205 esp_event_handler_instance_t instance_any_id;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
206 esp_event_handler_instance_t instance_got_ip;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
207 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
208 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
209
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
210 ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
211 ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_Config) );
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
212 ESP_ERROR_CHECK(esp_wifi_start());
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
213
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
214 //xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_CONNECT);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
215 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_CONNECTED);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
216 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
217 EventBits_t uxBits;
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
218
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
219 ESP_LOGI(TAG, "Startup completed, enter task loop");
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
220
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
221 for(;;) {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
222
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
223 /* actions that can trigger: request a connection or a disconnection */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
224 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
225 pdFALSE, pdFALSE, portMAX_DELAY );
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
226
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
227 if (uxBits & TASK_WIFI_REQUEST_STA_DISCONNECT) {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
228 /*
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
229 * user requested a disconnect, this will in effect disconnect the wifi
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
230 */
7
2b337dd92f25 Added volts/current loop calculations. Added millis() timer running on the hardware clock. Completed most of the main state loop. Added MQTT wait for disconnect. MQTT disconnect in two passes, disconnect and stop.
Michiel Broek <mbroek@mbse.eu>
parents: 6
diff changeset
231 ESP_LOGI(TAG, "Request STA disconnect");
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
232 connect_mqtt(false);
7
2b337dd92f25 Added volts/current loop calculations. Added millis() timer running on the hardware clock. Completed most of the main state loop. Added MQTT wait for disconnect. MQTT disconnect in two passes, disconnect and stop.
Michiel Broek <mbroek@mbse.eu>
parents: 6
diff changeset
233 wait_mqtt(10000);
4
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
234 ESP_ERROR_CHECK(esp_wifi_disconnect());
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
235 xEventGroupWaitBits(xEventGroupWifi, TASK_WIFI_STA_DISCONNECTED, pdFALSE, pdTRUE, portMAX_DELAY );
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
236
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
237 /* finally: release the request bit */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
238 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_DISCONNECT);
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 } else if (uxBits & TASK_WIFI_REQUEST_STA_CONNECT) {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
241
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
242 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
243 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_STA_FAILED);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
244 ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_Config));
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
245
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
246 esp_err_t wifierror = esp_wifi_connect();
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
247 if (wifierror != ESP_OK) {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
248 ESP_LOGE(TAG, "esp_wifi_connect() rc=%04x", (int)wifierror);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
249 xEventGroupSetBits(xEventGroupWifi, TASK_WIFI_STA_FAILED);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
250 } else {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
251 ESP_LOGI(TAG, "Connected Ok");
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
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
254 /*
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
255 * 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
256 * 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
257 * 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
258 * 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
259 */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
260 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
261
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
262 if (uxBits & (TASK_WIFI_STA_CONNECTED | TASK_WIFI_STA_FAILED)) {
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 * only save the config if the connection was successful!
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
265 */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
266 if (uxBits & TASK_WIFI_STA_CONNECTED) {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
267 /* save wifi config */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
268 //SaveStaConfig();
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
269 } else {
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
270 ESP_LOGI(TAG, "No AP found");
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
271 vTaskDelay(3000 / portTICK_PERIOD_MS);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
272 ESP_LOGW(TAG, "Connection failed");
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
273 /* failed attempt to connect regardles of the reason */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
274
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
275 /* otherwise: reset the config */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
276 //memset(task_wifi_ConfigSTA, 0x00, sizeof(wifi_config_t));
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 }
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
279
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
280 /* finally: release the request bit */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
281 xEventGroupClearBits(xEventGroupWifi, TASK_WIFI_REQUEST_STA_CONNECT);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
282 }
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
283
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
284 } /* for(;;) */
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
285 vTaskDelay(10 / portTICK_PERIOD_MS);
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
286 }
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
287
d0155c16e992 Added Wifi task.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
288

mercurial