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


實現的功能: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.
寫得比較瑣粹,大佬請略過。。。
未完待續。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM