ESP8266+阿里云c-sdk学习--01环境搭建

ESP8266+阿里云c-sdk环境搭建

本文背景为Linux环境下基于vscode对esp8266+aliyun c-sdk进行开发环境搭建

ESP8266 开发环境搭建

首先在/home下新建文件夹esp,用来存放相关文件,然后前往乐鑫github地址下载ESP8266SDK,可以直接下载压缩包然后解压扫esp文件夹下,也可以直接通过终端下载

cd esp
git clone https://github.com/espressif/ESP8266_RTOS_SDK.git

等待片刻即可,然后下载编译工具xtensa-lx106-elf,在ESP8266SDK github下载地址下有下载链接,这里我们选择Linux64位的版本,将下载的文件解压到esp文件夹下
在这里插入图片描述
下在后需要配置两个环境变量,修改/home/.profile,如下所示:
在这里插入图片描述

export PATH=/home/x/myproject/esp/xtensa-lx106-elf/bin:$PATH
export IDF_PATH=/home/x/myproject/esp/ESP8266_RTOS_SDK

可以通过source .profile查看环境变量生效配置,然后通过echo $PATH查看配置,出现以下画面代表生效成功,
在这里插入图片描述
但这只是临时的,只对这个终端有效,重启电脑可以永久生效。
然后在ESP8266SDK文件夹下运行以下代码安装依赖库
python -m pip install --user -r $IDF_PATH/requirements.txt
至此esp8266的配置基本完成。

vscode 配置

通过以下代码安装vscode

    sudo add-apt-repository ppa:ubuntu-desktop/ubuntu-make
    sudo apt-get update
    sudo apt-get install ubuntu-make
    sudo umake ide visual-studio-code

安装好后可以直接在搜索里面找到软件,若是没有重启电脑即可
在这里插入图片描述
接下来是vscode 这里我只推荐两个插件,一个用于写c,一个用于代码补全
在这里插入图片描述

阿里云 C-SDK下载配置

c-skd下载地址如下aliyun c-sdk
在这里插入图片描述
下载完成后,将文件加压到ESP8266SDK文件夹下,并改名为c_sdk,下面开始配置。
配置
首先在c_sdk文件夹下打开终端,执行make menuconfig选择配置
在这里插入图片描述
然后执行make reconfig 选择esp8266
在这里插入图片描述完成后执行make生成链接库文件,在output文件夹下
在这里插入图片描述
在这里插入图片描述
将lib文件夹下文件复制备用,然后执行./extract.sh生成裁剪文件,生成的文件位于、output/eng 下
在这里插入图片描述
将生成的裁剪文件和之前复制的lib文件夹一起复制到ESP8266_RTOS_SDK/components/libiotsdk文件夹下(libiotsdk文件夹需要自己新建)在这里插入图片描述
然后新建component.mk文件,文件内容如下

COMPONENT_ADD_INCLUDEDIRS += dev_model dev_sign infra mqtt wrappers cert http http2 ota dev_reset
COMPONENT_SRCDIRS := wrappers
LIBS := iot_sdk
COMPONENT_ADD_LDFLAGS += -lpthread -L$(COMPONENT_PATH)/lib $(addprefix -l,$(LIBS))

现在配置完成了,可以开始写代码了,为了验证配置是否完成我们可以到/ESP8266_RTOS_SDK/examples/get-started/hello_world下,修改文件,将hello_world.c 文件内容太替换成下面的内容:

#include <stdio.h>
#include <string.h>
#include "mqtt_api.h"
#include "dev_reset_api.h"
#include "esp_log.h"

void HAL_Printf(const char *fmt, ...);
int HAL_GetProductKey(char product_key[IOTX_PRODUCT_KEY_LEN]);
int HAL_GetDeviceName(char device_name[IOTX_DEVICE_NAME_LEN]);

#define EXAMPLE_TRACE(fmt, ...)  \
    do { \
        HAL_Printf("%s|%03d :: ", __func__, __LINE__); \
        HAL_Printf(fmt, ##__VA_ARGS__); \
        HAL_Printf("%s", "\r\n"); \
    } while(0)

static int reset_mqtt_packet_id = 0;
static int reset_reply_received = 0;

void example_event_handle(void *pcontext, void *pclient, iotx_mqtt_event_msg_pt msg)
{
    EXAMPLE_TRACE("msg->event_type : %d", msg->event_type);
}

void example_devrst_evt_handle(iotx_devrst_evt_type_t evt, void *msg)
{
    switch (evt)
    {
        case IOTX_DEVRST_EVT_RECEIVED: {
            iotx_devrst_evt_recv_msg_t *recv_msg = (iotx_devrst_evt_recv_msg_t *)msg;
            if (recv_msg->msgid != reset_mqtt_packet_id) {
                return;
            }
            EXAMPLE_TRACE("Receive Reset Responst");
            EXAMPLE_TRACE("Msg ID: %d", recv_msg->msgid);
            EXAMPLE_TRACE("Payload: %.*s", recv_msg->payload_len, recv_msg->payload);
            reset_reply_received = 1;
        }
        break;

        default:
            break;
    }
}

int app_main()
{
    int res = 0;
    void                   *pclient = NULL;
    iotx_dev_meta_info_t    meta_info;
    iotx_mqtt_param_t       mqtt_params;

    memset(&mqtt_params, 0, sizeof(iotx_mqtt_param_t));
    memset(&meta_info, 0, sizeof(iotx_dev_meta_info_t));

    HAL_GetProductKey(meta_info.product_key);
    HAL_GetDeviceName(meta_info.device_name);

    mqtt_params.handle_event.h_fp = example_event_handle;

    pclient = IOT_MQTT_Construct(&mqtt_params);
    if (NULL == pclient) {
        EXAMPLE_TRACE("MQTT construct failed");
        return -1;
    }

    res = IOT_DevReset_Report(&meta_info, example_devrst_evt_handle, NULL);
    if (res < 0) {
        return -1;
    }
    reset_mqtt_packet_id = res;

    while (!reset_reply_received) {

        IOT_MQTT_Yield(pclient, 200);
    }

    EXAMPLE_TRACE("Example Execute Success, Now Exit...");

    return 0;
}

然后make一下看看有无报错,若是出现HAL_xxxx函数没有定义,则是在/home/x/myproject/esp/ESP8266_RTOS_SDK/components/libiotsdk/wrappers
下wrappers.c文件没有写这个函数,补充上即可。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值