这里只做简单介绍,机智云官方文档已经很全了。
以下文档以台灯为例,一般台灯需要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.c
和 user_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