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

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



功能:LED_1和LED_2能夠同時用APP和KEY1和KEY2按鍵(短按)控制
1、硬件電路及開發環境的搭建
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或者點擊桌面的快捷方式圖標就可進入開發環境。

2、機智雲開發者中心
接下來是機智雲開發者中心上的操做。註冊帳號應該是基本操做,就不費時間寫了。主要講數據點和自動生成的程序和下載測試APP。進入開發者中心html

  • 建立產品
  • 產品分類:自定,影響不大;
    產品名稱:自定,影響不大;
    技術方案: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」

可選擇掃碼下載,安裝在手機上,以備後用。

3、修改自動生成的代碼、編譯並燒錄
1.修改代碼
將上面第7步下載好的壓縮包壓解到桌面(位置自定,根據我的習慣),打開開發環境軟件,也就是這個

打開後是這樣

而後是導入壓解好的代碼包
點擊左上角File,而後是import

點擊C/C++,而後點擊Existing Code as Makefile Project

數字1處選擇代碼壓解到的位置,數字2處選擇第3個

導入好後,展開文件夾,並雙擊打開左側紅框內的文件,按照右側紅框內容修改。
大概第22行:改BOOT?=new、改APP?=一、若是隻有兩個數據點改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:這個板子和咱們常見的板子(5一、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");  //日誌eclipse

  • 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

}
/**ui

  • 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.
寫得比較瑣粹,大佬請略過。。。
未完待續。。。spa

相關文章
相關標籤/搜索