1. 程式人生 > >ESP8266 NodeMcu機智雲SOC方案開發經驗分享

ESP8266 NodeMcu機智雲SOC方案開發經驗分享

cache out 最好 展開 所有 per esp8266 mark main

實現的功能:LED_1LED_2可以同時用APPKEY1KEY2按鍵(短按)控制適合入門級萌新,大佬請略過,謝謝!



功能:LED_1和LED_2可以同時用APP和KEY1和KEY2按鍵(短按)控制
一、硬件電路及開發環境的搭建
1.硬件電路
首先是從某寶購買WIFI模塊ESP8266 NodeMcu,我買的下圖這款,4M內存不可接天線,應該是13.5元包郵。現在一直在用,感覺還比較穩定,那種可接天線內存小的還沒用過不知咋樣。其他的元器件,有兩個LED,兩個微動開關,面包板,杜邦線若幹,5v直流電源。
技術分享圖片
有個情況要說明下,這種WIFI模塊有兩種,一種正常工作時右上角藍色LED不閃,只有通電時閃一下;另一種是正常工作和通電時都會閃。我買了兩塊,剛好碰到這兩種情況,開始以為是壞的,哈哈。
(1)電路圖
技術分享圖片


(2)電路實物圖
技術分享圖片
2.開發環境的搭建
如果是Windows 64位操作系統,可以下載下面這個集成開發環境
鏈接:https://pan.baidu.com/s/1CdruAWopdVWMEzxKOEJ4uA 提取碼:12ct
如果不是的話,可以在百度“樂鑫集成開發環境”,應該很容易找到。
下載好後壓解到一個你喜歡的地方,我習慣壓解在D盤,壓解好後就下圖這樣。桌面也會出現AiThinker_IDE和ConfigTool兩個快捷圖標。
技術分享圖片
打開這個壓解好的AiThinkerIDE_V0.5文件夾,藍框裏面EXE文件對應桌面上的兩個圖標
技術分享圖片
打開藍框裏ConfigTool.exe,下圖1,2路徑對應上圖紅框中的內容。如果電腦已經裝過eclipse,可以選擇安裝好的eclipse 的路徑。然後點擊註冊3,再點擊保存4,窗口會自動退出。開發環境就配置好了。
技術分享圖片

可以點擊藍框裏的AiThinker_IDE.exe或者點擊桌面的快捷方式圖標就可進入開發環境。
技術分享圖片
二、機智雲開發者中心
接下來是機智雲開發者中心上的操作。註冊賬號應該是基本操作,就不費時間寫了。主要講數據點和自動生成的程序和下載測試APP。進入開發者中心

  • 創建產品
    技術分享圖片
  • 產品分類:自定,影響不大;
    產品名稱:自定,影響不大;
    技術方案:Wi-Fi/移動網絡方案;
    通訊方式:Wi-Fi
    數據傳輸方式:定長
    技術分享圖片

3.產品創建好後
技術分享圖片
4.打開創建好的產品
技術分享圖片
5.點擊顯示完整秘鑰,輸入登入密碼Product Secret就會完整顯示,將黑色隱藏的Product Key和顯示的Product Secret復制到一個記事本中,以後有用。
6.點擊左側數據點,創建數據點。我創建好的數據點如下
技術分享圖片


