ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ESP-12F连接机智云IoT、OTA升级设置

2020-08-08 17:03:44  阅读:303  来源: 互联网

标签:info LOG 12F ESP OTA rtc 固件 data GIZWITS


这里只做简单介绍,机智云官方文档已经很全了。

以下文档以台灯为例,一般台灯需要2个数据点,开关 和 PWM调光。


数据点设置:


产测工具设置

产测工具添加需要测试的功能。


修改固件代码,添加功能

将下载的固件代码解压,进入目录:SoC_ESP8266_32M_source/app/Gizwits 修改 文件 gizwits_product.c

修改:

/* @param [in] info: event queue
* @param [in] data: protocol data
* @param [in] len: protocol data length
* @return NULL
* @ref gizwits_protocol.h
*/
int8_t ICACHE_FLASH_ATTR gizwitsEventProcess(eventInfo_t *info, uint8_t *data, uint32_t len)
{
    uint8_t i = 0;
    uint32 duty = 0;

    dataPoint_t * dataPointPtr = (dataPoint_t *)data;
    moduleStatusInfo_t * wifiData = (moduleStatusInfo_t *)data;

    if((NULL == info) || (NULL == data))
    {
        GIZWITS_LOG("!!! gizwitsEventProcess Error \n");
        return -1;
    }

    for(i = 0; i < info->num; i++)
    {
        switch(info->event[i])
        {
        case EVENT_switch_status :
            currentDataPoint.valueswitch_status = dataPointPtr->valueswitch_status;
            GIZWITS_LOG("==> Evt: EVENT_switch_status %d \n", currentDataPoint.valueswitch_status);
            if(0x01 == currentDataPoint.valueswitch_status)
            {
                //user handle
		gpio_output_set(BIT5, 0, BIT5, 0);  // 添加 LED 打开 代码,对应ESP模块 控制引脚 GPIO5
            }
            else
            {
                //user handle
                gpio_output_set(0, BIT5, BIT5, 0);  // 添加 LED 关闭 代码,对应ESP模块 控制引脚 GPIO5
            }
            break;
            
            ....
                

修改固件版本号(OTA升级用)

进入目录:SoC_ESP8266_32M_source/app/Gizwits,修改文件:gizwits_product.h

/**
* Gagent minor version number for OTA upgrade
* OTA hardware version number: 00ESP826
* OTA software version number: 040206xx // "xx" is version number defaults to "25", consistent with the Gagent library version
*/
#define SDK_VERSION                             "28" 	// 原来25,版本迭代,在原来的基础上加1

有PWM功能时,代码的设置

每次修改数据点后,,SOC/MCU固件代码需要重新生成。

修改gizwits_product.cuser_main.c

// 在 user_main.c 中添加 PWM 功能的初始化。
/**
* @brief program entry function

* In the function to complete the user-related initialization
* @param none
* @return none
*/
void ICACHE_FLASH_ATTR user_init(void)
{
    uint32_t system_free_size = 0;

    wifi_station_set_auto_connect(1);
    wifi_set_sleep_type(NONE_SLEEP_T);//set none sleep mode
    espconn_tcp_set_max_con(10);
    uart_init_3(9600,115200);
    UART_SetPrintPort(1);
    GIZWITS_LOG( "---------------SDK version:%s--------------\n", system_get_sdk_version());
    GIZWITS_LOG( "system_get_free_heap_size=%d\n",system_get_free_heap_size());

    struct rst_info *rtc_info = system_get_rst_info();
    GIZWITS_LOG( "reset reason: %x\n", rtc_info->reason);
    if (rtc_info->reason == REASON_WDT_RST ||
        rtc_info->reason == REASON_EXCEPTION_RST ||
        rtc_info->reason == REASON_SOFT_WDT_RST)
    {
        if (rtc_info->reason == REASON_EXCEPTION_RST)
        {
            GIZWITS_LOG("Fatal exception (%d):\n", rtc_info->exccause);
        }
        GIZWITS_LOG( "epc1=0x%08x, epc2=0x%08x, epc3=0x%08x, excvaddr=0x%08x, depc=0x%08x\n",
                rtc_info->epc1, rtc_info->epc2, rtc_info->epc3, rtc_info->excvaddr, rtc_info->depc);
    }

    if (system_upgrade_userbin_check() == UPGRADE_FW_BIN1)
    {
        GIZWITS_LOG( "---UPGRADE_FW_BIN1---\n");
    }
    else if (system_upgrade_userbin_check() == UPGRADE_FW_BIN2)
    {
        GIZWITS_LOG( "---UPGRADE_FW_BIN2---\n");
    }

    keyInit();
    gizwitsInit();

	// pwm初始化
    static uint32 pin_info_list[][3]={PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12, 12};
    static uint32 duty=1000;
    pwm_init(1000, &duty, 1, pin_info_list);


    GIZWITS_LOG("--- system_free_size = %d ---\n", system_get_free_heap_size());
}

// 在gizwits_product.c 中添加 pwm 控制代码

/* @param [in] info: event queue
* @param [in] data: protocol data
* @param [in] len: protocol data length
* @return NULL
* @ref gizwits_protocol.h
*/
int8_t ICACHE_FLASH_ATTR gizwitsEventProcess(eventInfo_t *info, uint8_t *data, uint32_t len)
{
    uint8_t i = 0;
    uint32 duty = 0;

    dataPoint_t * dataPointPtr = (dataPoint_t *)data;
    moduleStatusInfo_t * wifiData = (moduleStatusInfo_t *)data;

    if((NULL == info) || (NULL == data))
    {
        GIZWITS_LOG("!!! gizwitsEventProcess Error \n");
        return -1;
    }

    for(i = 0; i < info->num; i++)
    {
        switch(info->event[i])
        {
        case EVENT_switch_status :
            currentDataPoint.valueswitch_status = dataPointPtr->valueswitch_status;
            GIZWITS_LOG("==> Evt: EVENT_switch_status %d \n", currentDataPoint.valueswitch_status);
            if(0x01 == currentDataPoint.valueswitch_status)
            {
                gpio_output_set(BIT5, 0, BIT5, 0);  // Lamp ON
                //user handle
            }
            else
            {
                gpio_output_set(0, BIT5, BIT5, 0);  // Lamp ON
                //user handle
            }
            break;


        case EVENT_brightness:
            currentDataPoint.valuebrightness= dataPointPtr->valuebrightness;
            GIZWITS_LOG("==> Evt:EVENT_brightness %d\n",currentDataPoint.valuebrightness);
            
            //user handle
            // 添加pwm控制代码
            duty = currentDataPoint.valuebrightness * 100;   // (22222 => 20000 => 10000 => 5000) / 100
            pwm_set_duty(duty, 0);
            pwm_start();
            break;
                
            ......
                

PWM设置,参考:

  • 《ESP8266_SDK_API参考指南 esp8266_non_os_sdk_api_reference_cn.pdf》
  • 《ESP8266技术参考 esp8266-technical_reference_cn.pdf》

注意:初始化 PWM时 的 引脚顺序,

static  uint32  pin_info_list[][3] = {
    PERIPHS_IO_MUX_MTDI_U,
    FUNC_GPIO12,
    12
};


编译机智云固件

Linux平台,按照官方说明编译:

  • 源码编译方式
cd app/
./gen_misc.sh 

注: 机智云固件目前使用的是 NONOS2.0.x 版本,交叉编译器必须是 4.8.x 版本。


OTA升级

#define   SDK_VERSION         "25"    // OTA固件版本号,必须为两位数, 默认为当前Gagent库版本号
  • 推送的 OTA固件版本号 必须大于正工作的 OTA固件版本号。

固件命名方式(固件名+固件系列+版本号+其他.bin),选择固件后,下面的选项会自动填入。

如下:


保存后,会先验证固件,验证成功后才能推送。


参考资料

参考机智云,开发者文档中心。


end


标签:info,LOG,12F,ESP,OTA,rtc,固件,data,GIZWITS
来源: https://www.cnblogs.com/wybliw/p/13458448.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有