ESP32+idf开发之WIFI通信入门(2)station网络连接

2023-11-09

ESP32+idf开发之WIFI通信入门(2)station网络连接

1、新建工程项目ctrl+shift+p,选择new project,输入项目名,选择合适项目路径,选择对应的开发板,此处选择自定义,target选择ESP32 moudule,点击选择模板。

image-20230313212949442

2、选择idf的模板example,选择其中空白的样例工程,点击创建项目用此模板,并在新的窗口打开,旧窗口就可以关闭了。

image-20230313213413882

3、在vscode中项目路径下找到main.c文件,输入以下代码实现以下功能:

​ (1)能连接到你的热点(用户名ssid,密码password);

​ (2)能够实现断线重连;

​ (3)信号量完成事件处理函数和主任务的同步,当连接成功后,主任务能够输出“connected to ap!”

#include <esp_log.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>

#include <esp_netif.h>
#include <esp_wifi.h>
#include <esp_event.h>
#include <nvs_flash.h>

static char *TAG = "wifi station";

SemaphoreHandle_t sem;

// 状态机事件处理:static void event_handler(void * arg, esp_event_base_t event_base,
//                                           int32_t event_id, void * event_data)
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 ||
                                       event_id == WIFI_EVENT_STA_DISCONNECTED))
    {
        ESP_LOGI(TAG, "begin to connect the AP");
        esp_wifi_connect();
    }
    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));
        xSemaphoreGive(sem);
    }
}

void app_main(void)
{
    sem = xSemaphoreCreateBinary();

    // nvs初始化:nvs_flash_init()
    ESP_ERROR_CHECK(nvs_flash_init());

    // 事件循环初始化:sp_event_loop_create_default();
    ESP_ERROR_CHECK(esp_event_loop_create_default());

    // 事件处理函数注册
    //  esp_err_t esp_event_handler_register(esp_event_base_t event_base, int32_t event_id,
    //                                       esp_event_handler_t event_handler, void * event_handler_arg)
    ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, event_handler, NULL));
    ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, event_handler, NULL));

    // 初始化阶段:esp_netif_init();sp_netif_create_default_wifi_sta();esp_wifi_init();
    ESP_ERROR_CHECK(esp_netif_init());
    esp_netif_create_default_wifi_sta();
    wifi_init_config_t wifi_cfg = WIFI_INIT_CONFIG_DEFAULT();
    ESP_ERROR_CHECK(esp_wifi_init(&wifi_cfg));

    // 配置阶段:esp_wifi_set_mode();esp_wifi_set_config();
    ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
    wifi_config_t cfg = {
        .sta = {
            //用户名和密码根据实际情况修改
            .ssid = "ssid",
            .password = "password",
        }};
    ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &cfg));

    // 启动阶段:esp_wifi_start()
    ESP_ERROR_CHECK(esp_wifi_start());

    while (1)
    {
        if (xSemaphoreTake(sem, portMAX_DELAY) == pdPASS)
        {
            ESP_LOGI(TAG, "connected to ap!");
        }
    }
}

4、编译(build)、烧写(flash)和监控(monitor),成功连接ap,断开后不断重连并打印begin to connect the AP,直到再次连接成功。

image-20230313215700736

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ESP32+idf开发之WIFI通信入门(2)station网络连接 的相关文章

