Quellcode durchsuchen

add: 添加wlan库的实现,可以联网了, http测试ok, https会崩

Wendal Chen vor 3 Jahren
Ursprung
Commit
c05e19c562

+ 4 - 1
luatos/components/luat/CMakeLists.txt

@@ -12,6 +12,7 @@ idf_component_register(SRC_DIRS ${LUATOS_ROOT}/luat/modules
                                 ${LUATOS_ROOT}/components/fal/src
                                 ${LUATOS_ROOT}/components/flashdb/src
                                 ${LUATOS_ROOT}/components/minmea
+                                ${LUATOS_ROOT}/components/wlan
                     EXCLUDE_SRCS
                                 ${LUATOS_ROOT}/luat/modules/luat_lib_http.c
                     INCLUDE_DIRS ../../include
@@ -28,6 +29,8 @@ idf_component_register(SRC_DIRS ${LUATOS_ROOT}/luat/modules
                                 ${LUATOS_ROOT}/components/fal/inc
                                 ${LUATOS_ROOT}/components/flashdb/inc
                                 ${LUATOS_ROOT}/components/minmea
-                    REQUIRES esp-tls lwip esp_http_client mbedtls spiffs driver heap
+                                ${LUATOS_ROOT}/components/wlan
+                    REQUIRES esp-tls lwip esp_http_client mbedtls spiffs driver heap esp_netif esp_event
+                             esp_wifi
                     )
 

+ 3 - 0
luatos/components/luat/port/luat_base_idf5.c

@@ -182,6 +182,9 @@ static const luaL_Reg loadedlibs[] = {
   {"iotauth", luaopen_iotauth},
 #endif
   {"http2", luaopen_http},
+#ifdef LUAT_USE_WLAN
+  {"wlan", luaopen_wlan},
+#endif
   {NULL, NULL}
 };
 

+ 184 - 0
luatos/components/luat/port/luat_wlan_idf5.c

@@ -0,0 +1,184 @@
+#include "luat_base.h"
+#include "luat_msgbus.h"
+#include "luat_wlan.h"
+
+
+#include "esp_attr.h"
+#include "esp_netif.h"
+#include "esp_event.h"
+#include "esp_system.h"
+#include "esp_wifi.h"
+#include "esp_wifi_types.h"
+#include "esp_smartconfig.h"
+
+#define LUAT_LOG_TAG "wlan"
+#include "luat_log.h"
+
+static uint8_t wlan_inited = 0;
+static uint8_t wlan_is_ready = 0;
+
+static char sta_ip[32];
+
+static int l_wlan_handler(lua_State *L, void* ptr) {
+    rtos_msg_t* msg = (rtos_msg_t*)lua_topointer(L, -1);
+    int32_t event_id = msg->arg1;
+    esp_netif_ip_info_t ip_info;
+    lua_getglobal(L, "sys_pub");
+    if (msg->arg2 == 0) {
+
+        switch (event_id)
+        {
+        case WIFI_EVENT_WIFI_READY:
+            LLOGD("wifi protocol is ready");
+            lua_getglobal(L, "sys_pub");
+            lua_pushstring(L, "WLAN_READY");
+            lua_pushinteger(L, 1);
+            //esp_netif_get_ip_info(ESP_IF_WIFI_STA,&ip_info);
+            lua_call(L, 2, 0);
+            break;
+        case WIFI_EVENT_STA_CONNECTED:
+            LLOGD("wifi connected!!!");
+            lua_pushstring(L, "WLAN_STA_CONNECTED");
+            lua_call(L, 1, 0);
+            break;
+        case WIFI_EVENT_STA_DISCONNECTED:
+            LLOGD("wifi disconnected!!!");
+            lua_pushstring(L, "WLAN_STA_DISCONNECTED");
+            lua_call(L, 1, 0);
+            lua_getglobal(L, "sys_pub");
+            lua_pushstring(L, "WLAN_READY");
+            lua_pushinteger(L, 0);
+            lua_call(L, 2, 0);
+            break;
+        case WIFI_EVENT_STA_START:
+            //LLOGD("wifi station start");
+            break;
+        case WIFI_EVENT_STA_STOP:
+            //LLOGD("wifi station stop");
+            break;
+        case WIFI_EVENT_SCAN_DONE:
+            LLOGD("wifi scan done");
+            break;
+        default:
+            LLOGI("unkown event %d", event_id);
+            break;
+        }
+    }
+    else if (msg->arg2 == 1) {
+        if (event_id == IP_EVENT_STA_GOT_IP) {
+            LLOGD("IP_EVENT_STA_GOT_IP %s", sta_ip);
+            lua_pushstring(L, "IP_READY");
+            lua_pushstring(L, sta_ip);
+            lua_call(L, 2, 0);
+        }
+    }
+    return 0;
+}
+
+static void wifi_event_handler(void *arg, esp_event_base_t event_base,
+                          int32_t event_id, void *event_data) {
+    rtos_msg_t msg = {0};
+    msg.handler = l_wlan_handler;
+    msg.arg1 = event_id;
+
+    LLOGD("wifi event %d", event_id);
+    if (event_id == WIFI_EVENT_STA_DISCONNECTED) {
+        wlan_is_ready = 0;
+    }
+    luat_msgbus_put(&msg, 0);
+}
+
+static void ip_event_handler(void *arg, esp_event_base_t event_base,
+                          int32_t event_id, void *event_data) {
+    rtos_msg_t msg = {0};
+    msg.handler = l_wlan_handler;
+    msg.arg1 = event_id;
+    msg.arg2 = 1;
+    ip_event_got_ip_t *event;
+
+    LLOGD("ip event %d", event_id);
+    if (event_id == IP_EVENT_STA_GOT_IP) {
+        wlan_is_ready = 1;
+        event = (ip_event_got_ip_t*)event_data;
+        sprintf(sta_ip, IPSTR, IP2STR(&event->ip_info.ip));
+    }
+    luat_msgbus_put(&msg, 0);
+}
+
+int luat_wlan_init(luat_wlan_config_t *conf) {
+    if (wlan_inited != 0) {
+        LLOGI("wlan is ready!!");
+        return 0;
+    }
+
+    esp_netif_init();
+    esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL);
+    esp_event_handler_register(IP_EVENT,   ESP_EVENT_ANY_ID,   &ip_event_handler, NULL);
+    esp_event_handler_register(SC_EVENT,   ESP_EVENT_ANY_ID, &wifi_event_handler, NULL);
+
+    esp_netif_create_default_wifi_sta();
+
+    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
+    cfg.static_rx_buf_num = 2;
+    cfg.static_tx_buf_num = 2;
+
+    int ret = esp_wifi_init(&cfg);
+    esp_wifi_set_mode(WIFI_MODE_STA);
+    LLOGD("esp_wifi_init ret %d", ret);
+    ret = esp_wifi_start();
+    LLOGD("esp_wifi_start ret %d", ret);
+    wlan_inited = 1;
+    return 0;
+}
+
+// 设置wifi模式
+int luat_wlan_mode(luat_wlan_config_t *conf) {
+    switch (conf->mode)
+    {
+    case LUAT_WLAN_MODE_NULL:
+        esp_wifi_set_mode(WIFI_MODE_NULL);
+        break;
+    case LUAT_WLAN_MODE_STA:
+        esp_wifi_set_mode(WIFI_MODE_STA);
+        break;
+    case LUAT_WLAN_MODE_AP:
+        esp_wifi_set_mode(WIFI_MODE_AP);
+        break;
+    case LUAT_WLAN_MODE_APSTA:
+        esp_wifi_set_mode(WIFI_MODE_APSTA);
+        break;
+    }
+    return 0;
+}
+
+// 是否已经连上wifi
+int luat_wlan_ready(void) {
+    return wlan_is_ready;
+}
+
+int luat_wlan_connect(luat_wlan_conninfo_t* info) {
+    int ret = 0;
+
+    wifi_config_t cfg = {0};
+
+    // LLOGD("connect %s %s", info->ssid, info->password);
+
+    memcpy(cfg.sta.ssid, info->ssid, strlen(info->ssid));
+    memcpy(cfg.sta.password, info->password, strlen(info->password));
+    esp_wifi_set_config(WIFI_IF_STA, &cfg);
+    ret = esp_wifi_connect();
+    LLOGD("esp_wifi_connect ret %d", ret);
+    return 0;
+}
+
+int luat_wlan_disconnect(void) {
+    int ret = 0;
+    ret = esp_wifi_disconnect();
+    LLOGD("esp_wifi_disconnect ret %d", ret);
+    return 0;
+}
+
+int luat_wlan_scan(void) {
+    static const wifi_scan_config_t conf = {0};
+    return esp_wifi_scan_start(&conf, false);
+}

+ 2 - 2
luatos/include/luat_conf_bsp.h

@@ -35,8 +35,8 @@
 // OTP
 // #define LUAT_USE_OTP 1
 // #define LUAT_USE_TOUCHKEY 1
-// i2s
-//#define LUAt_USE_I2S 1
+
+#define LUAT_USE_WLAN 1
 
 #define LUAT_USE_IOTAUTH 1
 

+ 1 - 0
luatos/main/idf5_main.c

@@ -23,5 +23,6 @@ void app_main(void)
     bootloader_random_enable();
     nvs_flash_init();
     luat_heap_init();
+    esp_event_loop_create_default();
     luat_main();
 }

+ 12 - 10
luatos/sdkconfig.defaults.esp32c3

@@ -283,8 +283,8 @@ CONFIG_ESP_ROM_GET_CLK_FREQ=y
 #
 # Boot ROM Behavior
 #
-CONFIG_BOOT_ROM_LOG_ALWAYS_ON=y
-# CONFIG_BOOT_ROM_LOG_ALWAYS_OFF is not set
+# CONFIG_BOOT_ROM_LOG_ALWAYS_ON is not set
+CONFIG_BOOT_ROM_LOG_ALWAYS_OFF=y
 # CONFIG_BOOT_ROM_LOG_ON_GPIO_HIGH is not set
 # CONFIG_BOOT_ROM_LOG_ON_GPIO_LOW is not set
 # end of Boot ROM Behavior
