(環(huán)境+源碼改寫+編譯+燒錄+iOS+Android+按鍵實時反饋)
從接觸機智云Gokit一步一坑,大坑套小坑也算挺過來了,把遇到的問題和經驗分享給大家,幫助新人少走一些彎路。
一、環(huán)境搭建
1.下載安裝eclipse一體化開發(fā)環(huán)境
下載地址:http://pan.baidu.com/s/1skRvR1j
安裝完畢之后去官方下載微信寵物屋for GoKit3(S) ESP8266源碼

Import導入soc源碼



需要修改makefile文件配置才能編譯成功
BOOT?=new
APP?=1
SPI_SPEED?=40
SPI_MODE?=QIO
SPI_SIZE_MAP?=6

二、GoKit3開發(fā)套件
1、GoKit3(S) - SoC版(樂鑫模組(GoKit3轉接板)+底板+GoKit3功能板)


2、GoKit3玩法
根據(jù)使用方式不同可分MCU版和SOC版兩大類
(了解SoC與MCU的區(qū)別),每個類型又分不同方式的玩法。
2.1、MCU版

MCU版的玩法與GoKit2一樣,采用底板+擴展板+模組的方式(如上圖所示)。
2.2、SOC版
模組+擴展版為SOC版本不需要底板。

2.3、模組組裝時分為倆種模式(有坑不要插錯了)
MCU模式
SOC模式
三、燒錄選項配置
1. 前三個 ‘.bin’ 文件都在\bin 目錄下,選擇對應的名稱的 ‘.bin’文件即可。
最后一個.bin 文件默認為SOC版固件:user1.4096.new.6.bin
位置:\bin\upgrade\user1.4096.new.6.bin

2.GoKit套件SOC版燒錄模式接法(有坑不要接錯了)
需要注意RX TX接法
GND接GND
RX接TX
TX接RX

將撥碼開關設為程序燒錄模式(下?lián)芪恢?/strong>)

設備管理器選擇com口 設置波特率


相繼按下燒錄工具的“START”鍵與WiFi模組的“Reset”鍵,開始燒錄程序:


若顯示“完成”及燒錄成功
四、源碼改寫
只需要關心文件路徑為“GizLamp\app”下面的幾個地方:
如果你需要添加8266的外設,只需要在
“GizLamp\app\driver”文件目錄下添加相應外設的驅動的.c文件
“GizLamp\app\include\driver”文件目錄下添加相應外設的驅動的.h文件
App通過云端下發(fā)控制事件處理,可以在
“GizLamp\app\Gizwits”文件目錄下“gizwits_product.c”文件里面的
“gizwitsEventProcess()函數(shù)里添加驅動外設執(zhí)行事件函數(shù)即可實現(xiàn)控制設備
上報云端狀態(tài)事件處理,可以在
“GizLamp\app\user”文件目錄下“user_main.c”文件里面的“userTimerFunc()”函數(shù)里添加數(shù)據(jù)狀態(tài)上報函數(shù)即可以實現(xiàn)狀態(tài)上報。