随机推荐

  • STM32 W5500 MQTT Client 发布订阅及断线重连

    使用STM32 W5500做MQTT Client 使得数据上传broker 并接收broker传来的消息 并支持断网 拔网线再插入网线能够重新连接broker这样的功能 需要具备以下条件 1 STM32 W5500基础入网配置 使能PC电
  • IT界大佬告诉你,程序员接私活的7大平台利器

    今天小编在网上汇集了一些国内程序员接私活的平台 希望对大家能够有用 1 程序员客栈 程序员的经纪人 如果有想学习java的程序员 可来我们的java学习扣qun 94311 1692免费送java的视频教程噢 我整理了一份适合18年学习的j
  • Haproxy负载均衡和动静分离配置

    Haproxy Haproxy安装 yum y install haproxy 配置负载均衡 frontend ds 80 定义前端服务器名为ds 监听地址为所有ip的80端口 default backend webservers 默认请求
  • SSRF(服务端请求伪造)

    SSRF Server side Request Forge 服务端请求伪造 1 概念 它是一种由攻击者构造形成由服务端发起请求的一个安全漏洞 一般情况下 SSRF攻击的目标是从外网无法访问的内部系统 正是因为它是由服务端发起的 所以它能够
  • Linux中的中断机制 2

    Linux中的中断机制 2009 06 11 23 03 44 分类 LINUX Linux中的中断机制 X86里面中断发生时CPU控制单元工作流程 也就是硬件需要做的事情 在CPU执行下一条instruction之前 首先判断有没有发生异
  • unity 2019 点击脚本启动不了VS_Unity-利用免费资源快捷实现第三人称角色控制

    by 临界荷 本例目标 学习使用unity商店免费资源中的模型和代码 轻松快捷实现第三人称视角玩家多种行为的设定 举一反三 可方便灵活地添加到自己的3D模型 绑定了骨骼和动作的人物模型 不支持动物模型 实现步骤 找到并体验资源项目 1 打开
  • Qt常见警告问题:请更新您的工具包(Desktop Qt 5.14.1MSVC2017 64位)或为qmake选择更符合您的目标环境的mkspec

    2021 03 28T17 32 05 Clang Code Model Error The clangbackend executable D Qt Qt5 12 9 Tools QtCreator bin clangbackend ex
  • ORACLE深入 第五章 Locking and Latching

    ORACLE深入 第五章 Locking and Latching Locks 在单用户系统 LOCKS是不需要的 在多用户系统 为了让多用户访问数据 修改数据 修改数据结构 就需要一个机制来保证大家的一致性修改 该用LOCK的时候就用LO
  • Selenium基础知识

    关于selenium你应该知道的 selenium是什么 一个自动化测试的工具 系统测试 测试阶段 单元测试 集成测试 系统测试 验收测试 自动化测试属于 系统测试 自动测试工具 自动化功能测试工具和自动化性能测试 selenium包括什么
  • Salary Changing【Codeforces 1251 D】【二分答案】

    Educational Codeforces Round 75 Rated for Div 2 D 题意 有N名员工和S元钱 然后我们想知道在每一名员工有薪资要求在 li ri 的情况下 我们如何在总共就S元钱的情况下做到员工薪资的中位数最
  • python爬虫 -- 12306登录刷票

    coding utf 8 from splinter browser import Browser from time import sleep import traceback Message phantomjs executable n
  • centos安装rocketmq

    centos安装rocketmq 1 下载rocketmq二进制包 2 解压二进制包 3 修改broker conf 4 修改runbroker sh和runserver sh的JVM参数 5 启动NameServer和Broker 6 安
  • Linux基础知识汇总,收藏

    对于嵌入式而言 大部分人的进阶路线 单片机 gt RTOS gt Linux 下面 针对有单片机 RTOS基础的同学 分享一份入门 Linux 的基础内容 下方超长干货预警 建议先收藏 再观看 Linux 基础 操作系统 操作系统 Oper
  • linux多线程编译

    include
  • 【教程】手把手教你用Clion进行STM32开发【如何优雅の进行嵌入式开发】

    通过Clion进行嵌入式开发 一 工具安装 1 安装Clion 因为众所周知的原因 Clion的安装就不解释了 有需要的同学自行检索 2 安装STM32CubeMX 正常去官网下载最新版的安装就行了 STM32CubeMX STM32Cub
  • LRC算法的Java实现

    项目中要用到 本来想拿来主义 结果没有找到合适的 所有自己写了一个 LRC具体算法如下 1 对需要校验的数据 2n个字符 两两组成一个16进制的数值求和 2 将模值按位取反 3 加1 Java代码实现 输入byte data 返回LRC校验
  • IDEA好用的两款Java代码质量审查插件

    IDEA好用的两款Java代码质量审查插件 两款Java代码质量审查插件 Alibaba代码规约插件 使用方式 SonarLint 使用方式 两款Java代码质量审查插件 Alibaba代码规约插件 SonarLint插件 Alibaba代
  • PCL 间接平差法拟合二维直线

    目录 一 算法原理 二 代码实现 三 结果展示 四 相关链接 一 算法原理 通过传统最小二乘法对点云数据进行二维直线拟合时 可将误差只归因于一个方向上 本文假设误差只存在于 y y y轴方向上 设点云拟合的二维直线方程为 y
  • Java-GUI初步理解

    什么是GUI GUI既图形用户界面 是一种以图形为主体的交互方式 主要包括AWT组件以及Swing组件以及容器 布局和事件相关的类接口 AWT是抽象窗口工具包的简称 其中有像窗口 按钮等组件 而Swing是基于AWT开发的 他的功能更加强大
  • ESP32+idf开发之WIFI通信入门(2)station网络连接

    ESP32 idf开发之WIFI通信入门 2 station网络连接 1 新建工程项目ctrl shift p 选择new project 输入项目名 选择合适项目路径 选择对应的开发板 此处选择自定义 target选择ESP32 moud