@@ -483,7 +483,8 @@ CONFIG_ESP_TLS_USE_DS_PERIPHERAL=y
 # CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS is not set
 # CONFIG_ESP_TLS_SERVER is not set
 # CONFIG_ESP_TLS_PSK_VERIFICATION is not set
-# CONFIG_ESP_TLS_INSECURE is not set
+CONFIG_ESP_TLS_INSECURE=y
+CONFIG_ESP_TLS_SKIP_SERVER_CERT_VERIFY=y
 # end of ESP-TLS
 
 #
@@ -698,7 +699,7 @@ CONFIG_ESP_SYSTEM_MEMPROT_FEATURE_LOCK=y
 
 CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32
 CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2304
-CONFIG_ESP_MAIN_TASK_STACK_SIZE=3584
+CONFIG_ESP_MAIN_TASK_STACK_SIZE=16284
 CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0=y
 # CONFIG_ESP_MAIN_TASK_AFFINITY_NO_AFFINITY is not set
 CONFIG_ESP_MAIN_TASK_AFFINITY=0x0
@@ -927,16 +928,17 @@ CONFIG_HEAP_TRACING_OFF=y
 #
 # CONFIG_LOG_DEFAULT_LEVEL_NONE is not set
 # CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set
-# CONFIG_LOG_DEFAULT_LEVEL_WARN is not set
-CONFIG_LOG_DEFAULT_LEVEL_INFO=y
+CONFIG_LOG_DEFAULT_LEVEL_WARN=y
+# CONFIG_LOG_DEFAULT_LEVEL_INFO is not set
 # CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set
 # CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set
-CONFIG_LOG_DEFAULT_LEVEL=3
+CONFIG_LOG_DEFAULT_LEVEL=2
 CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=y
+# CONFIG_LOG_MAXIMUM_LEVEL_INFO is not set
 # CONFIG_LOG_MAXIMUM_LEVEL_DEBUG is not set
 # CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE is not set
-CONFIG_LOG_MAXIMUM_LEVEL=3
-CONFIG_LOG_COLORS=y
+CONFIG_LOG_MAXIMUM_LEVEL=2
+# CONFIG_LOG_COLORS is not set
 CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y
 # CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set
 # end of Log output
@@ -1485,7 +1487,7 @@ CONFIG_ESP32C3_MEMPROT_FEATURE=y
 CONFIG_ESP32C3_MEMPROT_FEATURE_LOCK=y
 CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32
 CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304
-CONFIG_MAIN_TASK_STACK_SIZE=3584
+CONFIG_MAIN_TASK_STACK_SIZE=16284
 CONFIG_CONSOLE_UART_DEFAULT=y
 # CONFIG_CONSOLE_UART_CUSTOM is not set
 # CONFIG_CONSOLE_UART_NONE is not set