【esp32】esp-ali-smartliving源码分析

一、esp-ali-smartliving介绍

esp-ali-smartliving是乐鑫基于阿里提供的C LINK SDK rel_1.6.0开发的连接阿里云生活物联网平台、天猫精灵平台的SDK。

二、esp-ali-smartliving执行流程

2.1 恢复出厂设置

esp_err_t factory_restore_init(void)
{
#ifndef CONFIG_IDF_TARGET_ESP8266
    if (esp_sleep_get_wakeup_cause() != ESP_SLEEP_WAKEUP_UNDEFINED) {
        HAL_Kv_Del(FACTORY_QUICK_REBOOT_TIMES);
        return ESP_OK;
    }
#endif

    TimerHandle_t timer = xTimerCreate("factory_clear", FACTORY_QUICK_REBOOT_TIMEOUT / portTICK_RATE_MS,
                                       false, NULL, factory_restore_timer_handler);

    xTimerStart(timer, portMAX_DELAY);

    return factory_restore_handle();
}

连续重启设备一定次数将使设备恢复出厂设置,出厂设置的过程为

  • 设置配网初始化KV标志AWSS_KV_RST
  • 删除KV中的ssid和passwd
  • 设置配网模式为sc模式(smartconfig)

2.2 初始化LED灯

(略)

2.3 连接管理初始化

esp_err_t conn_mgr_init(void)
{
    extern esp_err_t HAL_Kv_Init(void);
    HAL_Kv_Init();

    tcpip_adapter_init();

    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    ESP_ERROR_CHECK(esp_event_loop_init(conn_mgr_wifi_event_loop_handler, NULL));
    ESP_ERROR_CHECK(esp_wifi_init(&cfg));
    ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM));
    ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
    ESP_ERROR_CHECK(esp_wifi_start());

    return ESP_OK;
}
  • 初始化tcpip适配器
  • 创建事件循环event loop,参考event loop中,定义了两类事件的处理:在获取到IP的时候保存ssid和passwd到kv中;在断网的时候进行重连。
  • 初始化wifi外设
  • 设置wifi的内存
  • 设置wifi的运行方式
  • 启动wifi

2.4 wifi连接

  • 注册获取IP的事件,在获取到IP后启动linkkit线程与阿里云通信
  • 注册linkkit事件回调,用于监测与阿里云的通信状态
  • 启动wifi连接:根据kv中的是否保存了ssid来判断是否配置过wifi,如果没有配置过启动配网,之后启迪

2.5 阿里云物模型接口与阿里云对接

wifi连接成功后在事件处理中启动阿里云物模型线程。

你可能感兴趣的:(esp32,esp32)