下面兩個數據點不用創建,我之前打算用DHT11溫濕度傳感器來獲取temperature溫度和humidity濕度,可能是模塊壞了,一直讀不到值,所以這裏就不做介紹了。
我這裏使用了兩個可寫布爾值的數據點,LED_1和LED_2,用於控制LED的開關。(有條件的可以買繼電器,通過控制繼電器來控制家裏的220v電燈或者插座的開關。廢話一句,哈哈)。
Tips:標識名可以自定,但是最好讓人比較容易看懂,創建好後點應用。
7.點左側MCU開發,選擇右側SOC方案
粘貼上復制在記事本中的Product Secret ,點擊生產代碼包,生成好後,點擊下載
技術分享圖片
8.下載測試APP,點擊頂部下載中心
技術分享圖片
進入下載中心後,點擊左側“機智雲Wi-Fi/移動通信產品調試APP”
技術分享圖片
可選擇掃碼下載,安裝在手機上,以備後用。
技術分享圖片
三、修改自動生成的代碼、編譯並燒錄
1.修改代碼
將上面第7步下載好的壓縮包壓解到桌面(位置自定,根據個人習慣),打開開發環境軟件,也就是這個
技術分享圖片
打開後是這樣
技術分享圖片
然後是導入壓解好的代碼包
點擊左上角File,然後是import
技術分享圖片
點擊C/C++,然後點擊Existing Code as Makefile Project
技術分享圖片
數字1處選擇代碼壓解到的位置,數字2處選擇第3個
技術分享圖片
導入好後,展開文件夾,並雙擊打開左側紅框內的文件,按照右側紅框內容修改。
大概第22行:改BOOT?=new、改APP?=1、如果只有兩個數據點改SPI_SIZE_MAP?=2。
技術分享圖片
如下圖展開文件夾,要修改的就是下面紅框中的5個文件
技術分享圖片
首先打開gizwits_product.h,定義一個矩陣extern bool STA[2];用於存儲數據點LED_1和LED_2的狀態。
技術分享圖片
然後打開gizwits_product.c,初始化定義的矩陣bool STA[2]={0};
技術分享圖片
找到 int8_t ICACHE_FLASH_ATTR gizwitsEventProcess(eventInfo_t *info, uint8_t *data, uint32_t len) 大概在47行,黑框中的為機智雲上定義的數據點名稱,紅光中的為添加的內容。
技術分享圖片
Tips:這個板子和我們常見的板子(51、STM32)不一樣,它的IO口置1時,實際輸出低電平。
我們的LED是用的共陽機接法,詳見電路圖。
然後是掃描數據點LED_1和LED_2的狀態,並上報,添加紅框中的兩條代碼
#define USER_TIME_MS 100
#define LED_TIMEOUT (100/USER_TIME_MS) 定義100ms
技術分享圖片
這兩條添加到user_main.c裏面,避免編譯的時候出現錯誤
技術分享圖片
另外改gizwits_protocol.c 中的
#define USER_TIME_MS 100 可以降低控制延時
技術分享圖片
找到gizwits_protocol.c 中的void ICACHE_FLASH_ATTR userHandle(void),這個上報程序
添加以下代碼
GPIO_OUTPUT_SET(GPIO_ID_PIN(4),!STA[0]);
GPIO_OUTPUT_SET(GPIO_ID_PIN(5),!STA[1]);
static uint8_t ledtime=0; //每100ms上報一次數據點狀態
ledtime++;
if(LED_TIMEOUT<ledtime)
{
ledtime=0;
currentDataPoint.valueLED_1=STA[0];
currentDataPoint.valueLED_2=STA[1];
}

  • 1

