精华内容
下载资源
问答
  • 点亮第一个LED灯及按键输入 一、点亮第一个LED灯 在user_init()函数中设置IO2为GPIO模式,如下所示: PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2); /* 设置IO2为GPIO模式 */ 然后将其设置为输出模式,并...
  • ESP8266_RTOS_SDK-v3.3固件中的UART中的 API中文文档。
  • Esp8266 wifi芯片的RTOS sdk编程开发手册,中文版本。
  • 赠人玫瑰,人家的东西,我放出来,一起共享一下。要的拿去。本来是免费的。这个必须要分。
  • Esp8266 源码分析 MQTT 实现过程,实现移植 MQTT协议在 esp8266 rtos实时系统,可断线重连。https://blog.csdn.net/xh870189248/article/details/81181707
  • ESP8266 RTOS SDK开发 --- (一) Ubuntu下编译环境搭建
  • 1、 Esp8266之 搭建开发环境,开始一个“hellow world”串口打印。 2、 Esp8266之 利用GPIO开始使用按钮点亮你的“第一盏灯”。 3、 Esp8266之 利用 “软件定时器 ” 定时0.5秒闪烁点亮一盏LED。 4 、Esp8266之 ...
  • ESP8266 最新版 SDK RTOS 版本 ESP8266_RTOS_SDK-v3.3 官方原版无修改
  • esp8266esp32已经全部更新到idf框架,如果你还在用网上烂大街的sdk2.0教程学习,那就落后很多了。基于esp_idf3.2框架,rtos的实时操作系统,节省内存,模块化开发。全新高效率的开发框架。配套视频教程,提供技术...
  • 该构建系统主要旨在与ESP SDK的RTOS一起使用。 安装 只需通过pip获取: pip安装esp8266-setup 您可能需要在以下情况下设置虚拟环境: 的Python 2 virtualenv $HOME /.virtualenvs/esp . $HOME /.virtualenvs/esp...
  • ESP8266 RTOS SDK API

    2016-12-01 17:28:22
    ESP8266 RTOS SDK API 参考_20b-esp8266_rtos_sdk_api_reference_v1.4.0
  • ESP8266_RTOS_SDK-3.0

    2018-12-02 18:14:29
    ESP8266_RTOS_SDK-3.0官方包,留作下载用以备需要。。
  • 非常详细,一步一步教你搭环建,绝对不亏
  • 1.串口配置 2.读取接收数据并发送出去 #define BUF_SIZE (1024) static void echo_task() { // Configure parameters of an UART driver, // communication pins and install the driver uart_config_t uart_...

    1.串口配置

    2.读取接收数据并发送出去

    #define BUF_SIZE (1024)

    static void echo_task()
    {
        // Configure parameters of an UART driver,
        // communication pins and install the driver
        uart_config_t uart_config =
        {
            .baud_rate = 74880,
            .data_bits = UART_DATA_8_BITS,
            .parity    = UART_PARITY_DISABLE,
            .stop_bits = UART_STOP_BITS_1,
            .flow_ctrl = UART_HW_FLOWCTRL_DISABLE
        };
        uart_param_config(UART_NUM_0, &uart_config);
        uart_driver_install(UART_NUM_0, BUF_SIZE * 2, 0, 0, NULL, 0);

        // Configure a temporary buffer for the incoming data
        uint8_t *data = (uint8_t *) malloc(BUF_SIZE);

        while (1)
        {
            // Read data from the UART
            int len = uart_read_bytes(UART_NUM_0, data, BUF_SIZE, 20 / portTICK_RATE_MS);
            // Write data back to the UART
            uart_write_bytes(UART_NUM_0, (const char *) data, len);
        }
    }

    展开全文
  • ESP8266 RTOS 2.0最新版本 为了方便使用 这个Demo是用于安信可Eclpes开发环境,文件已经配置好,可以直接编译,默认串口打印SDK版本号。特别声明为了便与开发,这个SDK相关的lib需要从官网提供SDK中找,由于版权问题...
  • ESP8266 RTOS SDK

    2017-11-28 16:15:09
    ESP8266 RTOS SDK,用于使用RTOS开发ESP8266 WIFI 芯片
  • ESP8266 RTOS SDK 使用乐鑫最新版本(V3.4),Github地址如下: https://github.com/espressif/ESP8266_RTOS_SDK/tree/release/v3.4 其他版本操作类似,可以参考相关流程。 二、下载 首先创建一个文件夹用于存放SDK...

    一、前言

    操作系统选择相较轻量级的CentOS7无界面版本,其他Linux操作上使用的命令可能有所不同,需要注意一下。

    ESP8266 RTOS SDK 使用乐鑫最新版本(V3.4),Github地址如下:

    https://github.com/espressif/ESP8266_RTOS_SDK/tree/release/v3.4

    其他版本操作类似,可以参考相关流程。

    二、下载

    首先创建一个文件夹用于存放SDK和工具链文件,可以跟我相同,也可以根据自己的需要建在不同文件夹。

    cd /home/
    mkdir esp-sdk-idf
    cd esp-sdk-idf
    

    1、下载ESP8266 RTOS SDK

    使用下面命令下载最新版本ESP8266 RTOS SDK

    sudo yum -y update && sudo yum -y install git wget 
    git clone https://github.com/espressif/ESP8266_RTOS_SDK.git
    

    由于Github的原因,下载速度可能很慢,需要耐心等待。

    2、下载交叉编译工具链

    建议在 Github 上面选择最新的工具链下载。

    wget https://dl.espressif.com/dl/xtensa-lx106-elf-gcc8_4_0-esp-2020r3-linux-amd64.tar.gz
    

    解压缩

    tar -zvxf xtensa-lx106-elf-gcc8_4_0-esp-2020r3-linux-amd64.tar.gz
    

    二、配置

    1、配置环境变量

    vi ~/.bashrc
    

    键入i在任意位置添加以下代码:

    export IDF_PATH=/home/esp-sdk-idf/ESP8266_RTOS_SDK
    export PATH=/home/esp-sdk-idf/xtensa-lx106-elf/bin:$PATH
    

    注意路径需要与下载时的路径相匹配

    按下Esc键 再 :wq 表示写入保存。

    最后输入以下命令使环境变量生效:

    source ~/.bashrc
    

    输入命令 xtensa-lx106-elf-gcc -v 检测环境变量是否有效,如下图成功:

    2、安装依赖包

    sudo yum -y update && sudo yum -y install git wget flex bison gperf python3 python3-pip python3-setuptools cmake ninja-build ccache dfu-util libusbx ncurses-libs ncurses-devel 
    

    3、修复pip未找到命令

    当执行 pip -V 命令时提示 -bash: pip: 未找到命令 需要执行以下命令修复。

    yum -y install epel-release
    yum -y install python-pip
    

    4、安装Python插件

    python -m pip install --user -r $IDF_PATH/requirements.txt
    

    如果提示出现错误,需要手动等下pip:

    wget https://bootstrap.pypa.io/2.7/get-pip.py
    python get-pip.py
    

    三、连接ESP8266

    需要将串口连接到PC,如果使用VMware虚拟机,则将USB连接到虚拟机中。

    1、VMware连接USB


    如上图确保串口设备连接再虚拟机中。

    2、查询USB设备

    执行命令 ls /dev/ttyUSB* 即可查看所有连接到Linux上的设备号。

    例如:

    /dev/ttyUSB0
    

    这里要记住串口设备号,后面下载程序要用到。

    四、编译Hello World

    首先定位到SDK的Hello World项目文件夹下

    cd $IDF_PATH/examples/get-started/hello_world
    

    1、配置编译选项

    make menuconfig
    

    执行上面命令,出现下图界面

    使用方向键选择 Serial flasher config 菜单并回车。

    根据刚刚查到的串口USB设备号修改 Default serial port

    然后根据ESP8266模块信息修改Flash信息;

    最后选 Save 回车确认后再选择 Exit 回车确认退出。
    配置完成

    2、编译全部代码(首次编译)

    编译全部代码用于第一次代码编译,此编译过程将Bootloader、SDK、APP等代码全部编译输出。

    make all -j4
    

    这里的-j4表示四核编译,如果你的PC有更多的核心,可以适当增加该数值。

    编译完成
    如上图编译全部代码完成。

    3、编译应用代码(二次编译)

    编译应用代码顾名思义,仅编译APP部分代码,主要用于已经编译过SDK的代码,再次使用编译全部完全是浪费时间,而使用编译应用代码将大大节省编译时间。

    make app -j4
    

    编译完成
    如上图编译应用代码完成。

    五、烧录程序

    首先要确保ESP8266模块 复位引脚GPIO0引脚 电平可控。

    1、硬件配置

    复位引脚GPIO0引脚 拉低并保持。

    2、执行烧录命令

    ① 烧录全部代码(首次编译)

    make flash
    

    ② 仅烧录应用代码(二次编译)

    make app-flash
    

    3、开始烧录

    等待出现下图界面,Cennecting…
    开始烧录
    复位引脚 拉高,GPIO0引脚 继续保持拉低。
    烧录完成
    等待出现上图界面,表示烧录完成。

    最后将GPIO0引脚拉高保持,复位引脚拉低1秒随后拉高。

    六、运行

    使用串口调试工具连接ESP8266串口(波特率:74880),输出如下图:
    代码运行

    七、参考文档

    ESP8266_RTOS_SDK

    Linux 平台工具链的标准设置

    展开全文
  • ESP8266_RTOS_SDK-master

    2018-12-02 18:16:33
    ESP8266_RTOS_SDK-master阿里云SDK包需要配合demo编译才行。male aliyun。其实是sdk3.0
  • ESP8266 RTOS v3.0 环境搭建 和 VS Code 编译 因为工作需要,我这边需要使用ESP8266接入京东微联平台,所以下面的环境配置里,还多出一些关于如何在ESP8266_RTOS_SDK中编译esp-joylink的内容,不需要的请自动忽视 ?...

    ESP8266 RTOS v3.0 环境搭建 和 VS Code 编译

    因为工作需要,我这边需要使用ESP8266接入京东微联平台,所以下面的环境配置里,还多出一些关于如何在ESP8266_RTOS_SDK中编译esp-joylink的内容,不需要的请自动忽视 😉

    一、ESP8266 RTOS v3.0 环境搭建 (Windows环境)

    1. 下载工具链 esp32_win32_msys2_environment_and_toolchain

    ​ ESP-IDF V4.0 之后默认构建系统为 CMake,但对于之前的版本,主要用的还是 GNU Make 的传统构建系统。Windows 下没有内置 “make” 环境,所以不仅要安装编译工具链,还需要安装一个兼容 GNU 的环境(例如:MSYS2)。

    ​ 乐鑫这边已经提供好一个Windows下的 ESP32 工具链 和 MSYS2 的合集,所以我们最初的环境搭建,要从下载这个压缩包开始: esp32_win32_msys2_environment_and_toolchain

    ​ 因为这个只是一个编译环境,后面需要将要编译的 SDK 工程放在这个解压后的目录中,所以可以在自己提前准备好的目录下解压

    在这里插入图片描述

    2.配置编译环境

    2.1 下载 ESP8266 的编译工具链

    ​ 因为 esp32_win32_msys2_environment_and_toolchain 的工具链是编译 ESP32 的,而我们要编译的是 ESP8266,所以还要再单独下载给 ESP8266 的编译工具链:xtensa-lx106-elf 需要注意工具链的版本
    在这里插入图片描述

    2.2 将下载好的工具链放在目录 msys/opt 下解压

    ​ 解压需要用 WinRAR 的管理者权限解压,网上说很多朋友在这边踩到了坑;

    msys就是上面我们解压esp32_win32_msys2_environment_and_toolchain之后得到的文件夹
    在这里插入图片描述
    ​ 解压之后,看下 xtensa-lx106-elf 的大小
    在这里插入图片描述

    2.3 下载 ESP8266_RTOS_SDK

    ​ 相对于esp-idf 是 ESP32 的工程环境,ESP8266_RTOS_SDK 就是 ESP8266的工程环境。比如我接下来要编译的 esp-joylink,编译它的要求就是 ESP8266_RTOS_SDK的分支必须是 rel3.2,所以我们要开始正式撸码之前,需要先下载好ESP8266的工程环境:ESP8266_RTOS_SDK

    ​ 克隆 ESP8266_RTOS_SDK的时候建议使用下面的指令,需要注意:使用 – recursive,来一起下载子模块

    $ git clone --recursive https://github.com/espressif/ESP8266_RTOS_SDK.git
    

    ​ 下图是 esp-joylink 的编译下载要求,如果你不需要开发esp-joylink,只是想跑跑ESP8266的demo或者其他,那么具体的SDK的分支需要自己来定,也可以选择最新的那就直接用不用管这个分支。

    //-----------------------------分割线:esp-joylink 对 ESP8266_RTOS_SDK 分支的要求--------------------------------//
    在这里插入图片描述
    //------------------------------------分割线:不做esp8266接入京东的可以忽略---------------------------------------------//

    2.4 运行mingw32
    2.4.1 运行mingw32 ,会在home下生成一个username的目录和相关环境配置

    在这里插入图片描述

    2.5 设置 esp32_toolchain

    ​ 在目录 msys32/etc/profile.d 下,文本形式打开 esp32_toolchain.sh,并修改配置。需要好好配置,90%编译不成功,问题出在这里。建议打开方式,使用VS Code打开,不要用Notepad++,具体原因,不多说,有兴趣的话搜下,Notepad++ 2019年10月底做的事情。
    在这里插入图片描述

    # This file was created by ESP-IDF windows_install_prerequisites.sh
    # and will be overwritten if that script is run again.
    export PATH="$PATH:/opt/xtensa-lx106-elf/bin"
    export IDF_PATH="E:/SDK/msys32/home/username/ESP8266_RTOS_SDK"
    export LANG="en_US"
    

    注意:设置 IDF_PATH 的时候,选择我们放在home路径下的ESP8266_RTOS_SDK,把下面的粘贴到 IDF_PATH 就可以了,但需要把 “ \ ” 换成 “ / ” ,具体路径视自己实际存放 SDK 的位置而定
    在这里插入图片描述
    //---------------------------分割线:将 esp-joylink 放到 ESP8266_RTOS_SDK 目录下---------------------------------//

    下载 esp-joylink SDK,并放置在ESP8266_RTOS_SDK/example 下在这里插入图片描述
    //--------------------------------------分割线:不做esp8266接入京东的可以忽略-------------------------------------------//

    3.编译

    ​ ESP8266 RTOS v3.0的编译,都需要分两个步骤:1.make menuconfig 配置8266相关的编译内容 2.编译

    3.1 make menuconfig

    ​ 运行mingw32,然后将路径打开到要编译的目录下,例如我需要编译的是 SDK 下的 example/get-started/project_template 工程,先打开路径到 project_template下,然后输入:make menuconfig

    如果觉得cd 太多次麻烦,可以直接 cd + 把要编译的文件,直接拖拽到命令框里,回车
    在这里插入图片描述如果选在的要编译工程路径正确,输入make menuconfig 后,会出现如下界面,具体配置,这里不再赘述
    在这里插入图片描述

    3.2 make -j

    设置保存退出之后,输入:make -j 开始编译,因为我电脑是 i5 8核,所以输入:make -j8[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述
    最后出现上面信息,则为编译成功。

    二、VS Code 编译

    1. VS Code下载和配置

    1.1 VS Code 下载

    ​ 下载安装 VS Code下载地址

    1.2 VS Code 配置

    ​ 设置VS Code配置 setting.json
    在这里插入图片描述
    ​ 修改 VS Code 终端为 msys32 的cmd
    在这里插入图片描述

        "terminal.integrated.shell.windows": "E:\\username\\SDK\\msys32\\msys2_shell.cmd",
        "terminal.integrated.shellArgs.windows": [
            "-defterm",
            "-mingw32",
            "-no-start",
            "-here"
        ],
    

    其中,msys2_shell.cmd 路径根据自己路径修改注意是“ \\ ”,保存退出

    2. VS Code编译

    在这里插入图片描述

    FAQ

    ​ 简单介绍下我遇到的一个大坑 : (

    ​ 在确认好自己环境配置ok之后,编译,会出现下面这种报错

    python.exe -m pip install --user -r D:/xxx/msys32/home/username/ESP8266_RTOS_SDK/requirements.txt
    check_python_dependencies
    

    在这里插入图片描述
    查遍网上,都没有适合我的解决办法,后来侥幸发现可能是两个问题导致的,解决方法如下:

    1. 确保 esp32_win32_msys2_environment_and_toolchain是最新的… 我之前在乐鑫官网上的一个链接的版本是 20181001,但后来在另一个中文网站下,发现最新的版本是20190611…(浪费了我n天时间)

    2. 下载ESP8266_RTOS_SDK 下载的时候,把对应的子模块都下载了,所以克隆SDK的时候使用命令

      git clone --recursive url
      

    最后,愉快的撸码吧~

    参考文章:
    1.https://docs.espressif.com/projects/esp-idf/zh_CN/latest/get-started-legacy/index.html
    2.https://blog.csdn.net/QianBiDeJiYi/article/details/96451910
    ​3.https://docs.espressif.com/projects/esp-idf/zh_CN/latest/get-started/windows-setup.html

    展开全文
  • ESP8266 RTOS开发之路(5)— ESP32连接到MQTT服务器 本次开发是在Ubuntu下的,使用的模块是ESP12F,32Mbit的flash。程序基于ESP8266_RTOS_SDK-3.x的工程 。 一、代码准备 从上个工程:ESP8266 RTOS开发之路(4)— ...

    ESP8266 RTOS开发之路(5)— ESP8266连接到MQTT服务器

    本次开发是在Ubuntu下的,使用的模块是ESP12F,32Mbit的flash。程序基于ESP8266_RTOS_SDK-3.x的工程 。

    一、代码准备

    从上个工程:ESP8266 RTOS开发之路(4)— 连接到WiFi,将其中的代码封装成一个wifi_connect_init()函数,新建app_wifi.c文件,在app_main.c代码的基础上,将app_main()函数修改为wifi_connect_init()函数:

    void wifi_connect_init(void)
    {
        /* 定义一个gpio配置结构体 */
        gpio_config_t gpio_config_structure;
    
        /* 初始化gpio配置结构体*/
        gpio_config_structure.pin_bit_mask = (1ULL << GPIO_LED_NUM);/* 选择gpio2 */
        gpio_config_structure.mode = GPIO_MODE_OUTPUT;              /* 输出模式 */
        gpio_config_structure.pull_up_en = 0;                       /* 不上拉 */
        gpio_config_structure.pull_down_en = 0;                     /* 不下拉 */
        gpio_config_structure.intr_type = GPIO_INTR_DISABLE;    /* 禁止中断 */ 
    
        /* 根据设定参数初始化并使能 */  
    	gpio_config(&gpio_config_structure);
    
        /* 初始化非易失性存储库 (NVS) */
        ESP_ERROR_CHECK( nvs_flash_init() );
    
        printf("ESP_WIFI_MODE_STA \n");
        wifi_init_sta();         
    }
    

    然后在app_main()函数里调用即可
    在这里插入图片描述

    二、连接到MQTT服务器

    首先,要定义一个MQTT客户端配置结构体,填入MQTT服务器的url即可即MQTT事件处理函数

    	// 1、定义一个MQTT客户端配置结构体,输入MQTT的url和MQTT事件处理函数
        esp_mqtt_client_config_t mqtt_cfg = {
            .uri = "mqtt://39.96.35.207",
            .event_handle = mqtt_event_handler,
        };
    

    然后通过esp_mqtt_client_init获取一个MQTT客户端结构体指针,参数是MQTT客户端配置结构体

        // 2、通过esp_mqtt_client_init获取一个MQTT客户端结构体指针,参数是MQTT客户端配置结构体
        esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);
    

    接下来就可以开启MQTT了

    	// 3、开启MQTT
        esp_mqtt_client_start(client);
    

    编译,烧录,运行,串口终端打印如下
    在这里插入图片描述
    可以看到,已经向MQTT服务器发送了连接报文,然后打开我们的EMQ控制台,在连接选项可以看到:
    在这里插入图片描述
    查阅ESP-IDF 编程指南可以知道,在我们对MQTT客户端配置结构体最小配置时,默认的客户端ID是ESP32_+十六进制格式的MAC地址的最后3个字节,可以看到,该连接的客户端ID符合,另外一位我们没有配置用户名,使用用户名处为未定义,然后默认的clean_session为true,即清楚会话为true,mqtt keepalive的默认值为120秒,和连接界面显示的心跳时间相同;
    我们在MQTT客户端配置结构体中设置用户名为ESP8266_LED,客户端ID设置为ESP8266_MQTT
    在这里插入图片描述
    编译,烧录,运行,可以看到,连接界面的用户名和客户端ID也相应的改变了
    在这里插入图片描述

    二、通过MQTT发布和订阅消息

    我们在MQTT事件处理函数处理有关MQTT的事件,首先,获取MQTT客户端结构体指针

        // 获取MQTT客户端结构体指针
        esp_mqtt_client_handle_t client = event->client;
    

    然后通过事件ID来分别处理对应的事件,首先,连接成功事件,连接成功后,我们订阅一个主题,发布一个主题,

        // 通过事件ID来分别处理对应的事件
        switch (event->event_id) 
        {
            // 建立连接成功
            case MQTT_EVENT_CONNECTED:
                printf("MQTT_client cnnnect to EMQ ok. \n");
                // 发布主题,主题消息为“I am ESP32.”,自动计算有效载荷,qos=1
                esp_mqtt_client_publish(client, "ESP8266_Publish", "I am ESP8266.", 0, 1, 0);
                // 订阅主题,qos=0
                esp_mqtt_client_subscribe(client, "ESP8266_Subscribe", 0);
                break;
         }
    

    然后还有其他事件的处理也添加进去

    		// 客户端断开连接   
            case MQTT_EVENT_DISCONNECTED:
                printf("MQTT_client have disconnected. \n");
                break;
            // 主题订阅成功
            case MQTT_EVENT_SUBSCRIBED:
                printf("mqtt subscribe ok. msg_id = %d \n",event->msg_id);
                break;
            // 取消订阅
            case MQTT_EVENT_UNSUBSCRIBED:
                printf("mqtt unsubscribe ok. msg_id = %d \n",event->msg_id);
                break;
            // 主题发布成功
            case MQTT_EVENT_PUBLISHED:
                printf("mqtt published ok. msg_id = %d \n",event->msg_id);
                break;
            // 已收到订阅的主题消息
            case MQTT_EVENT_DATA:
                printf("mqtt received topic: %.*s \n",event->topic_len, event->topic);
                printf("topic data: %.*s\r\n", event->data_len, event->data);
                break;
            // 客户端遇到错误
            case MQTT_EVENT_ERROR:
                printf("MQTT_EVENT_ERROR \n");
                break;
    

    编译,烧录,运行,可以看到,连接成功,主题发布成功,主题订阅成功
    在这里插入图片描述
    我们打开MQTTfx可以收到主题的消息:
    在这里插入图片描述
    然后通过在MQTTfx发布一个主题消息,可以看到,ESP8266接受主题和主题消息:
    在这里插入图片描述

    三、控制LED

    接下来我们通过MQTT来控制开发板上RGB灯的亮灭,首先,查阅原理图,得到RGB灯的连接引脚
    在这里插入图片描述
    然后我们定义引脚编号:

    #define GPIO_LED_R_NUM 15 
    #define GPIO_LED_G_NUM 12
    #define GPIO_LED_B_NUM 13
    

    然后编写RGB初始化函数:

    void RGB_LED_init(void)
    {
        /* 定义一个gpio配置结构体 */
        gpio_config_t gpio_config_structure;
    
        /* 初始化gpio配置结构体*/
        gpio_config_structure.pin_bit_mask = (1ULL << GPIO_LED_R_NUM);  /* 选择gpio15 */
        gpio_config_structure.mode = GPIO_MODE_OUTPUT;                  /* 输出模式 */
        gpio_config_structure.pull_up_en = 0;                           /* 不上拉 */
        gpio_config_structure.pull_down_en = 0;                         /* 不下拉 */
        gpio_config_structure.intr_type = GPIO_INTR_DISABLE;            /* 禁止中断 */ 
    
        /* 根据设定参数初始化并使能 */  
    	gpio_config(&gpio_config_structure);
    
        gpio_config_structure.pin_bit_mask = (1ULL << GPIO_LED_G_NUM);/* 选择gpio12 */
    	gpio_config(&gpio_config_structure);
    
        gpio_config_structure.pin_bit_mask = (1ULL << GPIO_LED_B_NUM);/* 选择gpio13 */
    	gpio_config(&gpio_config_structure);
    }
    

    还有控制函数:

    #define LED_ON  1
    #define LED_OFF 0
    
    void RGB_LED_Ctrl(int LED_Ctrl)
    {
        gpio_set_level(GPIO_LED_R_NUM, LED_Ctrl); 
        gpio_set_level(GPIO_LED_G_NUM, LED_Ctrl); 
        gpio_set_level(GPIO_LED_B_NUM, LED_Ctrl); 
    }
    

    然后通过收到的主题消息来控制LED,

            sprintf(mag_data,"%.*s",event->data_len, event->data);
            if(strcmp(mag_data,"LED_ON") == 0)
            {
                RGB_LED_Ctrl(LED_ON);
            }      
            else if(strcmp(mag_data,"LED_OFF") == 0)
            {
                RGB_LED_Ctrl(LED_OFF);
            } 
    

    通过MQTTfx向ESP8266_Subscribe主题发送LED_ON,可以看到,LED点亮,串口打印信息
    在这里插入图片描述
    通过MQTTfx向ESP8266_Subscribe主题发送LED_OFF,可以看到,LED熄灭,串口打印信息
    在这里插入图片描述
    另外添加一个查询LED状态的功能;
    首先添加一个LED状态记录变量,然后在LED控制函数中修改其值:

    static int LED_STATE = LED_OFF;
    
    void RGB_LED_Ctrl(int LED_Ctrl)
    {
        LED_STATE = LED_Ctrl;
        gpio_set_level(GPIO_LED_R_NUM, LED_Ctrl); 
        gpio_set_level(GPIO_LED_G_NUM, LED_Ctrl); 
        gpio_set_level(GPIO_LED_B_NUM, LED_Ctrl); 
    }
    

    接收到ESP8266_Subscribe主题消息为LED_IS时,将LED的状态在主题ESP8266_Publish发送出去:

    	else if (strcmp(mag_data,"LED_IS") == 0)
    	{
    	    if(LED_STATE == LED_ON)
    	        esp_mqtt_client_publish(client, "ESP8266_Publish", "LED_STATE_ON", 0, 1, 0);
    	    else
    	        esp_mqtt_client_publish(client, "ESP8266_Publish", "LED_STATE_OFF", 0, 1, 0);
    	}    
    	break;
    

    编译,烧录,运行,可以看到,查询状态成功
    在这里插入图片描述

    四、代码

    贴上app_main.c的完整代码

    #include "string.h"
    #include "stdlib.h"
    #include "freertos/FreeRTOS.h"
    #include "freertos/task.h"
    #include "freertos/event_groups.h"
    #include "esp_wifi.h"
    #include "esp_event.h"
    #include "esp_log.h"
    #include "esp_system.h"
    #include "nvs_flash.h"
    #include "tcpip_adapter.h"
    #include "esp_smartconfig.h"
    #include "smartconfig_ack.h"
    #include "driver/gpio.h"
    
    #include "lwip/sockets.h"
    #include "lwip/dns.h"
    #include "lwip/netdb.h"
    
    #include "mqtt_client.h"
    
    #define GPIO_LED_NUM 2
    
    #define GPIO_LED_R_NUM 15 
    #define GPIO_LED_G_NUM 12
    #define GPIO_LED_B_NUM 13
    
    #define LED_ON  1
    #define LED_OFF 0
    
    static int LED_STATE = LED_OFF;
    
    void RGB_LED_Ctrl(int LED_Ctrl)
    {
        LED_STATE = LED_Ctrl;
        gpio_set_level(GPIO_LED_R_NUM, LED_Ctrl); 
        gpio_set_level(GPIO_LED_G_NUM, LED_Ctrl); 
        gpio_set_level(GPIO_LED_B_NUM, LED_Ctrl); 
    }
    
    void RGB_LED_init(void);
    void wifi_connect_init(void);
    
    static esp_err_t mqtt_event_handler(esp_mqtt_event_handle_t event);
    
    void app_main(void)
    {
        /* 打印Hello world! */
        printf("Hello world!\n");
        RGB_LED_init();
    
        /* 连接WiFi */
        wifi_connect_init();
    
        // 1、定义一个MQTT客户端配置结构体,输入MQTT的url和MQTT事件处理函数
        esp_mqtt_client_config_t mqtt_cfg = {
            .uri = "mqtt://39.96.35.207",
            .client_id = "ESP8266_MQTT",
            .username = "ESP8266_LED",
            .event_handle = mqtt_event_handler,
        };
    
        // 2、通过esp_mqtt_client_init获取一个MQTT客户端结构体指针,参数是MQTT客户端配置结构体
        esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);
    
        // 3、开启MQTT
        esp_mqtt_client_start(client);
    
        while(1)
        {
            gpio_set_level(GPIO_LED_NUM, 0);        /* 熄灭 */
            vTaskDelay(500 / portTICK_PERIOD_MS);   /* 延时500ms*/
            gpio_set_level(GPIO_LED_NUM, 1);        /* 点亮 */
            vTaskDelay(500 / portTICK_PERIOD_MS);   /* 延时500ms*/
        }
               
    }
    
    /* MQTT事件处理函数 */
    static esp_err_t mqtt_event_handler(esp_mqtt_event_handle_t event)
    {
        char mag_data[100];
        // 获取MQTT客户端结构体指针
        esp_mqtt_client_handle_t client = event->client;
    
        // 通过事件ID来分别处理对应的事件
        switch (event->event_id) 
        {
            // 建立连接成功
            case MQTT_EVENT_CONNECTED:
                printf("MQTT_client cnnnect to EMQ ok. \n");
                // 发布主题,主题消息为“I am ESP32.”,自动计算有效载荷,qos=1
                esp_mqtt_client_publish(client, "ESP8266_Publish", "I am ESP8266.", 0, 1, 0);
                // 订阅主题,qos=0
                esp_mqtt_client_subscribe(client, "ESP8266_Subscribe", 0);
                break;
            // 客户端断开连接   
            case MQTT_EVENT_DISCONNECTED:
                printf("MQTT_client have disconnected. \n");
                break;
            // 主题订阅成功
            case MQTT_EVENT_SUBSCRIBED:
                printf("mqtt subscribe ok. msg_id = %d \n",event->msg_id);
                break;
            // 取消订阅
            case MQTT_EVENT_UNSUBSCRIBED:
                printf("mqtt unsubscribe ok. msg_id = %d \n",event->msg_id);
                break;
            // 主题发布成功
            case MQTT_EVENT_PUBLISHED:
                printf("mqtt published ok. msg_id = %d \n",event->msg_id);
                break;
            // 已收到订阅的主题消息
            case MQTT_EVENT_DATA:
                printf("mqtt received topic: %.*s \n",event->topic_len, event->topic);
                printf("topic data: [%.*s]\r\n", event->data_len, event->data);
                sprintf(mag_data,"%.*s",event->data_len, event->data);
                if(strcmp(mag_data,"LED_ON") == 0)
                {
                    RGB_LED_Ctrl(LED_ON);
                }      
                else if(strcmp(mag_data,"LED_OFF") == 0)
                {
                    RGB_LED_Ctrl(LED_OFF);
                }
                else if (strcmp(mag_data,"LED_IS") == 0)
                {
                    if(LED_STATE == LED_ON)
                        esp_mqtt_client_publish(client, "ESP8266_Publish", "LED_STATE_ON", 0, 1, 0);
                    else
                        esp_mqtt_client_publish(client, "ESP8266_Publish", "LED_STATE_OFF", 0, 1, 0);
                }    
                break;
            // 客户端遇到错误
            case MQTT_EVENT_ERROR:
                printf("MQTT_EVENT_ERROR \n");
                break;
        }
        return ESP_OK;
    }
    
    
    void RGB_LED_init(void)
    {
        /* 定义一个gpio配置结构体 */
        gpio_config_t gpio_config_structure;
    
        /* 初始化gpio配置结构体*/
        gpio_config_structure.pin_bit_mask = (1ULL << GPIO_LED_R_NUM);  /* 选择gpio15 */
        gpio_config_structure.mode = GPIO_MODE_OUTPUT;                  /* 输出模式 */
        gpio_config_structure.pull_up_en = 0;                           /* 不上拉 */
        gpio_config_structure.pull_down_en = 0;                         /* 不下拉 */
        gpio_config_structure.intr_type = GPIO_INTR_DISABLE;            /* 禁止中断 */ 
    
        /* 根据设定参数初始化并使能 */  
    	gpio_config(&gpio_config_structure);
    
        gpio_config_structure.pin_bit_mask = (1ULL << GPIO_LED_G_NUM);/* 选择gpio12 */
    	gpio_config(&gpio_config_structure);
    
        gpio_config_structure.pin_bit_mask = (1ULL << GPIO_LED_B_NUM);/* 选择gpio13 */
    	gpio_config(&gpio_config_structure);
    }
    
    
    展开全文
  • SDK: ESP8266 RTOS SDK 3.0 二、硬件原理 三、软件功能 通过按键S2长按的时间长度不同来实现调用软件上的功能。 1、当按键S2按下时间大于40ms,执行程序1 2、当按键S2按下时间大于2000ms,执行程序2 3、当按键S2按...
  • ESP8266 RTOS软件开发套件 ** 重要通知 ** 关于这个仓库 一个新的分支模型应用于此存储库,该模型包括一个主分支和一个发布分支。 1.主分支 master分支是一个集成分支,其中收集了错误修复/功能以进行编译和功能测试...
  • 使用 (v2.1.0) 建造 准备SDK /工具链: $ docker-compose build sdk 构建固件映像: $ USER_ID=$UID docker-compose up build 安装 闪烁以更正nodeMCU设备: TTY_DEV=/dev/ttyUSB? docker-compose up flash ...
  • 参考安信可ESP8266IDE 搭建的ESP8266 RTOS SDK2.0 开发环境。对应的博客地址为:https://blog.csdn.net/qianxilin/article/details/82378085
  • ESP8266 RTOS 3.0环境搭建

    2020-05-13 17:15:56
    在window下进行 ESP8266 RTOS 3.0的IDF框架的环境搭建
  • 一、关于ESP_IDF的菜单配置 在终端调用make menuconfig后会弹出如下界面: 键盘方向键+回车键选择:component config->MQTT(Paho) 会跳出以下界面 MQTT version 百度 这里选3.1.1 MQTT client ID 服务器...
  • ESP8266 RTOS的Flash分区和non_os的分区有所区别,在esp-aliyun中又使用了定制的分区表文件partitions_esp8266.csv。 以默认的partitions_esp8266.csv内容为例: #Name, Type, SubType, Offset, Size, Flags #Note: ...
  • 首先认识一下这esp8266模块是怎样的 一般,我们买回来的模块都像上图那样,有两个芯片以及一些外围元件,而我们选购的时候,不同大小的flash芯片,价格也不一样,模块型号可以看下面 flash芯片是用来存储程序...
  • 乐鑫esp8266学习rtos3.0 无需外网,如何实现在本地局域网与控制端做数据交换,分享开发心得。对应博客 https://xuhong.blog.csdn.net/article/details/102610767
  • 认识esp8266 Rtos 3.0 sdk 工程结构,esp8266如何向esp-idf工程靠近的,如何自定义头文件编译? 37、 Esp8266学习rtos3.0笔记第2篇 : 你要找的基本外设功能都在这里了,包括Gpio、Pwm 和 Uart 接口使用。 38、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,797
精华内容 1,518
关键字:

esp8266rtos