第一步先修改Gizwits目錄下的gizwits_protocol.h里的PRODUCT_KEY
/**@name Product Key (產品標識碼)
* @{
*/
#define PRODUCT_KEY "xxxxxxxxxxxxxxxxxxxxxxx"
然后我們要實現(xiàn)按鍵APP實時反饋狀態(tài)
我們以key1鍵為例 在user_main.c文件修改key1ShortPress
LOCAL void ICACHE_FLASH_ATTR key1ShortPress(void)
{
os_printf("#### KEY1 short press ,Production Mode\n");
//判斷當前LED狀態(tài)取反賦值
if(0x01 == currentDataPoint.valueLED_OnOff)
{
rgbControl(0, 0, 0);
}
else
{
rgbControl(254, 0, 0);
}
currentDataPoint.valueLED_OnOff = !currentDataPoint.valueLED_OnOff;
}
gizwitsEventProcess()驅動外設執(zhí)行事件函數(shù)
根據(jù)數(shù)據(jù)點執(zhí)行相應邏輯
int8_t ICACHE_FLASH_ATTR gizwitsEventProcess(eventInfo_t *info, uint8_t *data, uint32_t len)
{
uint8_t i = 0;
dataPoint_t *dataPointPtr = (dataPoint_t *)data;
moduleStatusInfo_t *wifiData = (moduleStatusInfo_t *)data;
if((NULL == info) || (NULL == data))
{
return -1;
}
for(i=0; i<info->num; i++)
{
switch(info->event[i])
{
case EVENT_LED_ONOFF:
currentDataPoint.valueLED_OnOff = dataPointPtr->valueLED_OnOff;
os_printf("Evt: EVENT_LED_ONOFF %d \n", currentDataPoint.valueLED_OnOff);
if(0x01 == currentDataPoint.valueLED_OnOff)
{
rgbControl(254, 0, 0);
}
else
{
rgbControl(0, 0, 0);
}
break;
case EVENT_LED_COLOR:
currentDataPoint.valueLED_Color = dataPointPtr->valueLED_Color;
os_printf("Evt: EVENT_LED_COLOR %d\n", currentDataPoint.valueLED_Color);
switch(currentDataPoint.valueLED_Color)
{
case LED_COLOR_VALUE0:
rgbControl(currentDataPoint.valueLED_R,currentDataPoint.valueLED_G,currentDataPoint.valueLED_B);
break;
case LED_COLOR_VALUE1:
rgbControl(254, 254, 0);
break;
case LED_COLOR_VALUE2:
rgbControl(254, 0, 70);
break;
case LED_COLOR_VALUE3:
rgbControl(238, 30, 30);
break;
default:
break;
}
break;
case EVENT_LED_R:
currentDataPoint.valueLED_R = dataPointPtr->valueLED_R;
os_printf("Evt:EVENT_LED_R %d\n",currentDataPoint.valueLED_R);
rgbControl(currentDataPoint.valueLED_R,currentDataPoint.valueLED_G,currentDataPoint.valueLED_B);
break;
case EVENT_LED_G:
currentDataPoint.valueLED_G = dataPointPtr->valueLED_G;
os_printf("Evt:EVENT_LED_G %d\n",currentDataPoint.valueLED_G);
rgbControl(currentDataPoint.valueLED_R,currentDataPoint.valueLED_G,currentDataPoint.valueLED_B);
break;
case EVENT_LED_B:
currentDataPoint.valueLED_B = dataPointPtr->valueLED_B;
os_printf("Evt:EVENT_LED_B %d\n",currentDataPoint.valueLED_B);
rgbControl(currentDataPoint.valueLED_R,currentDataPoint.valueLED_G,currentDataPoint.valueLED_B);
break;
case EVENT_MOTOR_SPEED:
currentDataPoint.valueMotor_Speed = dataPointPtr->valueMotor_Speed;
os_printf("Evt:EVENT_MOTOR_SPEED %d\n",currentDataPoint.valueMotor_Speed);
motorControl(currentDataPoint.valueMotor_Speed);
break;
case WIFI_SOFTAP:
break;
case WIFI_AIRLINK:
break;
case WIFI_STATION:
break;
case WIFI_CON_ROUTER:
rgbControl(0, 0, 0);
break;
case WIFI_DISCON_ROUTER:
break;
case WIFI_CON_M2M:
break;
case WIFI_DISCON_M2M:
break;
case WIFI_RSSI:
os_printf("RSSI %d\n", wifiData->rssi);
break;
case TRANSPARENT_DATA:
os_printf("TRANSPARENT_DATA \n");
//user handle , Fetch data from [data] , size is [len]
break;
default:
break;
}
}
system_os_post(USER_TASK_PRIO_0, SIG_UPGRADE_DATA, 0);
return 0;
}
實際效果:
