機智云Gokit3 SOC方案教程 從無到有 看我就夠了

(環(huán)境+源碼改寫+編譯+燒錄+iOS+Android+按鍵實時反饋)

從接觸機智云Gokit一步一坑,大坑套小坑也算挺過來了,把遇到的問題和經驗分享給大家,幫助新人少走一些彎路。

一、環(huán)境搭建

1.下載安裝eclipse一體化開發(fā)環(huán)境
下載地址:http://pan.baidu.com/s/1skRvR1j

安裝完畢之后去官方下載微信寵物屋for GoKit3(S) ESP8266源碼

Paste_Image.png

Import導入soc源碼

Paste_Image.png
Paste_Image.png

Paste_Image.png

需要修改makefile文件配置才能編譯成功

BOOT?=new
APP?=1
SPI_SPEED?=40
SPI_MODE?=QIO
SPI_SIZE_MAP?=6
Paste_Image.png

二、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版本不需要底板。

Paste_Image.png

2.3、模組組裝時分為倆種模式(有坑不要插錯了)


MCU模式
SOC模式

三、燒錄選項配置


1. 前三個 ‘.bin’ 文件都在\bin 目錄下,選擇對應的名稱的 ‘.bin’文件即可。
最后一個.bin 文件默認為SOC版固件:user1.4096.new.6.bin
位置:\bin\upgrade\user1.4096.new.6.bin
Paste_Image.png

2.GoKit套件SOC版燒錄模式接法(有坑不要接錯了)


需要注意RX TX接法
GND接GND
RX接TX
TX接RX
IMG_20170615_173535.jpg

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

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

Paste_Image.png
Paste_Image.png

相繼按下燒錄工具的“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;
}

實際效果:

soc.gif
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容