探究ESP32S【第三天】——连接wifi(3)

博主在使用MicroPython处理WiFi网络时遇到报错,查看MicroPython函数库,尝试用match和search方法处理,后发现ESP32内置re和ure模块均可使用,还分享了网络连接相关代码及几个有用的链接,如machine内置函数和ESP32开发资料整理链接。

昨天卡在了这里:

报错:

看了下mircopython的函数库:https://docs.singtown.com/micropython/zh/latest/openmvcam/library/ure.html#

上面说的ure模块就是python中的re模块,不管三七二十一,先试试:

用match之后,虽然能找出是否存在这个wifi,但是并不能直接对两个str进行比较(str == str)

所以用了search:

后来才发现,ESP32内置了re和ure所以两个应该是都可以用的。

 

贴上代码吧

//--------------------connectwifi.py------------------------------//
import network
import ure
  
def scanNetwork(station, ssid):
  validNetwork = station.scan()
  for net in validNetwork:
#    print(ssid, str(net[0]))
    if ure.search(ssid, str(net[0])):
      return True
  return False
    
  
def connect(ssid, password):
  station = network.WLAN(network.STA_IF)
  if station.isconnected() == True:
    print("Already connected")
    return
  
  station.active(True)
  if scanNetwork(station, ssid) == False:
    print("Without this WiFi")
    return
  station.connect(ssid, password)
  while station.isconnected() == False:
    pass
  print("Connection successful")
  print(station.ifconfig())
  
def disconnect():
  station = network.WLAN(network.STA_IF)
  if station.isconnected() == True:
    station.disconnect()


//--------------------------main.py--------------------------------//
import time
import connectwifi

connectwifi.connect('gaoa', 'bugaosuni')

 

网络连接暂时告一段落,看看有什么其他可以耍耍的。

在百度的时候先mark几个链接,是有用的以后:

machine内置函数: https://blog.youkuaiyun.com/solar_Lan/article/details/79265218

ESP32开发资料整理: https://blog.youkuaiyun.com/xuanze0/article/details/79093124

所给参考引用中未提及乐鑫esp32s3box3连接WiFi的方法。一般而言,乐鑫ESP32系列设备连接WiFi通常可按以下步骤进行: ### 1. 包含必要的头文件 在代码中包含WiFi相关的头文件,例如: ```c #include "esp_wifi.h" #include "esp_event.h" #include "nvs_flash.h" ``` ### 2. 初始化WiFi 在初始化之前,需要初始化非易失性存储(NVS),用于存储WiFi配置等信息。 ```c // 初始化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); // 初始化WiFi栈 esp_netif_init(); 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)); ``` ### 3. 配置WiFi参数 设置要连接WiFi的SSID和密码。 ```c wifi_config_t wifi_config = { .sta = { .ssid = "YOUR_SSID", .password = "YOUR_PASSWORD" }, }; ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA) ); ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) ); ``` 将`YOUR_SSID`替换为实际的WiFi名称,`YOUR_PASSWORD`替换为实际的WiFi密码。 ### 4. 启动WiFi ```c ESP_ERROR_CHECK(esp_wifi_start() ); ``` ### 5. 处理连接事件 可以通过事件循环来处理WiFi连接的各种事件,例如连接成功、连接失败等。 ```c // 注册事件处理函数 esp_event_handler_instance_t instance_any_id; esp_event_handler_instance_t instance_got_ip; ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL, &instance_any_id)); ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &event_handler, NULL, &instance_got_ip)); // 事件处理函数示例 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 < EXAMPLE_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); } } ``` ### 6. 等待连接结果 可以使用事件组来等待连接成功或失败的结果。 ```c EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group, WIFI_CONNECTED_BIT | WIFI_FAIL_BIT, pdFALSE, pdFALSE, portMAX_DELAY); if (bits & WIFI_CONNECTED_BIT) { ESP_LOGI(TAG, "connected to ap SSID:%s password:%s", EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS); } else if (bits & WIFI_FAIL_BIT) { ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s", EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS); } else { ESP_LOGE(TAG, "UNEXPECTED EVENT"); } ``` 以上代码只是一个基本示例,实际应用中可能需要根据具体情况进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值