ESP32环境搭建Ubantu20

前期准备工作

1、更新Python3版本

python版本必须在3.8.x以上,否则莫名奇妙的错。

方法

2、安装pip

sudo apt install python-pip

python -m pip install pyyaml xlrd

注意这里有python和python3的问题,缺什么就装什么。

具体步骤

//============================================================

参考

环境:Ubuntu20

Step 1

git clone https://gitee.com/EspressifSystems/esp-gitee-tools.git

Step 2

git clone https://gitee.com/EspressifSystems/esp-idf.git

        或:指定版本

git clone -b release/v4.3 https://gitee.com/EspressifSystems/esp-idf.git

Step 3 更新 submodules

方式一:

进入 esp-gitee-tools 目录,export submodule-update.sh 所在路径,方便后期使用,如:

cd esp-gitee-tools
export EGT_PATH=$(pwd)

进入 esp-idf 目录执行 submodule-update.sh 脚本:

cd esp-idf
$EGT_PATH/submodule-update.sh

方式二:

submodule-update.sh 脚本支持将待更新 submodules 的工程路径作为参数传入,例如:submodule-update.sh PATH_OF_PROJ

假如 Step 2 中 clone 的 esp-idf 位于 ~/git/esp32-sdk/esp-idf 目录,可使用以下方式来更新:

cd esp-gitee-tools
./submodule-update.sh ~/git/esp32-sdk/esp-idf

//============================================================

1、通过ssh拉取esp-idf源码(下载压缩包解压不可以)

git clone -b release/v4.2 git@github.com:espressif/esp-idf.git

2、安装一些必要的工具

cd ~/esp/esp-idf
export IDF_GITHUB_ASSETS="dl.espressif.com/github_assets"

./install.sh esp32

. ./export.sh

配置环境变量

获取esp-idf当前路径

hulyi@FS-DS-SW-DAVID:/mnt/d/ESP32/ESP_AT/esp-idf$ pwd

/mnt/d/ESP32/ESP_AT/esp-idf

vim ~/.bashrc

alias get_idf='. $HOME/esp/esp-idf/export.sh'

export IDF_PATH=/mnt/d/ESP32/ESP_AT/esp-idf

source ~/.bashrc

3、尝试编译自带工程

cd examples/get-started/hello_world/

make

make clean

如果有build.py,执行

./build.py menuconfig

./build.py build

4、回退到ESP_AT目录下

添加esp-idf路径

vim ~/.profile

export IDF_PATH=~/ESP_AT/esp-idf

export PATH="$IDF_PATH/tools:$PATH"

source ~/.profile

5、通过ssh下载esp-at源代码

git clone -b release/v2.2.0.0_esp32 git@github.com:espressif/esp-at.git

6、把esp-idf 拷贝到esp-at文件夹中

cp -r esp-idf/ esp-at

cd esp-at

7、在当前窗口使用ESP-IDF

cd esp-at

. $HOME/ESP_AT/esp-idf/export.sh

cd ..

7.1、可以在任何终端窗口中运行 get_idf 来设置或刷新 esp-idf 环境

vim ~/.bashrc

alias get_idf='. $HOME/ESP_AT/esp-idf/export.sh

source ~/.bashrc

此操作将清除并初始化项目之前的编译和配置(刚买回的模组,不进行此操作,程序烧录成功后会无限重启)

idf.py set-target esp32

hulyi@FS-DS-SW-DAVID:/mnt/d/ESP32/ESP_AT/esp-at$ ./build.py menuconfig
Platform name:
1. PLATFORM_ESP32
2. PLATFORM_ESP8266
3. PLATFORM_ESP32S2
4. PLATFORM_ESP32C3
choose(range[1,4]):1

Module name:
1. WROOM-32
2. WROVER-32
3. PICO-D4
4. SOLO-1
5. MINI-1 (description: ESP32-U4WDH chip inside)
6. ESP32-D2WD (description: 2MB flash, No OTA)
7. ESP32_QCLOUD (description: QCLOUD TX:17 RX:16)
choose(range[1,7]):2

Enable silence mode to remove some logs and reduce the firmware size?
0. No
1. Yes
choose(range[0,1]):0

....

....

此步骤可能遇到的问题

1、找不到cmake

sudo apt install cmake

cmake --version

8、编译

./build.py build

9、烧录

./build.py -p (PORT) flash

9.1、在 Linux 中添加用户到 dialout

当前登录用户应当可以通过 USB 对串口进行读写操作。在多数 Linux 版本中,您都可以通过以下命令,将用户添加到 dialout 组,从而获许读写权限:

sudo usermod -a -G dialout $USER

reboot 重启后生效

请重新登录,确保串口读写权限生效。

重启后无用

sudo chmod -R 777 /dev/ttyUSB0

9.2、烧录固件

开发板使用串口连接到Linux主机,在linux下串口设备号以 /dev/tty 开始,通过插拔前后的不同找出设备号:

找出设备号后,使用下面的命令烧录:

idf.py -p /dev/ttyUSB0 flash

打开监视器

idf.py -p PORT flash monitor

可使用快捷键 Ctrl+],退出 IDF 监视器。

重打开工程

1、在esp-at路径下执行

. $HOME/ESP_AT/esp-idf/export.sh

或 get_idf  (前提是配置了别名 步骤7.1)

2、build

./build.py build

3、如果失败,可尝试(此操作将清除并初始化项目之前的编译和配置)

./build.py set-target esp32

硬件连接

此模组烧录用usb

AT指令发送通过usb->ttl连接引脚

ESP-AT 二次开发

说明:此次工作是要将Quecthing移植到ESP-AT工程中。

           在ESP-AT工程中的更改点会在程序后加  /*adapter:*/

在ESP-AT中添加一个组件quecSDK,用于存放Quecthing结构

:在ESP-AT工程最外层的 CMakeLists.txt 中添加一下代码(不加会编译不过)

set(EXTRA_COMPONENT_DIRS ./quecSDK) #/*adapter:*/

        -ESP-AT/

                -quecSDK/

                        -Inc/

                                -test.h

                        -Src

                                -test.c

                        CMakeLists.txt

                        quecthing.mk

test.h

#ifndef __TEST_H__
#define __TEST_H__

void test_func(void);

#endif

test.c

#include <stdio.h>
#include "test.h"

void test_func(void)
{
    printf("This is a test!\r\n");
}

CMakeLists.txt

idf_component_register(SRCS "./Src/test.c"
                    INCLUDE_DIRS "./Inc")

quecthing.mk      

QUECTHING_ADD_INCLUDEDIRS := Inc

QUECTHING_SRCDIRS := Src

此结构已完整,在ESP-AT工程的主函数中创建一个任务,延时1s调用test_func();

-app_main.c

void test_task(void)
{
    while(1)
    {
        test_func();
        vTaskDelay(1000);
    }

}

void app_main()

{
    //...
    //...
    xTaskCreate(test_task , "at_sdio_recv_task" , 4096 , NULL , 2 , NULL);
}

移植Quecthing

过程

quecSDK/CMakeLists.txt

file(GLOB_RECURSE srcs *.c)

idf_component_register(SRCS ${srcs}
                 INCLUDE_DIRS  "."
                               "./cloud"
                               "./cloud/at"
                               "./cloud/common"
                               "./cloud/mqtt"
                               "./driverLayer"
                               "./kernel"
                               "./thirdLib/mqtt"
                 REQUIRES "components"
)
     

遇到的问题

1、在esp-at文件夹下创建quecSDK文件夹用于存放quecthing,在做适配层的时候,qhal_Dev.c中需要调用esp-at/components/at/include/esp_at_core.h中声明的API,然后会报 .h文件找不到。

解决:在quecSDK的CMakeLists.txt文件中添加components的组件依赖。

REQUIRES "components"

参见上面CMakeLists.txt中的添加位置。

2、esp-at 发送AT指令时,后面要加回车换行

但是在发送透传数据时,数据后不能加

AT+QIOTSEND=1,3   //后边要加回车换行。当发送AT指令没反应时,首先考虑是不是这个问题,                                     //忘了加回车换行

>

123          //发送这个数据时后边不能加

3、received_len += esp_at_port_read_data(buf + received_len, buf_len - received_len);

因 esp_at_port_read_data 读取的数据最大长度不知道,所以要在循环里读取设备的数据,读完才可以。

4、切换ESP32的WiFi后,重连不上,先考虑是不是WiFi名和密码设置错误,不要加双引号。

5、esp32 使用mqtt连接登录不上