技術分享圖片
找到下面的void ICACHE_FLASH_ATTR userInit(void),這個是數據點初始化
修改如下
currentDataPoint.valueLED_1 = 0;
currentDataPoint.valueLED_2 = 0;
技術分享圖片
然後是改user_main.c文件,找到大概第55行
按如下修改
#define GPIO_KEY_NUM 2 // 定義總按鍵數
#define KEY_0_IO_MUX PERIPHS_IO_MUX_GPIO0_U //
#define KEY_0_IO_NUM 0
#define KEY_0_IO_FUNC FUNC_GPIO0
#define KEY_1_IO_MUX PERIPHS_IO_MUX_GPIO2_U
#define KEY_1_IO_NUM 2
#define KEY_1_IO_FUNC FUNC_GPIO2
技術分享圖片
接下來改KEY1也就是GPIO0對應的開關
LOCAL void ICACHE_FLASH_ATTR key1ShortPress(void) //KEY1短按
{
if(STA[0]=!STA[0]) //取反,判斷開關是否按下
GIZWITS_LOG("#### GPIO0 short press ,LED_1 ON\n"); //日誌elseGIZWITS_LOG("#### GPIO0 short press ,LED_1 OFF\n"); //日誌

  • 1
  • 2
  • 3
  • 4
  • 5

}
/**

  • Key1 key presses a long press
  • @param none
  • @return none
    */
    LOCAL void ICACHE_FLASH_ATTR key1LongPress(void) //KEY1長按
    {
    GIZWITS_LOG("#### GPIO0 long press, SOFTAP ON\n"); //日誌
    gizwitsSetMode(WIFI_SOFTAP_MODE); //設置為局域網模式
    技術分享圖片

接下來改KEY2也就是GPIO2對應的開關
LOCAL void ICACHE_FLASH_ATTR key2ShortPress(void) //KEY2短按
{
if(STA[1]=!STA[1]) //取反,判斷開關是否按下
GIZWITS_LOG("#### GPIO2 short press, LED_2 ON \n"); //日誌
elseGIZWITS_LOG("#### GPIO2 short press, LED_2 OFF \n"); //日誌

  • 1
  • 2
  • 3

}
/**

  • Key2 button long press
  • @param none
  • @return none
    */
    LOCAL void ICACHE_FLASH_ATTR key2LongPress(void) //KEY2長按
    {
    GIZWITS_LOG("#### GPIO2 long press, AIRLINK ON\n"); //日誌
    gizwitsSetMode(WIFI_AIRLINK_MODE); //設置為聯網模式

}
}
技術分享圖片
端口初始化
LOCAL void ICACHE_FLASH_ATTR keyInit(void)
{
singleKey[0] = keyInitOne(KEY_0_IO_NUM, KEY_0_IO_MUX, KEY_0_IO_FUNC,
key1LongPress, key1ShortPress);
singleKey[1] = keyInitOne(KEY_1_IO_NUM, KEY_1_IO_MUX, KEY_1_IO_FUNC,
key2LongPress, key2ShortPress);
keys.singleKey = singleKey;
keyParaInit(&keys);
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U,FUNC_GPIO4);//配置LED_1管腳為輸出
GPIO_DIS_OUTPUT(GPIO_ID_PIN(4));
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U,FUNC_GPIO5);//配置LED_2管腳為輸出
GPIO_DIS_OUTPUT(GPIO_ID_PIN(5));
GPIO_OUTPUT_SET(GPIO_ID_PIN(4), 0);//輸出高電平
GPIO_OUTPUT_SET(GPIO_ID_PIN(5), 0);//輸出高電平
}
技術分享圖片
所有的代碼都修改好了,開始編譯,右擊項目名,點擊Build Project
技術分享圖片
編譯成功
技術分享圖片
燒錄,燒錄工具可以下載我這個
鏈接:https://pan.baidu.com/s/1_Bhds-uE9GreQpfVwJ2m7g
提取碼:e0kr
技術分享圖片
下載好後,打開ESPFlashDownloadTool_v3.6.4.exe這個程序,點擊第一個
技術分享圖片
選擇編譯好的文件,路徑、COM僅供參考,根據實際情況設置。下面的設置如下圖
C:\Users\Administrator\Desktop\SoC_ESP8266_32M_source\bin\boot_v1.6.bin
0x00000
C:\Users\Administrator\Desktop\SoC_ESP8266_32M_source\bin\upgrade\user1.4096.new.4.bin
0x01000
C:\Users\Administrator\Desktop\SoC_ESP8266_32M_source\bin\esp_init_data_default.bin
0x3fc000
C:\Users\Administrator\Desktop\SoC_ESP8266_32M_source\bin\blank.bin
0x3fe000
技術分享圖片
終於弄完了軟硬件,終於到看成果的時候了,是不是很激動。
還有一步沒完成,配網。
首先,你的手機要連上你家裏的WIFI。
打開下載的機智雲手機APP,點擊跳過,不用登入
技術分享圖片
點擊右上角的+號,點擊一鍵配置
技術分享圖片
填入你家裏WIFI賬號和密碼
技術分享圖片
選擇樂鑫,點擊確定
技術分享圖片
長安KEY2鍵,3S以上松開,點擊手機上的“我已完成上述操作”
技術分享圖片
配網成功
技術分享圖片
技術分享圖片
LED_1和LED_2可以同時用APP和KEY1和KEY2按鍵(短按)控制了。
祝君成功!!!
That’s all, thanks for your reading.
寫得比較瑣粹,大佬請略過。。。
未完待續。。。

ESP8266 NodeMcu機智雲SOC方案開發經驗分享