├── .gitignore ├── .gitmodules ├── README.md ├── ap_sta ├── Makefile ├── README.md ├── img │ └── ap_sta.jpg ├── main │ ├── Kconfig.projbuild │ ├── ap_sta.c │ └── component.mk └── sdkconfig ├── ota ├── Makefile ├── OTA_workflow.png ├── README.md ├── main │ ├── Kconfig.projbuild │ ├── component.mk │ └── ota_example_main.c ├── sdkconfig └── sdkconfig.defaults ├── smart_config ├── Makefile ├── README.md ├── img │ ├── log.jpg │ └── wechat.jpg ├── main │ ├── app_main.c │ └── component.mk └── sdkconfig └── sta ├── Makefile ├── README.md ├── img └── sta.jpg ├── main ├── Kconfig.projbuild ├── component.mk ├── main_sta.c └── sta.c └── sdkconfig /.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | sdkconfig.old 3 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "onenet"] 2 | path = onenet 3 | url = https://github.com/tidyjiang8/esp32-onenet.git 4 | [submodule "web_radio"] 5 | path = web_radio 6 | url = https://github.com/MrBuddyCasino/ESP32_MP3_Decoder.git 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 好玩、有趣、实用的 ESP32 小项目 2 | 3 | 本仓库用于存放项目源码,关于项目源码的分析,请参考【[**ESP32 系列博客 - 目录**](http://blog.csdn.net/tidyjiang/article/details/71038695)】 4 | 5 | 目录 | 项目 6 | --- | --- 7 | [sta](./sta) | 让 ESP32 作为 STA 连接的你的 WiFi 热点 8 | [ap_sta](./ap_sta) | 让 ESP32 同时扮演 AP+STA 的角色 9 | [smart_config](smart_config) | 用微信/APP给你的 ESP32 配置热点密码 10 | [ota](ota) | 给你的 ESP32 进行空中升级 11 | [web_radio](web_radio) | 用你的 ESP32 做一个音乐电台 12 | [onenet](onenet) | ESP32 + MQTT 连接到中移动物联网云平台 OneNET 13 | 14 | 未完待续... 15 | -------------------------------------------------------------------------------- /ap_sta/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # This is a project Makefile. It is assumed the directory this Makefile resides in is a 3 | # project subdirectory. 4 | # 5 | 6 | PROJECT_NAME := sta 7 | 8 | include $(IDF_PATH)/make/project.mk 9 | -------------------------------------------------------------------------------- /ap_sta/README.md: -------------------------------------------------------------------------------- 1 | # 让 ESP32 同时扮演 AP+STA 的角色 2 | 3 | 功能说明:让 ESP32 既当做一个 AP,让其它终端设备访问,又当做一个 STA,连接到其它的 AP。 4 | 5 | > 一个有意思的问题,既然是 AP+STA,可不可以让它(作为 STA 角色)连接到它自己(作为 AP 角色)呢?有兴趣的童鞋可以自己取试试^_^ 6 | 7 | ## 快速开始 8 | 9 | ### 假设 10 | 11 | - 你已经安装好 ESP-IDF 和工具链。 12 | - 你已经有一个 WiFi 热点。 13 | 14 | ### 步骤 15 | 16 | - 使用数据线将开发板连接到你的系统中,让系统能够识别到你的板子(Windows 是`COM\*`, Linux 是`/dev/ttyUSB\*`)。 17 | - 进入`ap_sta`所在目录。 18 | - 执行命名`make menuconfig`进行配置。 19 | - 对串口进行配置。 20 | - 配置作为 AP 时其它设备访问该 AP 所需要的 SSID 和密码。依次进入配置选项`Demo Configuration --->`、`AP Configuration --->`,然后在`[AP] SSID`和`[AP] Password`中填写 SSID 和密码。 21 | - 配置作为 STA 时需要连接到的 AP 的 SSID 和密码。依次进入配置选项`Demo Configuration --->`、`STA Configuration --->`,然后在`[STA] SSID`和`[STA] Password`中填写 SSID 和密码。 22 | - 执行命令`make`进行编译 23 | - 执行命令`make flash monitor`将编译生成的镜像烧写到 ESP32 开发板上面,并查看串口输出。 24 | 25 | ### 现象 26 | 27 | 对于 STA 功能,当板子起来后,正如 [让 ESP32 作为 STA 连接的你的 WiFi 热点](https://github.com/tidyjiang8/esp32-projects/tree/master/sta)中的现象一样,板子已经连接到 WiFi 热点,并获取到 IP 地址。 28 | 29 | 对于 AP 功能,我们在手机中进入 WiFi 设置界面,发现已经能搜索到 ESP32 建立的 AP 了,输入密码后,连接成功。此时我们再看串口的打印消息,它已经打印出了连接到该 AP 的客户端的 MAC 地址。 30 | 31 | > 有兴趣的话,查看下你的手机的 MAC 地址,是不是就是 ESP32 所打印的 MAC 地址呢? 32 | 33 | ![](./img/ap_sta.jpg) 34 | 35 | ## 深入理解 36 | 37 | 参考博客:[]() 38 | -------------------------------------------------------------------------------- /ap_sta/img/ap_sta.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunhuajiang/esp32-projects/de21cb9e0702eb730c6a53b9843f83b9ce0f58e9/ap_sta/img/ap_sta.jpg -------------------------------------------------------------------------------- /ap_sta/main/Kconfig.projbuild: -------------------------------------------------------------------------------- 1 | menu "Demo Configuration" 2 | 3 | menu "AP Configuration" 4 | config APSTA_AP_SSID 5 | string "[AP] SSID" 6 | default "ap_test" 7 | help 8 | SSID (network name) to connect to. 9 | 10 | config APSTA_AP_PASSWORD 11 | string "[AP] Password" 12 | default "1234567" 13 | help 14 | WiFi password (WPA or WPA2) to use. 15 | 16 | Can be left blank if the network has no security set. 17 | 18 | endmenu 19 | 20 | menu "STA Configuration" 21 | config APSTA_STA_SSID 22 | string "[STA] SSID" 23 | default "tidyjiang-ssid" 24 | help 25 | SSID (network name) to connect to. 26 | 27 | config APSTA_STA_PASSWORD 28 | string "[STA] Password" 29 | default "tidyjiang-pswd" 30 | help 31 | WiFi password (WPA or WPA2) to use. 32 | 33 | Can be left blank if the network has no security set. 34 | 35 | endmenu 36 | endmenu 37 | -------------------------------------------------------------------------------- /ap_sta/main/ap_sta.c: -------------------------------------------------------------------------------- 1 | #include "freertos/FreeRTOS.h" 2 | #include "esp_wifi.h" 3 | #include "esp_system.h" 4 | #include "esp_event.h" 5 | #include "esp_event_loop.h" 6 | #include "esp_log.h" 7 | #include "nvs_flash.h" 8 | #include "driver/gpio.h" 9 | 10 | #define TAG "app_sta" 11 | 12 | esp_err_t event_handler(void *ctx, system_event_t *event) 13 | { 14 | switch (event->event_id) 15 | { 16 | case SYSTEM_EVENT_STA_START: 17 | ESP_LOGI(TAG, "Connecting to AP..."); 18 | esp_wifi_connect(); 19 | break; 20 | 21 | case SYSTEM_EVENT_STA_GOT_IP: 22 | ESP_LOGI(TAG, "Connected."); 23 | break; 24 | 25 | case SYSTEM_EVENT_STA_DISCONNECTED: 26 | //ESP_LOGI(TAG, "Wifi disconnected, try to connect again..."); 27 | esp_wifi_connect(); 28 | break; 29 | 30 | default: 31 | break; 32 | } 33 | 34 | return ESP_OK; 35 | } 36 | 37 | void app_main(void) 38 | { 39 | nvs_flash_init(); 40 | tcpip_adapter_init(); 41 | ESP_ERROR_CHECK( esp_event_loop_init(event_handler, NULL) ); 42 | wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); 43 | ESP_ERROR_CHECK( esp_wifi_init(&cfg) ); 44 | ESP_ERROR_CHECK( esp_wifi_set_storage(WIFI_STORAGE_RAM) ); 45 | ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_APSTA) ); 46 | wifi_config_t sta_config = { 47 | .sta = { 48 | .ssid = CONFIG_APSTA_STA_SSID, 49 | .password = CONFIG_APSTA_STA_PASSWORD, 50 | .bssid_set = false 51 | } 52 | }; 53 | wifi_config_t ap_config = { 54 | .ap = { 55 | .ssid = CONFIG_APSTA_AP_SSID, 56 | .password = CONFIG_APSTA_AP_PASSWORD, 57 | .ssid_len = 0, 58 | .max_connection = 4, 59 | .authmode = WIFI_AUTH_WPA_PSK 60 | } 61 | }; 62 | ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &sta_config)); 63 | esp_err_t tmp = esp_wifi_set_config(WIFI_IF_AP, &ap_config); 64 | ESP_ERROR_CHECK(esp_wifi_start()); 65 | esp_wifi_connect(); 66 | 67 | } 68 | 69 | -------------------------------------------------------------------------------- /ap_sta/main/component.mk: -------------------------------------------------------------------------------- 1 | # 2 | # Main component makefile. 3 | # 4 | # This Makefile can be left empty. By default, it will take the sources in the 5 | # src/ directory, compile them and link them into lib(subdirectory_name).a 6 | # in the build directory. This behaviour is entirely configurable, 7 | # please read the ESP-IDF documents if you need to do this. 8 | # 9 | -------------------------------------------------------------------------------- /ap_sta/sdkconfig: -------------------------------------------------------------------------------- 1 | # 2 | # Automatically generated file; DO NOT EDIT. 3 | # Espressif IoT Development Framework Configuration 4 | # 5 | 6 | # 7 | # SDK tool configuration 8 | # 9 | CONFIG_TOOLPREFIX="xtensa-esp32-elf-" 10 | CONFIG_PYTHON="python" 11 | 12 | # 13 | # Bootloader config 14 | # 15 | # CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set 16 | # CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set 17 | # CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set 18 | CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y 19 | # CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set 20 | # CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set 21 | CONFIG_LOG_BOOTLOADER_LEVEL=3 22 | 23 | # 24 | # Security features 25 | # 26 | # CONFIG_SECURE_BOOT_ENABLED is not set 27 | # CONFIG_FLASH_ENCRYPTION_ENABLED is not set 28 | 29 | # 30 | # Serial flasher config 31 | # 32 | CONFIG_ESPTOOLPY_PORT="/dev/ttyUSB0" 33 | CONFIG_ESPTOOLPY_BAUD_115200B=y 34 | # CONFIG_ESPTOOLPY_BAUD_230400B is not set 35 | # CONFIG_ESPTOOLPY_BAUD_921600B is not set 36 | # CONFIG_ESPTOOLPY_BAUD_2MB is not set 37 | # CONFIG_ESPTOOLPY_BAUD_OTHER is not set 38 | CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=115200 39 | CONFIG_ESPTOOLPY_BAUD=115200 40 | CONFIG_ESPTOOLPY_COMPRESSED=y 41 | # CONFIG_FLASHMODE_QIO is not set 42 | # CONFIG_FLASHMODE_QOUT is not set 43 | CONFIG_FLASHMODE_DIO=y 44 | # CONFIG_FLASHMODE_DOUT is not set 45 | CONFIG_ESPTOOLPY_FLASHMODE="dio" 46 | # CONFIG_ESPTOOLPY_FLASHFREQ_80M is not set 47 | CONFIG_ESPTOOLPY_FLASHFREQ_40M=y 48 | # CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set 49 | # CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set 50 | CONFIG_ESPTOOLPY_FLASHFREQ="40m" 51 | # CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set 52 | CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y 53 | # CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set 54 | # CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set 55 | # CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set 56 | CONFIG_ESPTOOLPY_FLASHSIZE="2MB" 57 | CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y 58 | CONFIG_ESPTOOLPY_BEFORE_RESET=y 59 | # CONFIG_ESPTOOLPY_BEFORE_NORESET is not set 60 | CONFIG_ESPTOOLPY_BEFORE="default_reset" 61 | CONFIG_ESPTOOLPY_AFTER_RESET=y 62 | # CONFIG_ESPTOOLPY_AFTER_NORESET is not set 63 | CONFIG_ESPTOOLPY_AFTER="hard_reset" 64 | # CONFIG_MONITOR_BAUD_9600B is not set 65 | # CONFIG_MONITOR_BAUD_57600B is not set 66 | CONFIG_MONITOR_BAUD_115200B=y 67 | # CONFIG_MONITOR_BAUD_230400B is not set 68 | # CONFIG_MONITOR_BAUD_921600B is not set 69 | # CONFIG_MONITOR_BAUD_2MB is not set 70 | # CONFIG_MONITOR_BAUD_OTHER is not set 71 | CONFIG_MONITOR_BAUD_OTHER_VAL=115200 72 | CONFIG_MONITOR_BAUD=115200 73 | 74 | # 75 | # Partition Table 76 | # 77 | CONFIG_PARTITION_TABLE_SINGLE_APP=y 78 | # CONFIG_PARTITION_TABLE_TWO_OTA is not set 79 | # CONFIG_PARTITION_TABLE_CUSTOM is not set 80 | CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" 81 | CONFIG_PARTITION_TABLE_CUSTOM_APP_BIN_OFFSET=0x10000 82 | CONFIG_PARTITION_TABLE_FILENAME="partitions_singleapp.csv" 83 | CONFIG_APP_OFFSET=0x10000 84 | 85 | # 86 | # Demo Configuration 87 | # 88 | 89 | # 90 | # AP Configuration 91 | # 92 | CONFIG_APSTA_AP_SSID="ap_test" 93 | CONFIG_APSTA_AP_PASSWORD="12345678" 94 | 95 | # 96 | # STA Configuration 97 | # 98 | CONFIG_APSTA_STA_SSID="ap_test" 99 | CONFIG_APSTA_STA_PASSWORD="12345678" 100 | CONFIG_OPTIMIZATION_LEVEL_DEBUG=y 101 | # CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set 102 | 103 | # 104 | # Component config 105 | # 106 | # CONFIG_AWS_IOT_SDK is not set 107 | # CONFIG_BT_ENABLED is not set 108 | CONFIG_BT_RESERVE_DRAM=0 109 | 110 | # 111 | # ESP32-specific 112 | # 113 | # CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set 114 | CONFIG_ESP32_DEFAULT_CPU_FREQ_160=y 115 | # CONFIG_ESP32_DEFAULT_CPU_FREQ_240 is not set 116 | CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=160 117 | CONFIG_MEMMAP_SMP=y 118 | # CONFIG_MEMMAP_TRACEMEM is not set 119 | # CONFIG_MEMMAP_TRACEMEM_TWOBANKS is not set 120 | # CONFIG_ESP32_TRAX is not set 121 | CONFIG_TRACEMEM_RESERVE_DRAM=0x0 122 | # CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set 123 | # CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set 124 | CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y 125 | # CONFIG_ESP32_ENABLE_COREDUMP is not set 126 | # CONFIG_ESP32_APPTRACE_DEST_TRAX is not set 127 | # CONFIG_ESP32_APPTRACE_DEST_UART is not set 128 | CONFIG_ESP32_APPTRACE_DEST_NONE=y 129 | # CONFIG_ESP32_APPTRACE_ENABLE is not set 130 | CONFIG_BASE_MAC_STORED_DEFAULT_EFUSE=y 131 | # CONFIG_BASE_MAC_STORED_CUSTOMER_DEFINED_EFUSE is not set 132 | # CONFIG_BASE_MAC_STORED_OTHER_CUSTOMER_DEFINED_PLACE is not set 133 | # CONFIG_TWO_MAC_ADDRESS_FROM_EFUSE is not set 134 | CONFIG_FOUR_MAC_ADDRESS_FROM_EFUSE=y 135 | CONFIG_NUMBER_OF_MAC_ADDRESS_GENERATED_FROM_EFUSE=4 136 | CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 137 | CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=4096 138 | CONFIG_MAIN_TASK_STACK_SIZE=4096 139 | CONFIG_NEWLIB_STDOUT_ADDCR=y 140 | # CONFIG_NEWLIB_NANO_FORMAT is not set 141 | CONFIG_CONSOLE_UART_DEFAULT=y 142 | # CONFIG_CONSOLE_UART_CUSTOM is not set 143 | # CONFIG_CONSOLE_UART_NONE is not set 144 | CONFIG_CONSOLE_UART_NUM=0 145 | CONFIG_CONSOLE_UART_BAUDRATE=115200 146 | # CONFIG_ULP_COPROC_ENABLED is not set 147 | CONFIG_ULP_COPROC_RESERVE_MEM=0 148 | # CONFIG_ESP32_PANIC_PRINT_HALT is not set 149 | CONFIG_ESP32_PANIC_PRINT_REBOOT=y 150 | # CONFIG_ESP32_PANIC_SILENT_REBOOT is not set 151 | # CONFIG_ESP32_PANIC_GDBSTUB is not set 152 | CONFIG_ESP32_DEBUG_OCDAWARE=y 153 | CONFIG_INT_WDT=y 154 | CONFIG_INT_WDT_TIMEOUT_MS=300 155 | CONFIG_INT_WDT_CHECK_CPU1=y 156 | CONFIG_TASK_WDT=y 157 | # CONFIG_TASK_WDT_PANIC is not set 158 | CONFIG_TASK_WDT_TIMEOUT_S=5 159 | CONFIG_TASK_WDT_CHECK_IDLE_TASK=y 160 | CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y 161 | # CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set 162 | CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y 163 | # CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set 164 | # CONFIG_ESP32_TIME_SYSCALL_USE_NONE is not set 165 | CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y 166 | # CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL is not set 167 | CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 168 | CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=0 169 | # CONFIG_ESP32_XTAL_FREQ_40 is not set 170 | # CONFIG_ESP32_XTAL_FREQ_26 is not set 171 | CONFIG_ESP32_XTAL_FREQ_AUTO=y 172 | CONFIG_ESP32_XTAL_FREQ=0 173 | CONFIG_WIFI_ENABLED=y 174 | CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 175 | CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=64 176 | # CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set 177 | CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y 178 | CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 179 | CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32 180 | CONFIG_ESP32_WIFI_AMPDU_ENABLED=y 181 | CONFIG_ESP32_WIFI_NVS_ENABLED=y 182 | CONFIG_PHY_ENABLED=y 183 | 184 | # 185 | # PHY 186 | # 187 | CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y 188 | # CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set 189 | CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 190 | CONFIG_ESP32_PHY_MAX_TX_POWER=20 191 | # CONFIG_ETHERNET is not set 192 | 193 | # 194 | # FAT Filesystem support 195 | # 196 | CONFIG_FATFS_CODEPAGE_ASCII=y 197 | # CONFIG_FATFS_CODEPAGE_437 is not set 198 | # CONFIG_FATFS_CODEPAGE_720 is not set 199 | # CONFIG_FATFS_CODEPAGE_737 is not set 200 | # CONFIG_FATFS_CODEPAGE_771 is not set 201 | # CONFIG_FATFS_CODEPAGE_775 is not set 202 | # CONFIG_FATFS_CODEPAGE_850 is not set 203 | # CONFIG_FATFS_CODEPAGE_852 is not set 204 | # CONFIG_FATFS_CODEPAGE_855 is not set 205 | # CONFIG_FATFS_CODEPAGE_857 is not set 206 | # CONFIG_FATFS_CODEPAGE_860 is not set 207 | # CONFIG_FATFS_CODEPAGE_861 is not set 208 | # CONFIG_FATFS_CODEPAGE_862 is not set 209 | # CONFIG_FATFS_CODEPAGE_863 is not set 210 | # CONFIG_FATFS_CODEPAGE_864 is not set 211 | # CONFIG_FATFS_CODEPAGE_865 is not set 212 | # CONFIG_FATFS_CODEPAGE_866 is not set 213 | # CONFIG_FATFS_CODEPAGE_869 is not set 214 | # CONFIG_FATFS_CODEPAGE_932 is not set 215 | # CONFIG_FATFS_CODEPAGE_936 is not set 216 | # CONFIG_FATFS_CODEPAGE_949 is not set 217 | # CONFIG_FATFS_CODEPAGE_950 is not set 218 | CONFIG_FATFS_CODEPAGE=1 219 | CONFIG_FATFS_MAX_LFN=255 220 | 221 | # 222 | # FreeRTOS 223 | # 224 | # CONFIG_FREERTOS_UNICORE is not set 225 | CONFIG_FREERTOS_CORETIMER_0=y 226 | # CONFIG_FREERTOS_CORETIMER_1 is not set 227 | CONFIG_FREERTOS_HZ=100 228 | CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION=y 229 | # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set 230 | # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set 231 | CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y 232 | # CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set 233 | CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 234 | CONFIG_FREERTOS_ASSERT_FAIL_ABORT=y 235 | # CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE is not set 236 | # CONFIG_FREERTOS_ASSERT_DISABLE is not set 237 | CONFIG_FREERTOS_BREAK_ON_SCHEDULER_START_JTAG=y 238 | # CONFIG_ENABLE_MEMORY_DEBUG is not set 239 | CONFIG_FREERTOS_ISR_STACKSIZE=1536 240 | # CONFIG_FREERTOS_LEGACY_HOOKS is not set 241 | CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 242 | # CONFIG_SUPPORT_STATIC_ALLOCATION is not set 243 | CONFIG_TIMER_TASK_PRIORITY=1 244 | CONFIG_TIMER_TASK_STACK_DEPTH=2048 245 | CONFIG_TIMER_QUEUE_LENGTH=10 246 | # CONFIG_FREERTOS_DEBUG_INTERNALS is not set 247 | 248 | # 249 | # Log output 250 | # 251 | # CONFIG_LOG_DEFAULT_LEVEL_NONE is not set 252 | # CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set 253 | # CONFIG_LOG_DEFAULT_LEVEL_WARN is not set 254 | CONFIG_LOG_DEFAULT_LEVEL_INFO=y 255 | # CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set 256 | # CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set 257 | CONFIG_LOG_DEFAULT_LEVEL=3 258 | CONFIG_LOG_COLORS=y 259 | 260 | # 261 | # LWIP 262 | # 263 | # CONFIG_L2_TO_L3_COPY is not set 264 | CONFIG_LWIP_MAX_SOCKETS=10 265 | CONFIG_LWIP_THREAD_LOCAL_STORAGE_INDEX=0 266 | # CONFIG_LWIP_SO_REUSE is not set 267 | # CONFIG_LWIP_SO_RCVBUF is not set 268 | CONFIG_LWIP_DHCP_MAX_NTP_SERVERS=1 269 | # CONFIG_LWIP_IP_FRAG is not set 270 | # CONFIG_LWIP_IP_REASSEMBLY is not set 271 | CONFIG_TCP_MAXRTX=12 272 | CONFIG_TCP_SYNMAXRTX=6 273 | CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y 274 | CONFIG_TCPIP_TASK_STACK_SIZE=2560 275 | # CONFIG_PPP_SUPPORT is not set 276 | 277 | # 278 | # mbedTLS 279 | # 280 | CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=16384 281 | # CONFIG_MBEDTLS_DEBUG is not set 282 | CONFIG_MBEDTLS_HARDWARE_AES=y 283 | CONFIG_MBEDTLS_HARDWARE_MPI=y 284 | CONFIG_MBEDTLS_MPI_USE_INTERRUPT=y 285 | CONFIG_MBEDTLS_HARDWARE_SHA=y 286 | CONFIG_MBEDTLS_HAVE_TIME=y 287 | # CONFIG_MBEDTLS_HAVE_TIME_DATE is not set 288 | 289 | # 290 | # OpenSSL 291 | # 292 | # CONFIG_OPENSSL_DEBUG is not set 293 | CONFIG_OPENSSL_ASSERT_DO_NOTHING=y 294 | # CONFIG_OPENSSL_ASSERT_EXIT is not set 295 | 296 | # 297 | # SPI Flash driver 298 | # 299 | # CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set 300 | CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y 301 | -------------------------------------------------------------------------------- /ota/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # This is a project Makefile. It is assumed the directory this Makefile resides in is a 3 | # project subdirectory. 4 | # 5 | 6 | PROJECT_NAME := ota 7 | 8 | include $(IDF_PATH)/make/project.mk 9 | 10 | -------------------------------------------------------------------------------- /ota/OTA_workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunhuajiang/esp32-projects/de21cb9e0702eb730c6a53b9843f83b9ce0f58e9/ota/OTA_workflow.png -------------------------------------------------------------------------------- /ota/README.md: -------------------------------------------------------------------------------- 1 | 2 | # 简化的 OTA Demo 3 | 4 | 本示例用于演示对固件空中升级的流程。 5 | 6 | 本示例是一个简化版的演示程序,对于实际的产品,你应当使用安全协议,例如 HTTPs。 7 | 8 | --- 9 | 10 | # 目标 11 | 12 | 运行在 ESP32 上面的应用程序可以通过下载一个新的镜像文件并将其存储到 flash 上面来进行更新。 13 | 14 | 在这个例子中,ESP32 在 flash 上面有三个镜像:工厂、OTA_0、OTA_1,它们每个镜像都是一个子包含的分区。OTA 镜像分区的数量由分区表布局决定。 15 | 16 | 使用命令 `make flash` 通过串口烧写本示例可以实现更新工厂应用程序镜像的目的。在第一次启动时,bootloader 会加载工厂 app 镜像,然后执行 OTA 更新。更新时会从 http 服务器下载新的镜像,并将它保存到 OTA_0 分区。此时,示例代码会更新 ota_data 分区,表示有新的应用程序分区,然后复位。复位后,bootloader 会读取 ota_data,并判断出有新的 OTA 镜像,然后运行它。 17 | 18 | 19 | # 工作流程 20 | 21 | 框图 OTA_workflow.png 描述了真个工作流程: 22 | 23 | ![OTA Workflow diagram](OTA_workflow.png) 24 | 25 | ## Step 1: 连接到 AP 26 | 27 | 将你的 PC 连接到你将会在 ESP32 上面使用的同一个 AP。 28 | 29 | 30 | ## Step 2: 运行 HTTP 服务器 31 | 32 | Python 有一个内置的 HTTP 服务器,我们这里可以直接使用它。 33 | 34 | 我们将会使用示例 `get-started/hello_world` 作为需要更新的固件。 35 | 36 | 打开一个终端,输入如下的命令来编译示例并启动服务器: 37 | 38 | ``` 39 | cd $IDF_PATH/examples/get-started/hello_world 40 | make 41 | cd build 42 | python -m SimpleHTTPServer 8070 43 | ``` 44 | 45 | 服务器运行后,构建目录的内容可以通过网址 http://localhost:8070/ 浏览到。 46 | 47 | NB: 在某些系统中,命令可能是 `python2 -m SimpleHTTPServer`。 48 | 49 | NB: 你可能已经注意到,用于更新的 "hello world" 没有任何特殊之处,这是因为由 esp-idf 编译的任何 .bin 应用程序都可以作为 OTA 的应用程序。唯一的区别是它是会被写到工厂分区还是 OTA 分区。 50 | 51 | 如果你的防火墙阻止了对端口 8070 的访问,请在本示例运行期间打开它。 52 | If you have any firewall software running that will block incoming access to port 8070, configure it to allow access while running the example. 53 | 54 | ## Step 3: 编译 OTA 示例 55 | 56 | 回到 OTA 示例目录,输入命令 `make menuconfig` 对 OTA 示例进行配置。在子菜单 "Example Configuration" 下面,详细填写如下信息: 57 | 58 | * WiFi SSID & Password 59 | * "HTTP Server" 的 IP 地址,即你的 PC 的 IP 地址 60 | * HTTP 端口号 61 | 62 | 保存你的改动,然后输入 `make` 命令来编译该示例。 63 | 64 | ## Step 4: 烧写 OTA 示例 65 | 66 | 在烧写时,需要先用目标 `erase_flash` 来擦除整个 flash(这会删除之前在 ota_data 分区留下的所有数据),然后通过串口烧写工厂进行: 67 | 68 | ``` 69 | make erase_flash flash 70 | ``` 71 | 72 | `make erase_flash flash` 表示 "擦除所有的东西,然后开始烧写"。`make flash` 只会擦除需要重写的那部分 flash。 73 | 74 | ## Step 5: 运行 OTA 示例 75 | 76 | 示例程序启动后,它会打印 "ota: Starting OTA example...",然后: 77 | 78 | 1. 使用所配置的 SSID 和密码连接 AP。 79 | 2. 连接到 HTTP 服务器并下载新的镜像。 80 | 3. 将镜像写到 flash 中,并进行配置,让板子下次从这个镜像启动。 81 | 4. Reboot 82 | 83 | # 疑难杂症 84 | 85 | * 检查你的 PC 是否能 ping 通 ESP32 的 IP,检查配置菜单中 IP、AP 以及其它配置是否正确。 86 | * 检查是否有防火墙阻止访问你的 PC。 87 | * 通过浏览网址 http://127.0.0.1/ 检查是否可以看到配置文件(默认是 hello-world.bin) 88 | * 如果你还有其它 PC 或手机,可以试试能否看到该文件。 89 | 90 | ## 错误 "ota_begin error err=0x104" 91 | 92 | 如果你看到这个错误,请检查你的分区表,查看所配置的 flash 大小是否足够。默认的 "two OTA slots" 分区表仅能在 4MB 的 flash 上工作。如果你的 flash 小于 4 MB,则需要创建一个自定义的分区表 CSV(查看 components/partition_table)并在配置菜单中对其进行配置。 93 | 94 | 如果改变了分区表的布局,则在这两个步骤之间通常还需要运行 "make erase_flash"。 95 | 96 | ## 产品的实现 97 | 98 | 99 | 如果想在产品中使用这个示例,需要考虑: 100 | 101 | * 使用加密通信协议,例如 HTTPS。 102 | * 初始超时或者烧写过程中的 WiFi 断开的情形 103 | -------------------------------------------------------------------------------- /ota/main/Kconfig.projbuild: -------------------------------------------------------------------------------- 1 | menu "Example Configuration" 2 | 3 | config WIFI_SSID 4 | string "WiFi SSID" 5 | default "myssid" 6 | help 7 | SSID (network name) for the example to connect to. 8 | 9 | config WIFI_PASSWORD 10 | string "WiFi Password" 11 | default "myssid" 12 | help 13 | WiFi password (WPA or WPA2) for the example to use. 14 | 15 | Can be left blank if the network has no security set. 16 | 17 | config SERVER_IP 18 | string "HTTP Server IP" 19 | default "192.168.0.3" 20 | help 21 | HTTP Server IP to download the image file from. 22 | 23 | See example README.md for details. 24 | 25 | config SERVER_PORT 26 | string "HTTP Server Port" 27 | default "8070" 28 | help 29 | HTTP Server port to connect to. 30 | Should be chosen not to conflict with any other port used 31 | on the system. 32 | 33 | config EXAMPLE_FILENAME 34 | string "HTTP GET Filename" 35 | default "/hello-world.bin" 36 | help 37 | Filename of the app image file to download for 38 | the OTA update. 39 | 40 | endmenu 41 | -------------------------------------------------------------------------------- /ota/main/component.mk: -------------------------------------------------------------------------------- 1 | # 2 | # "main" pseudo-component makefile. 3 | # 4 | # (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.) 5 | -------------------------------------------------------------------------------- /ota/main/ota_example_main.c: -------------------------------------------------------------------------------- 1 | /* OTA example 2 | 3 | This example code is in the Public Domain (or CC0 licensed, at your option.) 4 | 5 | Unless required by applicable law or agreed to in writing, this 6 | software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 7 | CONDITIONS OF ANY KIND, either express or implied. 8 | */ 9 | #include 10 | #include 11 | #include 12 | 13 | #include "freertos/FreeRTOS.h" 14 | #include "freertos/task.h" 15 | #include "freertos/event_groups.h" 16 | 17 | #include "esp_system.h" 18 | #include "esp_wifi.h" 19 | #include "esp_event_loop.h" 20 | #include "esp_log.h" 21 | #include "esp_ota_ops.h" 22 | #include "esp_partition.h" 23 | 24 | #include "nvs.h" 25 | #include "nvs_flash.h" 26 | 27 | #define EXAMPLE_WIFI_SSID CONFIG_WIFI_SSID 28 | #define EXAMPLE_WIFI_PASS CONFIG_WIFI_PASSWORD 29 | #define EXAMPLE_SERVER_IP CONFIG_SERVER_IP 30 | #define EXAMPLE_SERVER_PORT CONFIG_SERVER_PORT 31 | #define EXAMPLE_FILENAME CONFIG_EXAMPLE_FILENAME 32 | #define BUFFSIZE 1024 33 | #define TEXT_BUFFSIZE 1024 34 | 35 | static const char *TAG = "ota"; 36 | /*an ota data write buffer ready to write to the flash*/ 37 | static char ota_write_data[BUFFSIZE + 1] = { 0 }; 38 | /*an packet receive buffer*/ 39 | static char text[BUFFSIZE + 1] = { 0 }; 40 | /* an image total length*/ 41 | static int binary_file_length = 0; 42 | /*socket id*/ 43 | static int socket_id = -1; 44 | static char http_request[64] = {0}; 45 | 46 | /* FreeRTOS event group to signal when we are connected & ready to make a request */ 47 | static EventGroupHandle_t wifi_event_group; 48 | 49 | /* The event group allows multiple bits for each event, 50 | but we only care about one event - are we connected 51 | to the AP with an IP? */ 52 | const int CONNECTED_BIT = BIT0; 53 | 54 | static esp_err_t event_handler(void *ctx, system_event_t *event) 55 | { 56 | switch (event->event_id) { 57 | case SYSTEM_EVENT_STA_START: 58 | esp_wifi_connect(); 59 | break; 60 | case SYSTEM_EVENT_STA_GOT_IP: 61 | xEventGroupSetBits(wifi_event_group, CONNECTED_BIT); 62 | break; 63 | case SYSTEM_EVENT_STA_DISCONNECTED: 64 | /* This is a workaround as ESP32 WiFi libs don't currently 65 | auto-reassociate. */ 66 | esp_wifi_connect(); 67 | xEventGroupClearBits(wifi_event_group, CONNECTED_BIT); 68 | break; 69 | default: 70 | break; 71 | } 72 | return ESP_OK; 73 | } 74 | 75 | static void initialise_wifi(void) 76 | { 77 | tcpip_adapter_init(); 78 | wifi_event_group = xEventGroupCreate(); 79 | ESP_ERROR_CHECK( esp_event_loop_init(event_handler, NULL) ); 80 | wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); 81 | ESP_ERROR_CHECK( esp_wifi_init(&cfg) ); 82 | ESP_ERROR_CHECK( esp_wifi_set_storage(WIFI_STORAGE_RAM) ); 83 | wifi_config_t wifi_config = { 84 | .sta = { 85 | .ssid = EXAMPLE_WIFI_SSID, 86 | .password = EXAMPLE_WIFI_PASS, 87 | }, 88 | }; 89 | ESP_LOGI(TAG, "Setting WiFi configuration SSID %s...", wifi_config.sta.ssid); 90 | ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) ); 91 | ESP_ERROR_CHECK( esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) ); 92 | ESP_ERROR_CHECK( esp_wifi_start() ); 93 | } 94 | 95 | /*read buffer by byte still delim ,return read bytes counts*/ 96 | static int read_until(char *buffer, char delim, int len) 97 | { 98 | // /*TODO: delim check,buffer check,further: do an buffer length limited*/ 99 | int i = 0; 100 | while (buffer[i] != delim && i < len) { 101 | ++i; 102 | } 103 | return i + 1; 104 | } 105 | 106 | /* resolve a packet from http socket 107 | * return true if packet including \r\n\r\n that means http packet header finished,start to receive packet body 108 | * otherwise return false 109 | * */ 110 | static bool read_past_http_header(char text[], int total_len, esp_ota_handle_t update_handle) 111 | { 112 | /* i means current position */ 113 | int i = 0, i_read_len = 0; 114 | while (text[i] != 0 && i < total_len) { 115 | i_read_len = read_until(&text[i], '\n', total_len); 116 | // if we resolve \r\n line,we think packet header is finished 117 | if (i_read_len == 2) { 118 | int i_write_len = total_len - (i + 2); 119 | memset(ota_write_data, 0, BUFFSIZE); 120 | /*copy first http packet body to write buffer*/ 121 | memcpy(ota_write_data, &(text[i + 2]), i_write_len); 122 | 123 | esp_err_t err = esp_ota_write( update_handle, (const void *)ota_write_data, i_write_len); 124 | if (err != ESP_OK) { 125 | ESP_LOGE(TAG, "Error: esp_ota_write failed! err=0x%x", err); 126 | return false; 127 | } else { 128 | ESP_LOGI(TAG, "esp_ota_write header OK"); 129 | binary_file_length += i_write_len; 130 | } 131 | return true; 132 | } 133 | i += i_read_len; 134 | } 135 | return false; 136 | } 137 | 138 | static bool connect_to_http_server() 139 | { 140 | ESP_LOGI(TAG, "Server IP: %s Server Port:%s", EXAMPLE_SERVER_IP, EXAMPLE_SERVER_PORT); 141 | sprintf(http_request, "GET %s HTTP/1.1\r\nHost: %s:%s \r\n\r\n", EXAMPLE_FILENAME, EXAMPLE_SERVER_IP, EXAMPLE_SERVER_PORT); 142 | 143 | int http_connect_flag = -1; 144 | struct sockaddr_in sock_info; 145 | 146 | socket_id = socket(AF_INET, SOCK_STREAM, 0); 147 | if (socket_id == -1) { 148 | ESP_LOGE(TAG, "Create socket failed!"); 149 | return false; 150 | } 151 | 152 | // set connect info 153 | memset(&sock_info, 0, sizeof(struct sockaddr_in)); 154 | sock_info.sin_family = AF_INET; 155 | sock_info.sin_addr.s_addr = inet_addr(EXAMPLE_SERVER_IP); 156 | sock_info.sin_port = htons(atoi(EXAMPLE_SERVER_PORT)); 157 | 158 | // connect to http server 159 | http_connect_flag = connect(socket_id, (struct sockaddr *)&sock_info, sizeof(sock_info)); 160 | if (http_connect_flag == -1) { 161 | ESP_LOGE(TAG, "Connect to server failed! errno=%d", errno); 162 | close(socket_id); 163 | return false; 164 | } else { 165 | ESP_LOGI(TAG, "Connected to server"); 166 | return true; 167 | } 168 | return false; 169 | } 170 | 171 | static void __attribute__((noreturn)) task_fatal_error() 172 | { 173 | ESP_LOGE(TAG, "Exiting task due to fatal error..."); 174 | close(socket_id); 175 | (void)vTaskDelete(NULL); 176 | 177 | while (1) { 178 | ; 179 | } 180 | } 181 | 182 | static void ota_example_task(void *pvParameter) 183 | { 184 | esp_err_t err; 185 | /* update handle : set by esp_ota_begin(), must be freed via esp_ota_end() */ 186 | esp_ota_handle_t update_handle = 0 ; 187 | const esp_partition_t *update_partition = NULL; 188 | 189 | ESP_LOGI(TAG, "Starting OTA example..."); 190 | 191 | const esp_partition_t *configured = esp_ota_get_boot_partition(); 192 | const esp_partition_t *running = esp_ota_get_running_partition(); 193 | 194 | assert(configured == running); /* fresh from reset, should be running from configured boot partition */ 195 | ESP_LOGI(TAG, "Running partition type %d subtype %d (offset 0x%08x)", 196 | configured->type, configured->subtype, configured->address); 197 | 198 | /* Wait for the callback to set the CONNECTED_BIT in the 199 | event group. 200 | */ 201 | xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT, 202 | false, true, portMAX_DELAY); 203 | ESP_LOGI(TAG, "Connect to Wifi ! Start to Connect to Server...."); 204 | 205 | /*connect to http server*/ 206 | if (connect_to_http_server()) { 207 | ESP_LOGI(TAG, "Connected to http server"); 208 | } else { 209 | ESP_LOGE(TAG, "Connect to http server failed!"); 210 | task_fatal_error(); 211 | } 212 | 213 | int res = -1; 214 | /*send GET request to http server*/ 215 | res = send(socket_id, http_request, strlen(http_request), 0); 216 | if (res == -1) { 217 | ESP_LOGE(TAG, "Send GET request to server failed"); 218 | task_fatal_error(); 219 | } else { 220 | ESP_LOGI(TAG, "Send GET request to server succeeded"); 221 | } 222 | 223 | update_partition = esp_ota_get_next_update_partition(NULL); 224 | ESP_LOGI(TAG, "Writing to partition subtype %d at offset 0x%x", 225 | update_partition->subtype, update_partition->address); 226 | assert(update_partition != NULL); 227 | 228 | err = esp_ota_begin(update_partition, OTA_SIZE_UNKNOWN, &update_handle); 229 | if (err != ESP_OK) { 230 | ESP_LOGE(TAG, "esp_ota_begin failed, error=%d", err); 231 | task_fatal_error(); 232 | } 233 | ESP_LOGI(TAG, "esp_ota_begin succeeded"); 234 | 235 | bool resp_body_start = false, flag = true; 236 | /*deal with all receive packet*/ 237 | while (flag) { 238 | memset(text, 0, TEXT_BUFFSIZE); 239 | memset(ota_write_data, 0, BUFFSIZE); 240 | int buff_len = recv(socket_id, text, TEXT_BUFFSIZE, 0); 241 | if (buff_len < 0) { /*receive error*/ 242 | ESP_LOGE(TAG, "Error: receive data error! errno=%d", errno); 243 | task_fatal_error(); 244 | } else if (buff_len > 0 && !resp_body_start) { /*deal with response header*/ 245 | memcpy(ota_write_data, text, buff_len); 246 | resp_body_start = read_past_http_header(text, buff_len, update_handle); 247 | } else if (buff_len > 0 && resp_body_start) { /*deal with response body*/ 248 | memcpy(ota_write_data, text, buff_len); 249 | err = esp_ota_write( update_handle, (const void *)ota_write_data, buff_len); 250 | if (err != ESP_OK) { 251 | ESP_LOGE(TAG, "Error: esp_ota_write failed! err=0x%x", err); 252 | task_fatal_error(); 253 | } 254 | binary_file_length += buff_len; 255 | ESP_LOGI(TAG, "Have written image length %d", binary_file_length); 256 | } else if (buff_len == 0) { /*packet over*/ 257 | flag = false; 258 | ESP_LOGI(TAG, "Connection closed, all packets received"); 259 | close(socket_id); 260 | } else { 261 | ESP_LOGE(TAG, "Unexpected recv result"); 262 | } 263 | } 264 | 265 | ESP_LOGI(TAG, "Total Write binary data length : %d", binary_file_length); 266 | 267 | if (esp_ota_end(update_handle) != ESP_OK) { 268 | ESP_LOGE(TAG, "esp_ota_end failed!"); 269 | task_fatal_error(); 270 | } 271 | err = esp_ota_set_boot_partition(update_partition); 272 | if (err != ESP_OK) { 273 | ESP_LOGE(TAG, "esp_ota_set_boot_partition failed! err=0x%x", err); 274 | task_fatal_error(); 275 | } 276 | ESP_LOGI(TAG, "Prepare to restart system!"); 277 | esp_restart(); 278 | return ; 279 | } 280 | 281 | void app_main() 282 | { 283 | // Initialize NVS. 284 | esp_err_t err = nvs_flash_init(); 285 | if (err == ESP_ERR_NVS_NO_FREE_PAGES) { 286 | // OTA app partition table has a smaller NVS partition size than the non-OTA 287 | // partition table. This size mismatch may cause NVS initialization to fail. 288 | // If this happens, we erase NVS partition and initialize NVS again. 289 | const esp_partition_t* nvs_partition = esp_partition_find_first( 290 | ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_DATA_NVS, NULL); 291 | assert(nvs_partition && "partition table must have an NVS partition"); 292 | ESP_ERROR_CHECK( esp_partition_erase_range(nvs_partition, 0, nvs_partition->size) ); 293 | err = nvs_flash_init(); 294 | } 295 | ESP_ERROR_CHECK( err ); 296 | 297 | initialise_wifi(); 298 | xTaskCreate(&ota_example_task, "ota_example_task", 8192, NULL, 5, NULL); 299 | } 300 | -------------------------------------------------------------------------------- /ota/sdkconfig: -------------------------------------------------------------------------------- 1 | # 2 | # Automatically generated file; DO NOT EDIT. 3 | # Espressif IoT Development Framework Configuration 4 | # 5 | 6 | # 7 | # SDK tool configuration 8 | # 9 | CONFIG_TOOLPREFIX="xtensa-esp32-elf-" 10 | CONFIG_PYTHON="python" 11 | 12 | # 13 | # Bootloader config 14 | # 15 | # CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set 16 | # CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set 17 | # CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set 18 | CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y 19 | # CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set 20 | # CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set 21 | CONFIG_LOG_BOOTLOADER_LEVEL=3 22 | 23 | # 24 | # Security features 25 | # 26 | # CONFIG_SECURE_BOOT_ENABLED is not set 27 | # CONFIG_FLASH_ENCRYPTION_ENABLED is not set 28 | 29 | # 30 | # Serial flasher config 31 | # 32 | CONFIG_ESPTOOLPY_PORT="/dev/ttyUSB0" 33 | CONFIG_ESPTOOLPY_BAUD_115200B=y 34 | # CONFIG_ESPTOOLPY_BAUD_230400B is not set 35 | # CONFIG_ESPTOOLPY_BAUD_921600B is not set 36 | # CONFIG_ESPTOOLPY_BAUD_2MB is not set 37 | # CONFIG_ESPTOOLPY_BAUD_OTHER is not set 38 | CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=115200 39 | CONFIG_ESPTOOLPY_BAUD=115200 40 | CONFIG_ESPTOOLPY_COMPRESSED=y 41 | # CONFIG_FLASHMODE_QIO is not set 42 | # CONFIG_FLASHMODE_QOUT is not set 43 | CONFIG_FLASHMODE_DIO=y 44 | # CONFIG_FLASHMODE_DOUT is not set 45 | CONFIG_ESPTOOLPY_FLASHMODE="dio" 46 | # CONFIG_ESPTOOLPY_FLASHFREQ_80M is not set 47 | CONFIG_ESPTOOLPY_FLASHFREQ_40M=y 48 | # CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set 49 | # CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set 50 | CONFIG_ESPTOOLPY_FLASHFREQ="40m" 51 | # CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set 52 | # CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set 53 | CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y 54 | # CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set 55 | # CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set 56 | CONFIG_ESPTOOLPY_FLASHSIZE="4MB" 57 | CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y 58 | CONFIG_ESPTOOLPY_BEFORE_RESET=y 59 | # CONFIG_ESPTOOLPY_BEFORE_NORESET is not set 60 | CONFIG_ESPTOOLPY_BEFORE="default_reset" 61 | CONFIG_ESPTOOLPY_AFTER_RESET=y 62 | # CONFIG_ESPTOOLPY_AFTER_NORESET is not set 63 | CONFIG_ESPTOOLPY_AFTER="hard_reset" 64 | # CONFIG_MONITOR_BAUD_9600B is not set 65 | # CONFIG_MONITOR_BAUD_57600B is not set 66 | CONFIG_MONITOR_BAUD_115200B=y 67 | # CONFIG_MONITOR_BAUD_230400B is not set 68 | # CONFIG_MONITOR_BAUD_921600B is not set 69 | # CONFIG_MONITOR_BAUD_2MB is not set 70 | # CONFIG_MONITOR_BAUD_OTHER is not set 71 | CONFIG_MONITOR_BAUD_OTHER_VAL=115200 72 | CONFIG_MONITOR_BAUD=115200 73 | 74 | # 75 | # Partition Table 76 | # 77 | # CONFIG_PARTITION_TABLE_SINGLE_APP is not set 78 | CONFIG_PARTITION_TABLE_TWO_OTA=y 79 | # CONFIG_PARTITION_TABLE_CUSTOM is not set 80 | CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" 81 | CONFIG_PARTITION_TABLE_CUSTOM_APP_BIN_OFFSET=0x10000 82 | CONFIG_PARTITION_TABLE_FILENAME="partitions_two_ota.csv" 83 | CONFIG_APP_OFFSET=0x10000 84 | 85 | # 86 | # Example Configuration 87 | # 88 | CONFIG_WIFI_SSID="Tenda_03E1F8" 89 | CONFIG_WIFI_PASSWORD="magtop12" 90 | CONFIG_SERVER_IP="192.168.0.107" 91 | CONFIG_SERVER_PORT="8070" 92 | CONFIG_EXAMPLE_FILENAME="/hello-world.bin" 93 | CONFIG_OPTIMIZATION_LEVEL_DEBUG=y 94 | # CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set 95 | 96 | # 97 | # Component config 98 | # 99 | # CONFIG_AWS_IOT_SDK is not set 100 | # CONFIG_BT_ENABLED is not set 101 | CONFIG_BT_RESERVE_DRAM=0 102 | 103 | # 104 | # ESP32-specific 105 | # 106 | # CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set 107 | CONFIG_ESP32_DEFAULT_CPU_FREQ_160=y 108 | # CONFIG_ESP32_DEFAULT_CPU_FREQ_240 is not set 109 | CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=160 110 | CONFIG_MEMMAP_SMP=y 111 | # CONFIG_MEMMAP_TRACEMEM is not set 112 | # CONFIG_MEMMAP_TRACEMEM_TWOBANKS is not set 113 | # CONFIG_ESP32_TRAX is not set 114 | CONFIG_TRACEMEM_RESERVE_DRAM=0x0 115 | # CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set 116 | # CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set 117 | CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y 118 | # CONFIG_ESP32_ENABLE_COREDUMP is not set 119 | # CONFIG_ESP32_APPTRACE_DEST_TRAX is not set 120 | # CONFIG_ESP32_APPTRACE_DEST_UART is not set 121 | CONFIG_ESP32_APPTRACE_DEST_NONE=y 122 | # CONFIG_ESP32_APPTRACE_ENABLE is not set 123 | CONFIG_BASE_MAC_STORED_DEFAULT_EFUSE=y 124 | # CONFIG_BASE_MAC_STORED_CUSTOMER_DEFINED_EFUSE is not set 125 | # CONFIG_BASE_MAC_STORED_OTHER_CUSTOMER_DEFINED_PLACE is not set 126 | # CONFIG_TWO_MAC_ADDRESS_FROM_EFUSE is not set 127 | CONFIG_FOUR_MAC_ADDRESS_FROM_EFUSE=y 128 | CONFIG_NUMBER_OF_MAC_ADDRESS_GENERATED_FROM_EFUSE=4 129 | CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 130 | CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=4096 131 | CONFIG_MAIN_TASK_STACK_SIZE=4096 132 | CONFIG_NEWLIB_STDOUT_ADDCR=y 133 | # CONFIG_NEWLIB_NANO_FORMAT is not set 134 | CONFIG_CONSOLE_UART_DEFAULT=y 135 | # CONFIG_CONSOLE_UART_CUSTOM is not set 136 | # CONFIG_CONSOLE_UART_NONE is not set 137 | CONFIG_CONSOLE_UART_NUM=0 138 | CONFIG_CONSOLE_UART_BAUDRATE=115200 139 | # CONFIG_ULP_COPROC_ENABLED is not set 140 | CONFIG_ULP_COPROC_RESERVE_MEM=0 141 | # CONFIG_ESP32_PANIC_PRINT_HALT is not set 142 | CONFIG_ESP32_PANIC_PRINT_REBOOT=y 143 | # CONFIG_ESP32_PANIC_SILENT_REBOOT is not set 144 | # CONFIG_ESP32_PANIC_GDBSTUB is not set 145 | CONFIG_ESP32_DEBUG_OCDAWARE=y 146 | CONFIG_INT_WDT=y 147 | CONFIG_INT_WDT_TIMEOUT_MS=300 148 | CONFIG_INT_WDT_CHECK_CPU1=y 149 | CONFIG_TASK_WDT=y 150 | # CONFIG_TASK_WDT_PANIC is not set 151 | CONFIG_TASK_WDT_TIMEOUT_S=5 152 | CONFIG_TASK_WDT_CHECK_IDLE_TASK=y 153 | CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y 154 | # CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set 155 | CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y 156 | # CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set 157 | # CONFIG_ESP32_TIME_SYSCALL_USE_NONE is not set 158 | CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y 159 | # CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL is not set 160 | CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 161 | CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=0 162 | # CONFIG_ESP32_XTAL_FREQ_40 is not set 163 | # CONFIG_ESP32_XTAL_FREQ_26 is not set 164 | CONFIG_ESP32_XTAL_FREQ_AUTO=y 165 | CONFIG_ESP32_XTAL_FREQ=0 166 | CONFIG_WIFI_ENABLED=y 167 | CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 168 | CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=64 169 | # CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set 170 | CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y 171 | CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 172 | CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32 173 | CONFIG_ESP32_WIFI_AMPDU_ENABLED=y 174 | CONFIG_ESP32_WIFI_NVS_ENABLED=y 175 | CONFIG_PHY_ENABLED=y 176 | 177 | # 178 | # PHY 179 | # 180 | CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y 181 | # CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set 182 | CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 183 | CONFIG_ESP32_PHY_MAX_TX_POWER=20 184 | # CONFIG_ETHERNET is not set 185 | 186 | # 187 | # FAT Filesystem support 188 | # 189 | CONFIG_FATFS_CODEPAGE_ASCII=y 190 | # CONFIG_FATFS_CODEPAGE_437 is not set 191 | # CONFIG_FATFS_CODEPAGE_720 is not set 192 | # CONFIG_FATFS_CODEPAGE_737 is not set 193 | # CONFIG_FATFS_CODEPAGE_771 is not set 194 | # CONFIG_FATFS_CODEPAGE_775 is not set 195 | # CONFIG_FATFS_CODEPAGE_850 is not set 196 | # CONFIG_FATFS_CODEPAGE_852 is not set 197 | # CONFIG_FATFS_CODEPAGE_855 is not set 198 | # CONFIG_FATFS_CODEPAGE_857 is not set 199 | # CONFIG_FATFS_CODEPAGE_860 is not set 200 | # CONFIG_FATFS_CODEPAGE_861 is not set 201 | # CONFIG_FATFS_CODEPAGE_862 is not set 202 | # CONFIG_FATFS_CODEPAGE_863 is not set 203 | # CONFIG_FATFS_CODEPAGE_864 is not set 204 | # CONFIG_FATFS_CODEPAGE_865 is not set 205 | # CONFIG_FATFS_CODEPAGE_866 is not set 206 | # CONFIG_FATFS_CODEPAGE_869 is not set 207 | # CONFIG_FATFS_CODEPAGE_932 is not set 208 | # CONFIG_FATFS_CODEPAGE_936 is not set 209 | # CONFIG_FATFS_CODEPAGE_949 is not set 210 | # CONFIG_FATFS_CODEPAGE_950 is not set 211 | CONFIG_FATFS_CODEPAGE=1 212 | CONFIG_FATFS_MAX_LFN=255 213 | 214 | # 215 | # FreeRTOS 216 | # 217 | # CONFIG_FREERTOS_UNICORE is not set 218 | CONFIG_FREERTOS_CORETIMER_0=y 219 | # CONFIG_FREERTOS_CORETIMER_1 is not set 220 | CONFIG_FREERTOS_HZ=100 221 | CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION=y 222 | # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set 223 | # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set 224 | CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y 225 | # CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set 226 | CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 227 | CONFIG_FREERTOS_ASSERT_FAIL_ABORT=y 228 | # CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE is not set 229 | # CONFIG_FREERTOS_ASSERT_DISABLE is not set 230 | CONFIG_FREERTOS_BREAK_ON_SCHEDULER_START_JTAG=y 231 | # CONFIG_ENABLE_MEMORY_DEBUG is not set 232 | CONFIG_FREERTOS_ISR_STACKSIZE=1536 233 | # CONFIG_FREERTOS_LEGACY_HOOKS is not set 234 | CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 235 | # CONFIG_SUPPORT_STATIC_ALLOCATION is not set 236 | CONFIG_TIMER_TASK_PRIORITY=1 237 | CONFIG_TIMER_TASK_STACK_DEPTH=2048 238 | CONFIG_TIMER_QUEUE_LENGTH=10 239 | # CONFIG_FREERTOS_DEBUG_INTERNALS is not set 240 | 241 | # 242 | # Log output 243 | # 244 | # CONFIG_LOG_DEFAULT_LEVEL_NONE is not set 245 | # CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set 246 | # CONFIG_LOG_DEFAULT_LEVEL_WARN is not set 247 | CONFIG_LOG_DEFAULT_LEVEL_INFO=y 248 | # CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set 249 | # CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set 250 | CONFIG_LOG_DEFAULT_LEVEL=3 251 | CONFIG_LOG_COLORS=y 252 | 253 | # 254 | # LWIP 255 | # 256 | # CONFIG_L2_TO_L3_COPY is not set 257 | CONFIG_LWIP_MAX_SOCKETS=10 258 | CONFIG_LWIP_THREAD_LOCAL_STORAGE_INDEX=0 259 | # CONFIG_LWIP_SO_REUSE is not set 260 | # CONFIG_LWIP_SO_RCVBUF is not set 261 | CONFIG_LWIP_DHCP_MAX_NTP_SERVERS=1 262 | # CONFIG_LWIP_IP_FRAG is not set 263 | # CONFIG_LWIP_IP_REASSEMBLY is not set 264 | CONFIG_TCP_MAXRTX=12 265 | CONFIG_TCP_SYNMAXRTX=6 266 | CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y 267 | CONFIG_TCPIP_TASK_STACK_SIZE=2560 268 | # CONFIG_PPP_SUPPORT is not set 269 | 270 | # 271 | # mbedTLS 272 | # 273 | CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=16384 274 | # CONFIG_MBEDTLS_DEBUG is not set 275 | CONFIG_MBEDTLS_HARDWARE_AES=y 276 | CONFIG_MBEDTLS_HARDWARE_MPI=y 277 | CONFIG_MBEDTLS_MPI_USE_INTERRUPT=y 278 | CONFIG_MBEDTLS_HARDWARE_SHA=y 279 | CONFIG_MBEDTLS_HAVE_TIME=y 280 | # CONFIG_MBEDTLS_HAVE_TIME_DATE is not set 281 | 282 | # 283 | # OpenSSL 284 | # 285 | # CONFIG_OPENSSL_DEBUG is not set 286 | CONFIG_OPENSSL_ASSERT_DO_NOTHING=y 287 | # CONFIG_OPENSSL_ASSERT_EXIT is not set 288 | 289 | # 290 | # SPI Flash driver 291 | # 292 | # CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set 293 | CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y 294 | -------------------------------------------------------------------------------- /ota/sdkconfig.defaults: -------------------------------------------------------------------------------- 1 | # Default sdkconfig parameters to use the OTA 2 | # partition table layout, with a 4MB flash size 3 | CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y 4 | CONFIG_PARTITION_TABLE_TWO_OTA=y 5 | -------------------------------------------------------------------------------- /smart_config/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # This is a project Makefile. It is assumed the directory this Makefile resides in is a 3 | # project subdirectory. 4 | # 5 | 6 | PROJECT_NAME := smartconfig-demo 7 | 8 | include $(IDF_PATH)/make/project.mk 9 | 10 | -------------------------------------------------------------------------------- /smart_config/README.md: -------------------------------------------------------------------------------- 1 | # 用微信/APP 给你的 ESP32 智能配网 2 | 3 | 功能说明:当 ESP32 作为 STA 或者 APSTA 时,用微信/APP 给它智能配网,让其连接到 WiFi 热点,且不需要蓝牙。 4 | 5 | ## 快速开始 6 | 7 | ### 假设 8 | 9 | - 你已经安装好 ESP-IDF 和工具链。 10 | - 你已经有一个 WiFi 热点。 11 | 12 | ### 步骤 13 | 14 | - 使用数据线将开发板连接到你的系统中,让系统能够识别到你的板子(Windows 是`COM\*`, Linux 是`/dev/ttyUSB\*`)。 15 | - 进入`smart_config`所在目录。 16 | - 执行命名`make menuconfig`进行配置。 17 | - 对串口进行配置。 18 | - 执行命令`make`进行编译 19 | - 执行命令`make flash monitor`将编译生成的镜像烧写到 ESP32 开发板上面,并查看串口输出。 20 | - 用手机进行配置(以下两种方式二选一即可) 21 | - 打开 APP [IoT_Espressif_EspTouch](http://espressif.com/zh-hans/support/download/apks?keys=&field_technology_tid%5B%5D=20),它会自动识别到手机当前所连接的热点的 SSID,我们只需要输入 Password,然后点击`Confirm`开始配网。 22 | - 用微信扫描下面的二维码,点击按钮 '配置设备上网',然后输入手机当前所连接的热点的 Password,然后点击`连接`开始配网。 23 | 24 | ![](./img/wechat.jpg) 25 | 26 | ### 现象 27 | 28 | ![](./img/log.jpg) 29 | 30 | ## 深入理解 31 | 32 | 参考博客: 33 | 34 | -------------------------------------------------------------------------------- /smart_config/img/log.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunhuajiang/esp32-projects/de21cb9e0702eb730c6a53b9843f83b9ce0f58e9/smart_config/img/log.jpg -------------------------------------------------------------------------------- /smart_config/img/wechat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunhuajiang/esp32-projects/de21cb9e0702eb730c6a53b9843f83b9ce0f58e9/smart_config/img/wechat.jpg -------------------------------------------------------------------------------- /smart_config/main/app_main.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include "freertos/FreeRTOS.h" 5 | #include "freertos/task.h" 6 | #include "freertos/event_groups.h" 7 | #include "esp_wifi.h" 8 | #include "esp_log.h" 9 | #include "esp_event_loop.h" 10 | #include "esp_smartconfig.h" 11 | #include "esp_system.h" 12 | #include "nvs_flash.h" 13 | 14 | #define TAG "app_main" 15 | #define LINKED_BIT (BIT0) 16 | #define CONNECTED_BIT (BIT1) 17 | 18 | static EventGroupHandle_t smartconfig_event_group = NULL; 19 | 20 | 21 | esp_err_t wifi_event_handler(void *ctx, system_event_t *event) 22 | { 23 | switch(event->event_id) { 24 | case SYSTEM_EVENT_STA_START: 25 | xEventGroupWaitBits(smartconfig_event_group, LINKED_BIT, false, true, portMAX_DELAY); 26 | esp_wifi_connect(); 27 | break; 28 | case SYSTEM_EVENT_STA_GOT_IP: 29 | break; 30 | case SYSTEM_EVENT_STA_DISCONNECTED: 31 | /* This is a workaround as ESP32 WiFi libs don't currently 32 | auto-reassociate. */ 33 | esp_wifi_connect(); 34 | xEventGroupClearBits(smartconfig_event_group, CONNECTED_BIT); 35 | break; 36 | default: 37 | break; 38 | } 39 | return ESP_OK; 40 | } 41 | 42 | void smartconfig_handler(smartconfig_status_t status, void *pdata) 43 | { 44 | switch (status) { 45 | case SC_STATUS_WAIT: 46 | ESP_LOGI(TAG, "SC_STATUS_WAIT"); 47 | break; 48 | case SC_STATUS_FIND_CHANNEL: 49 | ESP_LOGI(TAG, "SC_STATUS_FIND_CHANNEL"); 50 | break; 51 | case SC_STATUS_GETTING_SSID_PSWD: 52 | ESP_LOGI(TAG, "SC_STATUS_GETTING_SSID_PSWD"); 53 | smartconfig_type_t *type = pdata; 54 | if (*type == SC_TYPE_ESPTOUCH) { 55 | ESP_LOGI(TAG, "SC_TYPE:SC_TYPE_ESPTOUCH"); 56 | } else { 57 | ESP_LOGI(TAG, "SC_TYPE:SC_TYPE_AIRKISS"); 58 | } 59 | break; 60 | case SC_STATUS_LINK: 61 | ESP_LOGI(TAG, "SC_STATUS_LINK"); 62 | wifi_config_t wifi_config; 63 | wifi_config.sta = *((wifi_sta_config_t *)pdata); 64 | esp_wifi_set_config(WIFI_IF_STA, &wifi_config); 65 | 66 | esp_wifi_disconnect(); 67 | xEventGroupSetBits(smartconfig_event_group, LINKED_BIT); 68 | //esp_wifi_connect(); 69 | break; 70 | case SC_STATUS_LINK_OVER: 71 | ESP_LOGI(TAG, "SC_STATUS_LINK_OVER"); 72 | if (pdata != NULL) { 73 | uint8_t phone_ip[4] = { 0 }; 74 | 75 | memcpy(phone_ip, (uint8_t *) pdata, 4); 76 | ESP_LOGI(TAG, "Phone ip: %d.%d.%d.%d", phone_ip[0], 77 | phone_ip[1], phone_ip[2], phone_ip[3]); 78 | } 79 | esp_smartconfig_stop(); 80 | xEventGroupSetBits(smartconfig_event_group, CONNECTED_BIT); 81 | break; 82 | } 83 | 84 | } 85 | 86 | 87 | void init_wifi(void) 88 | { 89 | tcpip_adapter_init(); 90 | ESP_ERROR_CHECK(esp_event_loop_init(wifi_event_handler, NULL)); 91 | wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); 92 | ESP_ERROR_CHECK(esp_wifi_init(&cfg)); 93 | ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); 94 | ESP_ERROR_CHECK(esp_wifi_start()); 95 | } 96 | 97 | void app_main() 98 | { 99 | smartconfig_event_group = xEventGroupCreate(); 100 | 101 | init_wifi(); 102 | 103 | ESP_ERROR_CHECK(esp_smartconfig_set_type(SC_TYPE_ESPTOUCH_AIRKISS)); 104 | ESP_ERROR_CHECK(esp_smartconfig_start(smartconfig_handler)); 105 | 106 | xEventGroupWaitBits(smartconfig_event_group, CONNECTED_BIT, false, true, portMAX_DELAY); 107 | 108 | ESP_LOGI(TAG, "Smart Config Done!") 109 | } 110 | -------------------------------------------------------------------------------- /smart_config/main/component.mk: -------------------------------------------------------------------------------- 1 | # 2 | # Main Makefile. This is basically the same as a component makefile. 3 | # 4 | # This Makefile should, at the very least, just include $(SDK_PATH)/make/component_common.mk. By default, 5 | # this will take the sources in the src/ directory, compile them and link them into 6 | # lib(subdirectory_name).a in the build directory. This behaviour is entirely configurable, 7 | # please read the ESP-IDF documents if you need to do this. 8 | # 9 | -------------------------------------------------------------------------------- /smart_config/sdkconfig: -------------------------------------------------------------------------------- 1 | # 2 | # Automatically generated file; DO NOT EDIT. 3 | # Espressif IoT Development Framework Configuration 4 | # 5 | 6 | # 7 | # SDK tool configuration 8 | # 9 | CONFIG_TOOLPREFIX="xtensa-esp32-elf-" 10 | CONFIG_PYTHON="python" 11 | 12 | # 13 | # Bootloader config 14 | # 15 | # CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set 16 | # CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set 17 | CONFIG_LOG_BOOTLOADER_LEVEL_WARN=y 18 | # CONFIG_LOG_BOOTLOADER_LEVEL_INFO is not set 19 | # CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set 20 | # CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set 21 | CONFIG_LOG_BOOTLOADER_LEVEL=2 22 | 23 | # 24 | # Security features 25 | # 26 | # CONFIG_SECURE_BOOT_ENABLED is not set 27 | # CONFIG_FLASH_ENCRYPTION_ENABLED is not set 28 | 29 | # 30 | # Serial flasher config 31 | # 32 | CONFIG_ESPTOOLPY_PORT="/dev/ttyUSB0" 33 | CONFIG_ESPTOOLPY_BAUD_115200B=y 34 | # CONFIG_ESPTOOLPY_BAUD_230400B is not set 35 | # CONFIG_ESPTOOLPY_BAUD_921600B is not set 36 | # CONFIG_ESPTOOLPY_BAUD_2MB is not set 37 | # CONFIG_ESPTOOLPY_BAUD_OTHER is not set 38 | CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=115200 39 | CONFIG_ESPTOOLPY_BAUD=115200 40 | # CONFIG_ESPTOOLPY_COMPRESSED is not set 41 | # CONFIG_FLASHMODE_QIO is not set 42 | # CONFIG_FLASHMODE_QOUT is not set 43 | CONFIG_FLASHMODE_DIO=y 44 | # CONFIG_FLASHMODE_DOUT is not set 45 | CONFIG_ESPTOOLPY_FLASHMODE="dio" 46 | # CONFIG_ESPTOOLPY_FLASHFREQ_80M is not set 47 | CONFIG_ESPTOOLPY_FLASHFREQ_40M=y 48 | # CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set 49 | # CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set 50 | CONFIG_ESPTOOLPY_FLASHFREQ="40m" 51 | # CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set 52 | # CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set 53 | # CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set 54 | CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y 55 | # CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set 56 | CONFIG_ESPTOOLPY_FLASHSIZE="8MB" 57 | CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y 58 | CONFIG_ESPTOOLPY_BEFORE_RESET=y 59 | # CONFIG_ESPTOOLPY_BEFORE_NORESET is not set 60 | CONFIG_ESPTOOLPY_BEFORE="default_reset" 61 | CONFIG_ESPTOOLPY_AFTER_RESET=y 62 | # CONFIG_ESPTOOLPY_AFTER_NORESET is not set 63 | CONFIG_ESPTOOLPY_AFTER="hard_reset" 64 | # CONFIG_MONITOR_BAUD_9600B is not set 65 | # CONFIG_MONITOR_BAUD_57600B is not set 66 | CONFIG_MONITOR_BAUD_115200B=y 67 | # CONFIG_MONITOR_BAUD_230400B is not set 68 | # CONFIG_MONITOR_BAUD_921600B is not set 69 | # CONFIG_MONITOR_BAUD_2MB is not set 70 | # CONFIG_MONITOR_BAUD_OTHER is not set 71 | CONFIG_MONITOR_BAUD_OTHER_VAL=115200 72 | CONFIG_MONITOR_BAUD=115200 73 | 74 | # 75 | # Partition Table 76 | # 77 | CONFIG_PARTITION_TABLE_SINGLE_APP=y 78 | # CONFIG_PARTITION_TABLE_TWO_OTA is not set 79 | # CONFIG_PARTITION_TABLE_CUSTOM is not set 80 | CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" 81 | CONFIG_PARTITION_TABLE_CUSTOM_APP_BIN_OFFSET=0x10000 82 | CONFIG_PARTITION_TABLE_FILENAME="partitions_singleapp.csv" 83 | CONFIG_APP_OFFSET=0x10000 84 | CONFIG_OPTIMIZATION_LEVEL_DEBUG=y 85 | # CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set 86 | 87 | # 88 | # Component config 89 | # 90 | # CONFIG_AWS_IOT_SDK is not set 91 | # CONFIG_BT_ENABLED is not set 92 | CONFIG_BT_RESERVE_DRAM=0 93 | 94 | # 95 | # ESP32-specific 96 | # 97 | # CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set 98 | # CONFIG_ESP32_DEFAULT_CPU_FREQ_160 is not set 99 | CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y 100 | CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240 101 | CONFIG_MEMMAP_SMP=y 102 | # CONFIG_MEMMAP_TRACEMEM is not set 103 | # CONFIG_MEMMAP_TRACEMEM_TWOBANKS is not set 104 | # CONFIG_ESP32_TRAX is not set 105 | CONFIG_TRACEMEM_RESERVE_DRAM=0x0 106 | # CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set 107 | # CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set 108 | CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y 109 | # CONFIG_ESP32_ENABLE_COREDUMP is not set 110 | # CONFIG_ESP32_APPTRACE_DEST_TRAX is not set 111 | # CONFIG_ESP32_APPTRACE_DEST_UART is not set 112 | CONFIG_ESP32_APPTRACE_DEST_NONE=y 113 | # CONFIG_ESP32_APPTRACE_ENABLE is not set 114 | CONFIG_BASE_MAC_STORED_DEFAULT_EFUSE=y 115 | # CONFIG_BASE_MAC_STORED_CUSTOMER_DEFINED_EFUSE is not set 116 | # CONFIG_BASE_MAC_STORED_OTHER_CUSTOMER_DEFINED_PLACE is not set 117 | # CONFIG_TWO_MAC_ADDRESS_FROM_EFUSE is not set 118 | CONFIG_FOUR_MAC_ADDRESS_FROM_EFUSE=y 119 | CONFIG_NUMBER_OF_MAC_ADDRESS_GENERATED_FROM_EFUSE=4 120 | CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 121 | CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2048 122 | CONFIG_MAIN_TASK_STACK_SIZE=4096 123 | CONFIG_NEWLIB_STDOUT_ADDCR=y 124 | # CONFIG_NEWLIB_NANO_FORMAT is not set 125 | CONFIG_CONSOLE_UART_DEFAULT=y 126 | # CONFIG_CONSOLE_UART_CUSTOM is not set 127 | # CONFIG_CONSOLE_UART_NONE is not set 128 | CONFIG_CONSOLE_UART_NUM=0 129 | CONFIG_CONSOLE_UART_BAUDRATE=115200 130 | # CONFIG_ULP_COPROC_ENABLED is not set 131 | CONFIG_ULP_COPROC_RESERVE_MEM=0 132 | # CONFIG_ESP32_PANIC_PRINT_HALT is not set 133 | CONFIG_ESP32_PANIC_PRINT_REBOOT=y 134 | # CONFIG_ESP32_PANIC_SILENT_REBOOT is not set 135 | # CONFIG_ESP32_PANIC_GDBSTUB is not set 136 | CONFIG_ESP32_DEBUG_OCDAWARE=y 137 | CONFIG_INT_WDT=y 138 | CONFIG_INT_WDT_TIMEOUT_MS=300 139 | CONFIG_TASK_WDT=y 140 | # CONFIG_TASK_WDT_PANIC is not set 141 | CONFIG_TASK_WDT_TIMEOUT_S=5 142 | CONFIG_TASK_WDT_CHECK_IDLE_TASK=y 143 | # CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set 144 | CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y 145 | # CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set 146 | # CONFIG_ESP32_TIME_SYSCALL_USE_NONE is not set 147 | CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y 148 | # CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL is not set 149 | CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 150 | CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=0 151 | # CONFIG_ESP32_XTAL_FREQ_40 is not set 152 | # CONFIG_ESP32_XTAL_FREQ_26 is not set 153 | CONFIG_ESP32_XTAL_FREQ_AUTO=y 154 | CONFIG_ESP32_XTAL_FREQ=0 155 | CONFIG_WIFI_ENABLED=y 156 | CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 157 | CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=64 158 | # CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set 159 | CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y 160 | CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 161 | CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32 162 | CONFIG_ESP32_WIFI_AMPDU_ENABLED=y 163 | CONFIG_ESP32_WIFI_NVS_ENABLED=y 164 | CONFIG_PHY_ENABLED=y 165 | 166 | # 167 | # PHY 168 | # 169 | CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y 170 | # CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set 171 | CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 172 | CONFIG_ESP32_PHY_MAX_TX_POWER=20 173 | # CONFIG_ETHERNET is not set 174 | 175 | # 176 | # FAT Filesystem support 177 | # 178 | CONFIG_FATFS_CODEPAGE_ASCII=y 179 | # CONFIG_FATFS_CODEPAGE_437 is not set 180 | # CONFIG_FATFS_CODEPAGE_720 is not set 181 | # CONFIG_FATFS_CODEPAGE_737 is not set 182 | # CONFIG_FATFS_CODEPAGE_771 is not set 183 | # CONFIG_FATFS_CODEPAGE_775 is not set 184 | # CONFIG_FATFS_CODEPAGE_850 is not set 185 | # CONFIG_FATFS_CODEPAGE_852 is not set 186 | # CONFIG_FATFS_CODEPAGE_855 is not set 187 | # CONFIG_FATFS_CODEPAGE_857 is not set 188 | # CONFIG_FATFS_CODEPAGE_860 is not set 189 | # CONFIG_FATFS_CODEPAGE_861 is not set 190 | # CONFIG_FATFS_CODEPAGE_862 is not set 191 | # CONFIG_FATFS_CODEPAGE_863 is not set 192 | # CONFIG_FATFS_CODEPAGE_864 is not set 193 | # CONFIG_FATFS_CODEPAGE_865 is not set 194 | # CONFIG_FATFS_CODEPAGE_866 is not set 195 | # CONFIG_FATFS_CODEPAGE_869 is not set 196 | # CONFIG_FATFS_CODEPAGE_932 is not set 197 | # CONFIG_FATFS_CODEPAGE_936 is not set 198 | # CONFIG_FATFS_CODEPAGE_949 is not set 199 | # CONFIG_FATFS_CODEPAGE_950 is not set 200 | CONFIG_FATFS_CODEPAGE=1 201 | CONFIG_FATFS_MAX_LFN=255 202 | 203 | # 204 | # FreeRTOS 205 | # 206 | CONFIG_FREERTOS_UNICORE=y 207 | CONFIG_FREERTOS_CORETIMER_0=y 208 | # CONFIG_FREERTOS_CORETIMER_1 is not set 209 | CONFIG_FREERTOS_HZ=1000 210 | CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION=y 211 | # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set 212 | CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL=y 213 | # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY is not set 214 | # CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set 215 | CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=3 216 | CONFIG_FREERTOS_ASSERT_FAIL_ABORT=y 217 | # CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE is not set 218 | # CONFIG_FREERTOS_ASSERT_DISABLE is not set 219 | CONFIG_FREERTOS_BREAK_ON_SCHEDULER_START_JTAG=y 220 | # CONFIG_ENABLE_MEMORY_DEBUG is not set 221 | CONFIG_FREERTOS_ISR_STACKSIZE=1536 222 | # CONFIG_FREERTOS_LEGACY_HOOKS is not set 223 | CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 224 | # CONFIG_SUPPORT_STATIC_ALLOCATION is not set 225 | CONFIG_TIMER_TASK_PRIORITY=1 226 | CONFIG_TIMER_TASK_STACK_DEPTH=2048 227 | CONFIG_TIMER_QUEUE_LENGTH=10 228 | # CONFIG_FREERTOS_DEBUG_INTERNALS is not set 229 | 230 | # 231 | # Log output 232 | # 233 | # CONFIG_LOG_DEFAULT_LEVEL_NONE is not set 234 | # CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set 235 | # CONFIG_LOG_DEFAULT_LEVEL_WARN is not set 236 | CONFIG_LOG_DEFAULT_LEVEL_INFO=y 237 | # CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set 238 | # CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set 239 | CONFIG_LOG_DEFAULT_LEVEL=3 240 | CONFIG_LOG_COLORS=y 241 | 242 | # 243 | # LWIP 244 | # 245 | # CONFIG_L2_TO_L3_COPY is not set 246 | CONFIG_LWIP_MAX_SOCKETS=4 247 | CONFIG_LWIP_THREAD_LOCAL_STORAGE_INDEX=0 248 | # CONFIG_LWIP_SO_REUSE is not set 249 | # CONFIG_LWIP_SO_RCVBUF is not set 250 | CONFIG_LWIP_DHCP_MAX_NTP_SERVERS=1 251 | # CONFIG_LWIP_IP_FRAG is not set 252 | # CONFIG_LWIP_IP_REASSEMBLY is not set 253 | CONFIG_TCP_MAXRTX=12 254 | CONFIG_TCP_SYNMAXRTX=6 255 | CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y 256 | CONFIG_TCPIP_TASK_STACK_SIZE=2560 257 | # CONFIG_PPP_SUPPORT is not set 258 | 259 | # 260 | # mbedTLS 261 | # 262 | CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=16384 263 | # CONFIG_MBEDTLS_DEBUG is not set 264 | CONFIG_MBEDTLS_HARDWARE_AES=y 265 | CONFIG_MBEDTLS_HARDWARE_MPI=y 266 | CONFIG_MBEDTLS_MPI_USE_INTERRUPT=y 267 | CONFIG_MBEDTLS_HARDWARE_SHA=y 268 | CONFIG_MBEDTLS_HAVE_TIME=y 269 | # CONFIG_MBEDTLS_HAVE_TIME_DATE is not set 270 | 271 | # 272 | # OpenSSL 273 | # 274 | # CONFIG_OPENSSL_DEBUG is not set 275 | CONFIG_OPENSSL_ASSERT_DO_NOTHING=y 276 | # CONFIG_OPENSSL_ASSERT_EXIT is not set 277 | 278 | # 279 | # SPI Flash driver 280 | # 281 | # CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set 282 | CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y 283 | -------------------------------------------------------------------------------- /sta/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # This is a project Makefile. It is assumed the directory this Makefile resides in is a 3 | # project subdirectory. 4 | # 5 | 6 | PROJECT_NAME := sta 7 | 8 | include $(IDF_PATH)/make/project.mk 9 | -------------------------------------------------------------------------------- /sta/README.md: -------------------------------------------------------------------------------- 1 | # 让你的 ESP32 连接到 WiFi 热点 2 | 3 | 功能说明:将 ESP32 当做一个 STA,连接到一个 WiFi 热点。 4 | 5 | ## 快速开始 6 | 7 | ### 假设 8 | 9 | - 你已经安装好 ESP-IDF 和工具链。 10 | - 你已经有一个 WiFi 热点。 11 | 12 | ### 步骤 13 | 14 | - 使用数据线将开发板连接到你的系统中,让系统能够识别到你的板子(Windows 是`COM\*`, Linux 是`/dev/ttyUSB\*`)。 15 | - 进入`sta`所在目录。 16 | - 执行命名`make menuconfig`进行配置。 17 | - 对热点的 SSID 和密码进行配置。依次进入配置选项`Demo Configuration --->`,然后在`WiFi SSID`和`WiFi Password`中填写你的 SSID 和密码。然后退出配置菜单,保存配置。 18 | - 对串口进行配置。 19 | - 执行命令`make`进行编译 20 | - 执行命令`make flash monitor`将编译生成的镜像烧写到 ESP32 开发板上面,并查看串口输出。 21 | 22 | ### 现象 23 | 24 | ![](./img/sta.jpg) 25 | 26 | ## 深入理解 27 | 28 | 参考博客:[让 ESP32 连接到你的 WiFi 热点](http://blog.csdn.net/tidyjiang/article/details/71638897) 29 | -------------------------------------------------------------------------------- /sta/img/sta.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chunhuajiang/esp32-projects/de21cb9e0702eb730c6a53b9843f83b9ce0f58e9/sta/img/sta.jpg -------------------------------------------------------------------------------- /sta/main/Kconfig.projbuild: -------------------------------------------------------------------------------- 1 | menu "Demo Configuration" 2 | 3 | config WIFI_SSID 4 | string "WiFi SSID" 5 | default "tidyjiang-ssid" 6 | help 7 | SSID (network name) to connect to. 8 | 9 | config WIFI_PASSWORD 10 | string "WiFi Password" 11 | default "tidyjiang-passwd" 12 | help 13 | WiFi password (WPA or WPA2) to use. 14 | 15 | Can be left blank if the network has no security set. 16 | 17 | endmenu 18 | -------------------------------------------------------------------------------- /sta/main/component.mk: -------------------------------------------------------------------------------- 1 | # 2 | # Main component makefile. 3 | # 4 | # This Makefile can be left empty. By default, it will take the sources in the 5 | # src/ directory, compile them and link them into lib(subdirectory_name).a 6 | # in the build directory. This behaviour is entirely configurable, 7 | # please read the ESP-IDF documents if you need to do this. 8 | # 9 | -------------------------------------------------------------------------------- /sta/main/main_sta.c: -------------------------------------------------------------------------------- 1 | #include "freertos/FreeRTOS.h" 2 | #include "esp_wifi.h" 3 | #include "esp_system.h" 4 | #include "esp_event.h" 5 | #include "esp_event_loop.h" 6 | #include "esp_log.h" 7 | #include "nvs_flash.h" 8 | #include "driver/gpio.h" 9 | 10 | #define TAG "app_sta" 11 | 12 | esp_err_t event_handler(void *ctx, system_event_t *event) 13 | { 14 | switch (event->event_id) 15 | { 16 | case SYSTEM_EVENT_STA_START: 17 | ESP_LOGI(TAG, "Connecting to AP..."); 18 | esp_wifi_connect(); 19 | break; 20 | 21 | case SYSTEM_EVENT_STA_GOT_IP: 22 | ESP_LOGI(TAG, "Connected."); 23 | break; 24 | 25 | case SYSTEM_EVENT_STA_DISCONNECTED: 26 | ESP_LOGI(TAG, "Wifi disconnected, try to connect ..."); 27 | esp_wifi_connect(); 28 | break; 29 | 30 | default: 31 | break; 32 | } 33 | 34 | return ESP_OK; 35 | } 36 | 37 | void app_main(void) 38 | { 39 | tcpip_adapter_init(); 40 | ESP_ERROR_CHECK( esp_event_loop_init(event_handler, NULL) ); 41 | wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); 42 | ESP_ERROR_CHECK( esp_wifi_init(&cfg) ); 43 | ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) ); 44 | wifi_config_t sta_config = { 45 | .sta = { 46 | .ssid = CONFIG_WIFI_SSID, 47 | .password = CONFIG_WIFI_PASSWORD, 48 | .bssid_set = false 49 | } 50 | }; 51 | 52 | ESP_ERROR_CHECK( esp_wifi_set_config(WIFI_IF_STA, &sta_config) ); 53 | ESP_ERROR_CHECK( esp_wifi_start() ); 54 | } 55 | 56 | -------------------------------------------------------------------------------- /sta/main/sta.c: -------------------------------------------------------------------------------- 1 | #include "freertos/FreeRTOS.h" 2 | #include "esp_wifi.h" 3 | #include "esp_system.h" 4 | #include "esp_event.h" 5 | #include "esp_event_loop.h" 6 | #include "esp_log.h" 7 | #include "nvs_flash.h" 8 | #include "driver/gpio.h" 9 | 10 | #define TAG "app_sta" 11 | 12 | esp_err_t event_handler(void *ctx, system_event_t *event) 13 | { 14 | switch (event->event_id) 15 | { 16 | case SYSTEM_EVENT_STA_START: 17 | ESP_LOGI(TAG, "Connecting to AP..."); 18 | esp_wifi_connect(); 19 | break; 20 | 21 | case SYSTEM_EVENT_STA_GOT_IP: 22 | ESP_LOGI(TAG, "Connected."); 23 | break; 24 | 25 | case SYSTEM_EVENT_STA_DISCONNECTED: 26 | ESP_LOGI(TAG, "Wifi disconnected, try to connect ..."); 27 | esp_wifi_connect(); 28 | break; 29 | 30 | default: 31 | break; 32 | } 33 | 34 | return ESP_OK; 35 | } 36 | 37 | void app_main(void) 38 | { 39 | //nvs_flash_init(); 40 | 41 | tcpip_adapter_init(); 42 | ESP_ERROR_CHECK( esp_event_loop_init(event_handler, NULL) ); 43 | wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); 44 | ESP_ERROR_CHECK( esp_wifi_init(&cfg) ); 45 | //ESP_ERROR_CHECK( esp_wifi_set_storage(WIFI_STORAGE_FLASH) ); 46 | ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) ); 47 | wifi_config_t sta_config = { 48 | .sta = { 49 | .ssid = CONFIG_WIFI_SSID, 50 | .password = CONFIG_WIFI_PASSWORD, 51 | .bssid_set = false 52 | } 53 | }; 54 | 55 | ESP_ERROR_CHECK( esp_wifi_set_config(WIFI_IF_STA, &sta_config) ); 56 | ESP_ERROR_CHECK( esp_wifi_start() ); 57 | } 58 | 59 | -------------------------------------------------------------------------------- /sta/sdkconfig: -------------------------------------------------------------------------------- 1 | # 2 | # Automatically generated file; DO NOT EDIT. 3 | # Espressif IoT Development Framework Configuration 4 | # 5 | 6 | # 7 | # SDK tool configuration 8 | # 9 | CONFIG_TOOLPREFIX="xtensa-esp32-elf-" 10 | CONFIG_PYTHON="python" 11 | 12 | # 13 | # Bootloader config 14 | # 15 | # CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set 16 | # CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set 17 | # CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set 18 | CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y 19 | # CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set 20 | # CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set 21 | CONFIG_LOG_BOOTLOADER_LEVEL=3 22 | 23 | # 24 | # Security features 25 | # 26 | # CONFIG_SECURE_BOOT_ENABLED is not set 27 | # CONFIG_FLASH_ENCRYPTION_ENABLED is not set 28 | 29 | # 30 | # Serial flasher config 31 | # 32 | CONFIG_ESPTOOLPY_PORT="/dev/ttyUSB0" 33 | CONFIG_ESPTOOLPY_BAUD_115200B=y 34 | # CONFIG_ESPTOOLPY_BAUD_230400B is not set 35 | # CONFIG_ESPTOOLPY_BAUD_921600B is not set 36 | # CONFIG_ESPTOOLPY_BAUD_2MB is not set 37 | # CONFIG_ESPTOOLPY_BAUD_OTHER is not set 38 | CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=115200 39 | CONFIG_ESPTOOLPY_BAUD=115200 40 | CONFIG_ESPTOOLPY_COMPRESSED=y 41 | # CONFIG_FLASHMODE_QIO is not set 42 | # CONFIG_FLASHMODE_QOUT is not set 43 | CONFIG_FLASHMODE_DIO=y 44 | # CONFIG_FLASHMODE_DOUT is not set 45 | CONFIG_ESPTOOLPY_FLASHMODE="dio" 46 | # CONFIG_ESPTOOLPY_FLASHFREQ_80M is not set 47 | CONFIG_ESPTOOLPY_FLASHFREQ_40M=y 48 | # CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set 49 | # CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set 50 | CONFIG_ESPTOOLPY_FLASHFREQ="40m" 51 | # CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set 52 | CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y 53 | # CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set 54 | # CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set 55 | # CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set 56 | CONFIG_ESPTOOLPY_FLASHSIZE="2MB" 57 | CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y 58 | CONFIG_ESPTOOLPY_BEFORE_RESET=y 59 | # CONFIG_ESPTOOLPY_BEFORE_NORESET is not set 60 | CONFIG_ESPTOOLPY_BEFORE="default_reset" 61 | CONFIG_ESPTOOLPY_AFTER_RESET=y 62 | # CONFIG_ESPTOOLPY_AFTER_NORESET is not set 63 | CONFIG_ESPTOOLPY_AFTER="hard_reset" 64 | # CONFIG_MONITOR_BAUD_9600B is not set 65 | # CONFIG_MONITOR_BAUD_57600B is not set 66 | CONFIG_MONITOR_BAUD_115200B=y 67 | # CONFIG_MONITOR_BAUD_230400B is not set 68 | # CONFIG_MONITOR_BAUD_921600B is not set 69 | # CONFIG_MONITOR_BAUD_2MB is not set 70 | # CONFIG_MONITOR_BAUD_OTHER is not set 71 | CONFIG_MONITOR_BAUD_OTHER_VAL=115200 72 | CONFIG_MONITOR_BAUD=115200 73 | 74 | # 75 | # Partition Table 76 | # 77 | CONFIG_PARTITION_TABLE_SINGLE_APP=y 78 | # CONFIG_PARTITION_TABLE_TWO_OTA is not set 79 | # CONFIG_PARTITION_TABLE_CUSTOM is not set 80 | CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" 81 | CONFIG_PARTITION_TABLE_CUSTOM_APP_BIN_OFFSET=0x10000 82 | CONFIG_PARTITION_TABLE_FILENAME="partitions_singleapp.csv" 83 | CONFIG_APP_OFFSET=0x10000 84 | 85 | # 86 | # Demo Configuration 87 | # 88 | CONFIG_WIFI_SSID="test" 89 | CONFIG_WIFI_PASSWORD="1234.qwer" 90 | CONFIG_OPTIMIZATION_LEVEL_DEBUG=y 91 | # CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set 92 | 93 | # 94 | # Component config 95 | # 96 | # CONFIG_AWS_IOT_SDK is not set 97 | # CONFIG_BT_ENABLED is not set 98 | CONFIG_BT_RESERVE_DRAM=0 99 | 100 | # 101 | # ESP32-specific 102 | # 103 | # CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set 104 | CONFIG_ESP32_DEFAULT_CPU_FREQ_160=y 105 | # CONFIG_ESP32_DEFAULT_CPU_FREQ_240 is not set 106 | CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=160 107 | CONFIG_MEMMAP_SMP=y 108 | # CONFIG_MEMMAP_TRACEMEM is not set 109 | # CONFIG_MEMMAP_TRACEMEM_TWOBANKS is not set 110 | # CONFIG_ESP32_TRAX is not set 111 | CONFIG_TRACEMEM_RESERVE_DRAM=0x0 112 | # CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set 113 | # CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set 114 | CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y 115 | # CONFIG_ESP32_ENABLE_COREDUMP is not set 116 | # CONFIG_ESP32_APPTRACE_DEST_TRAX is not set 117 | # CONFIG_ESP32_APPTRACE_DEST_UART is not set 118 | CONFIG_ESP32_APPTRACE_DEST_NONE=y 119 | # CONFIG_ESP32_APPTRACE_ENABLE is not set 120 | CONFIG_BASE_MAC_STORED_DEFAULT_EFUSE=y 121 | # CONFIG_BASE_MAC_STORED_CUSTOMER_DEFINED_EFUSE is not set 122 | # CONFIG_BASE_MAC_STORED_OTHER_CUSTOMER_DEFINED_PLACE is not set 123 | # CONFIG_TWO_MAC_ADDRESS_FROM_EFUSE is not set 124 | CONFIG_FOUR_MAC_ADDRESS_FROM_EFUSE=y 125 | CONFIG_NUMBER_OF_MAC_ADDRESS_GENERATED_FROM_EFUSE=4 126 | CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 127 | CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=4096 128 | CONFIG_MAIN_TASK_STACK_SIZE=4096 129 | CONFIG_NEWLIB_STDOUT_ADDCR=y 130 | # CONFIG_NEWLIB_NANO_FORMAT is not set 131 | CONFIG_CONSOLE_UART_DEFAULT=y 132 | # CONFIG_CONSOLE_UART_CUSTOM is not set 133 | # CONFIG_CONSOLE_UART_NONE is not set 134 | CONFIG_CONSOLE_UART_NUM=0 135 | CONFIG_CONSOLE_UART_BAUDRATE=115200 136 | # CONFIG_ULP_COPROC_ENABLED is not set 137 | CONFIG_ULP_COPROC_RESERVE_MEM=0 138 | # CONFIG_ESP32_PANIC_PRINT_HALT is not set 139 | CONFIG_ESP32_PANIC_PRINT_REBOOT=y 140 | # CONFIG_ESP32_PANIC_SILENT_REBOOT is not set 141 | # CONFIG_ESP32_PANIC_GDBSTUB is not set 142 | CONFIG_ESP32_DEBUG_OCDAWARE=y 143 | CONFIG_INT_WDT=y 144 | CONFIG_INT_WDT_TIMEOUT_MS=300 145 | CONFIG_INT_WDT_CHECK_CPU1=y 146 | CONFIG_TASK_WDT=y 147 | # CONFIG_TASK_WDT_PANIC is not set 148 | CONFIG_TASK_WDT_TIMEOUT_S=5 149 | CONFIG_TASK_WDT_CHECK_IDLE_TASK=y 150 | CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y 151 | # CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set 152 | CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y 153 | # CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set 154 | # CONFIG_ESP32_TIME_SYSCALL_USE_NONE is not set 155 | CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y 156 | # CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL is not set 157 | CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 158 | CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=0 159 | # CONFIG_ESP32_XTAL_FREQ_40 is not set 160 | # CONFIG_ESP32_XTAL_FREQ_26 is not set 161 | CONFIG_ESP32_XTAL_FREQ_AUTO=y 162 | CONFIG_ESP32_XTAL_FREQ=0 163 | CONFIG_WIFI_ENABLED=y 164 | CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 165 | CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=64 166 | # CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set 167 | CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y 168 | CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 169 | CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32 170 | CONFIG_ESP32_WIFI_AMPDU_ENABLED=y 171 | CONFIG_ESP32_WIFI_NVS_ENABLED=y 172 | CONFIG_PHY_ENABLED=y 173 | 174 | # 175 | # PHY 176 | # 177 | CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y 178 | # CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set 179 | CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 180 | CONFIG_ESP32_PHY_MAX_TX_POWER=20 181 | # CONFIG_ETHERNET is not set 182 | 183 | # 184 | # FAT Filesystem support 185 | # 186 | CONFIG_FATFS_CODEPAGE_ASCII=y 187 | # CONFIG_FATFS_CODEPAGE_437 is not set 188 | # CONFIG_FATFS_CODEPAGE_720 is not set 189 | # CONFIG_FATFS_CODEPAGE_737 is not set 190 | # CONFIG_FATFS_CODEPAGE_771 is not set 191 | # CONFIG_FATFS_CODEPAGE_775 is not set 192 | # CONFIG_FATFS_CODEPAGE_850 is not set 193 | # CONFIG_FATFS_CODEPAGE_852 is not set 194 | # CONFIG_FATFS_CODEPAGE_855 is not set 195 | # CONFIG_FATFS_CODEPAGE_857 is not set 196 | # CONFIG_FATFS_CODEPAGE_860 is not set 197 | # CONFIG_FATFS_CODEPAGE_861 is not set 198 | # CONFIG_FATFS_CODEPAGE_862 is not set 199 | # CONFIG_FATFS_CODEPAGE_863 is not set 200 | # CONFIG_FATFS_CODEPAGE_864 is not set 201 | # CONFIG_FATFS_CODEPAGE_865 is not set 202 | # CONFIG_FATFS_CODEPAGE_866 is not set 203 | # CONFIG_FATFS_CODEPAGE_869 is not set 204 | # CONFIG_FATFS_CODEPAGE_932 is not set 205 | # CONFIG_FATFS_CODEPAGE_936 is not set 206 | # CONFIG_FATFS_CODEPAGE_949 is not set 207 | # CONFIG_FATFS_CODEPAGE_950 is not set 208 | CONFIG_FATFS_CODEPAGE=1 209 | CONFIG_FATFS_MAX_LFN=255 210 | 211 | # 212 | # FreeRTOS 213 | # 214 | # CONFIG_FREERTOS_UNICORE is not set 215 | CONFIG_FREERTOS_CORETIMER_0=y 216 | # CONFIG_FREERTOS_CORETIMER_1 is not set 217 | CONFIG_FREERTOS_HZ=100 218 | CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION=y 219 | # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set 220 | # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set 221 | CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y 222 | # CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set 223 | CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 224 | CONFIG_FREERTOS_ASSERT_FAIL_ABORT=y 225 | # CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE is not set 226 | # CONFIG_FREERTOS_ASSERT_DISABLE is not set 227 | CONFIG_FREERTOS_BREAK_ON_SCHEDULER_START_JTAG=y 228 | # CONFIG_ENABLE_MEMORY_DEBUG is not set 229 | CONFIG_FREERTOS_ISR_STACKSIZE=1536 230 | # CONFIG_FREERTOS_LEGACY_HOOKS is not set 231 | CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 232 | # CONFIG_SUPPORT_STATIC_ALLOCATION is not set 233 | CONFIG_TIMER_TASK_PRIORITY=1 234 | CONFIG_TIMER_TASK_STACK_DEPTH=2048 235 | CONFIG_TIMER_QUEUE_LENGTH=10 236 | # CONFIG_FREERTOS_DEBUG_INTERNALS is not set 237 | 238 | # 239 | # Log output 240 | # 241 | # CONFIG_LOG_DEFAULT_LEVEL_NONE is not set 242 | # CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set 243 | # CONFIG_LOG_DEFAULT_LEVEL_WARN is not set 244 | CONFIG_LOG_DEFAULT_LEVEL_INFO=y 245 | # CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set 246 | # CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set 247 | CONFIG_LOG_DEFAULT_LEVEL=3 248 | CONFIG_LOG_COLORS=y 249 | 250 | # 251 | # LWIP 252 | # 253 | # CONFIG_L2_TO_L3_COPY is not set 254 | CONFIG_LWIP_MAX_SOCKETS=10 255 | CONFIG_LWIP_THREAD_LOCAL_STORAGE_INDEX=0 256 | # CONFIG_LWIP_SO_REUSE is not set 257 | # CONFIG_LWIP_SO_RCVBUF is not set 258 | CONFIG_LWIP_DHCP_MAX_NTP_SERVERS=1 259 | # CONFIG_LWIP_IP_FRAG is not set 260 | # CONFIG_LWIP_IP_REASSEMBLY is not set 261 | CONFIG_TCP_MAXRTX=12 262 | CONFIG_TCP_SYNMAXRTX=6 263 | CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y 264 | CONFIG_TCPIP_TASK_STACK_SIZE=2560 265 | # CONFIG_PPP_SUPPORT is not set 266 | 267 | # 268 | # mbedTLS 269 | # 270 | CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=16384 271 | # CONFIG_MBEDTLS_DEBUG is not set 272 | CONFIG_MBEDTLS_HARDWARE_AES=y 273 | CONFIG_MBEDTLS_HARDWARE_MPI=y 274 | CONFIG_MBEDTLS_MPI_USE_INTERRUPT=y 275 | CONFIG_MBEDTLS_HARDWARE_SHA=y 276 | CONFIG_MBEDTLS_HAVE_TIME=y 277 | # CONFIG_MBEDTLS_HAVE_TIME_DATE is not set 278 | 279 | # 280 | # OpenSSL 281 | # 282 | # CONFIG_OPENSSL_DEBUG is not set 283 | CONFIG_OPENSSL_ASSERT_DO_NOTHING=y 284 | # CONFIG_OPENSSL_ASSERT_EXIT is not set 285 | 286 | # 287 | # SPI Flash driver 288 | # 289 | # CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set 290 | CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y 291 | --------------------------------------------------------------------------------