经过查看代码日志,发现创建完socket后,传入read函数的sockFD传成了其地址。 :(

宏开关的应用

使用宏开关,需要在工程根目录下的CMakeLists.txt文件中操作:

esp-at/CMakeLists.txt

option(VERSION_FIRMWARE         "VERSION_FIRMWARE ENABLE" ON)
option(QUEC_ENABLE_AT           "AT ENABLE"               ON)
option(CLOUD_ENABLE_QUEC_LAN    "LAN ENABLE"              ON)
option(CLOUD_ENABLE_QUEC_MQTT   "MQTT ENABLE"             ON)
option(THIRDLIB_ENABLE_MBEDTLS  "MBEDTLS ENABLE"          ON)

configure_file ("$ENV{ESP_AT_PROJECT_PATH}/components/quecSDK/config.h.in" 
                "$ENV{ESP_AT_PROJECT_PATH}/components/quecSDK/config.h")  

如果没有定义option中相关宏的值为ON,则生成的为#undef XXXX。

在quecSDK文件夹下创建文件 config.h.in

#cmakedefine VERSION_FIRMWARE "1_0_0"

#cmakedefine QUEC_ENABLE_AT
#cmakedefine CLOUD_ENABLE_QUEC_LAN
#cmakedefine CLOUD_ENABLE_QUEC_MQTT
#cmakedefine THIRDLIB_ENABLE_MBEDTLS

运行后会在configure_file()的第二个参数路径下生成config.h文件。

在使用到宏的文件中添加头文件config.h。

内存分区表修改

参考

quec_partitions_table.csv

# ESP-IDF Partition Table
# Name, Type, SubType, Offset, Size, Flags
phy_init,data,phy,0xf000,4K,
otadata,data,ota,0x10000,8K,
nvs,data,nvs,0x12000,48K,
quec_cfg,data,fat,0x1e000,4K,
quec_cfg_bak,data,fat,0x1f000,4K,
at_customize,64,0,0x20000,896K,
ota_0,app,ota_0,0x100000,1536K,
ota_1,app,ota_1,0x280000,1536K,
Create factory bin...
0x8000,partition_table/partition-table.bin
0x10000,ota_data_initial.bin
0xf000,phy_init_data.bin
0x1000,bootloader/bootloader.bin
0x100000,esp-at.bin
0x20000,at_customize.bin
0x21000,customized_partitions/ble_data.bin
0x24000,customized_partitions/server_cert.bin
0x26000,customized_partitions/server_key.bin
0x28000,customized_partitions/server_ca.bin
0x2a000,customized_partitions/client_cert.bin
0x2c000,customized_partitions/client_key.bin
0x2e000,customized_partitions/client_ca.bin
0x37000,customized_partitions/mqtt_cert.bin
0x39000,customized_partitions/mqtt_key.bin
0x3b000,customized_partitions/mqtt_ca.bin
0x30000,customized_partitions/factory_param.bin
Create /home/esp-at/ESP_AT/esp-at/build/factory/factory_WROOM-32.bin for WROOM-32 finished

 生成二进制分区表

./build.py partition_table
idf.py partition_table
./build.py -p /dev/ttyUSB0 partition_table-flash
idf.py -p /dev/ttyUSB0 partition_table-flash

:执行完 ./build.py set-target esp32 esp32 后,分区表的配置会重置为默认,需要重新配置。

移植过程中对 menuconfig 的一些配置

1、使用mqtts连接DMP时,握手时,看到握手函数的宏开关需要一些配置:

 

2

任务打印需要一些配置

void state_task(void *pvParameters)
{
    static char InfoBuffer[512] = {0};
    while (1)
    {
        vTaskList((char *)&InfoBuffer);
        printf("+---------------+------+--------+---------+\r\n");
        printf("\r\n%s\r\n", InfoBuffer);
        vTaskDelay(8000);
    }
    vTaskDelete(NULL);
}

注意:
使用 vTaskList() 前需使能:

make menuconfig -> Component config -> FreeRTOS -> Enable FreeRTOS trace facility
make menuconfig -> Component config -> FreeRTOS -> Enable FreeRTOS trace facility -> Enable FreeRTOS stats formatting functions

通过上面配置,等同于使能 FreeRTOSConfig.h 中如下两个宏:
configUSE_TRACE_FACILITY 和 configUSE_STATS_FORMATTING_FUNCTIONS

BLE

参考

参考

AT

问题:

1、蓝牙配置ssid和password时:

 ssid和password不加引号

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值