forked from micro-ROS/micro_ros_espidf_component
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feature/ethernet: Enable support of the microROS over the ethernet in…
…terface (micro-ROS#24) * enet: added microros ethernet support inrastructurre * network: enable support for microROS over ethernet in ESP32 Co-authored-by: Felipe Neves <[email protected]>
- Loading branch information
Showing
7 changed files
with
457 additions
and
112 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,125 +1,27 @@ | ||
#include <string.h> | ||
|
||
#include "uxr/client/config.h" | ||
|
||
#include "freertos/FreeRTOS.h" | ||
#include "freertos/task.h" | ||
|
||
#include <driver/uart.h> | ||
#include <driver/gpio.h> | ||
|
||
#include <string.h> | ||
#include "freertos/event_groups.h" | ||
#include "esp_system.h" | ||
#include "esp_wifi.h" | ||
#include "esp_event.h" | ||
#include "esp_log.h" | ||
#include "esp_system.h" | ||
#include "nvs_flash.h" | ||
|
||
#include "lwip/err.h" | ||
#include "lwip/sys.h" | ||
|
||
void appMain(void *argument); | ||
|
||
#define ESP_WIFI_SSID CONFIG_ESP_WIFI_SSID | ||
#define ESP_WIFI_PASS CONFIG_ESP_WIFI_PASSWORD | ||
#define ESP_MAXIMUM_RETRY CONFIG_ESP_MAXIMUM_RETRY | ||
|
||
static EventGroupHandle_t s_wifi_event_group; | ||
|
||
#define WIFI_CONNECTED_BIT BIT0 | ||
#define WIFI_FAIL_BIT BIT1 | ||
|
||
static const char *TAG = "wifi station"; | ||
static int s_retry_num = 0; | ||
|
||
static void event_handler(void* arg, esp_event_base_t event_base, | ||
int32_t event_id, void* event_data) | ||
{ | ||
if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) { | ||
esp_wifi_connect(); | ||
} else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) { | ||
if (s_retry_num < ESP_MAXIMUM_RETRY) { | ||
esp_wifi_connect(); | ||
s_retry_num++; | ||
ESP_LOGI(TAG, "retry to connect to the AP"); | ||
} else { | ||
xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT); | ||
} | ||
ESP_LOGI(TAG,"connect to the AP fail"); | ||
} else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) { | ||
ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data; | ||
ESP_LOGI(TAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip)); | ||
s_retry_num = 0; | ||
xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT); | ||
} | ||
} | ||
|
||
void wifi_init_sta() | ||
{ | ||
s_wifi_event_group = xEventGroupCreate(); | ||
|
||
ESP_ERROR_CHECK(esp_netif_init()); | ||
|
||
ESP_ERROR_CHECK(esp_event_loop_create_default()); | ||
esp_netif_create_default_wifi_sta(); | ||
|
||
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); | ||
ESP_ERROR_CHECK(esp_wifi_init(&cfg)); | ||
|
||
ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL)); | ||
ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &event_handler, NULL)); | ||
|
||
wifi_config_t wifi_config = { | ||
.sta = { | ||
.ssid = ESP_WIFI_SSID, | ||
.password = ESP_WIFI_PASS | ||
}, | ||
}; | ||
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA) ); | ||
ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) ); | ||
ESP_ERROR_CHECK(esp_wifi_start() ); | ||
|
||
ESP_LOGI(TAG, "wifi_init_sta finished."); | ||
|
||
/* Waiting until either the connection is established (WIFI_CONNECTED_BIT) or connection failed for the maximum | ||
* number of re-tries (WIFI_FAIL_BIT). The bits are set by event_handler() (see above) */ | ||
EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group, | ||
WIFI_CONNECTED_BIT | WIFI_FAIL_BIT, | ||
pdFALSE, | ||
pdFALSE, | ||
portMAX_DELAY); | ||
#include <driver/uart.h> | ||
#include <driver/gpio.h> | ||
|
||
/* xEventGroupWaitBits() returns the bits before the call returned, hence we can test which event actually | ||
* happened. */ | ||
if (bits & WIFI_CONNECTED_BIT) { | ||
ESP_LOGI(TAG, "connected to ap SSID:%s", ESP_WIFI_SSID); | ||
} else if (bits & WIFI_FAIL_BIT) { | ||
ESP_LOGI(TAG, "Failed to connect to SSID:%s", ESP_WIFI_SSID); | ||
} else { | ||
ESP_LOGE(TAG, "UNEXPECTED EVENT"); | ||
} | ||
#include <uros_network_interfaces.h> | ||
|
||
ESP_ERROR_CHECK(esp_event_handler_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, &event_handler)); | ||
ESP_ERROR_CHECK(esp_event_handler_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, &event_handler)); | ||
vEventGroupDelete(s_wifi_event_group); | ||
} | ||
extern void appMain(void *argument); | ||
|
||
void app_main(void) | ||
{ | ||
// Start networkign if required | ||
#ifdef UCLIENT_PROFILE_UDP | ||
//Initialize NVS | ||
esp_err_t ret = nvs_flash_init(); | ||
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { | ||
ESP_ERROR_CHECK(nvs_flash_erase()); | ||
ret = nvs_flash_init(); | ||
} | ||
ESP_ERROR_CHECK(ret); | ||
|
||
ESP_LOGI(TAG, "ESP_WIFI_MODE_STA"); | ||
wifi_init_sta(); | ||
// Start the networking if required | ||
ESP_ERROR_CHECK(uros_network_interface_initialize()); | ||
#endif // UCLIENT_PROFILE_UDP | ||
|
||
// start microROS task | ||
//start microROS task | ||
xTaskCreate(appMain, "uros_task", CONFIG_MICRO_ROS_APP_STACK, NULL, 5, NULL); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.