Bài 1 - Cài đặt môi trường lập trình NONOS SDK cho ESP8266

 

      

      Chào các bạn, mình xin mở đầu bài viết trong loạt bài lập trình ESP8266 sử dụng NONOS SDK. Mình viết lại những gì đã đọc và chia sẻ nên trình độ mới chỉ ABC, còn phải học hỏi nhiều. Mình thấy ít bài chia sẻ cách lập trình ESP8266 bằng NONOS SDK do chính hãng cung cấp, chủ yếu là lập trình bằng Arduino IDE nên viết lại những gì đã đọc để mọi người tham khảo.

       ESP8266 với ưu thế giá rẻ tích hợp sẵn wifi nên ứng dụng nhiều ở các công tắc thông mình, ổ cắm thông minh.

           


 

     Thông số kỹ thuật của ESP8266. 



        Để lập trình cho ESP8266 sử dụng NONOS SDK chúng ta cần cài đặt môi trường lập trình cho nó. Có nhiều cách cái đặt môi trường lập trình cho ESP8266 trên Windows, các bạn có thể sử dụng Google để tìm kiếm, mình đã thử nhiều cách và thấy cách này đơn giản nhất nên mình chia sẻ.

        Đầu tiên download chương trình tại đây: https://www.dropbox.com/s/gpct5l8g4l0syd8/AiThinkerIDE_V0.5.rar?dl=0

       Giải nén file AiThinkerIDE_V0.5.rar, vào thư mục AiThinkerIDE_V0.5 vừa giải nén chạy file ConfigTool.exe bấm vào Default sau đó chọn Save.


       Vậy là xong, bây giờ chạy AiThinker_IDE.exe để lập trình cho ESP8266, chạy AiThinker_IDE.exe nó sẽ kích hoạt chạy Eclipse.exe (bạn cần cài JAVA để có thể chạy Eclipse).

      Bây giờ mình sẽ làm bài hướng dẫn in ra Helllo World nhé.

      Hiện tại NONOS SDK đã ra đến phiên bản v3.0.5 rồi, mình thì dùng bản v2.2.1 (vì mình thấy cái này có phiên bài viết để tham khảo 😊). Các bạn download tại đây: https://codeload.github.com/espressif/ESP8266_NONOS_SDK/zip/refs/tags/v2.2.1 .

      Download về giải nén ra ta có thư mục ESP8266_NONOS_SDK-2.2.1, đổi tên thành HelloWorld.

      Vào thư mục HelloWorld xóa thư mục third_party(thư mục này ít xài đến)


       vào thư mục examples copy thư mục peripheral_test ra ngoài cùng cấp với thư mục examples, đổi tên peripheral_test thành app. Sau đó xóa thư mục examples đi (không cần nữa)

 

Xóa thư mục documents và thư mục driver_lib, thư mục còn lại sau khi sửa đổi như sau:

Chạy AiThinker_IDE.exe để import project HelloWord vào

 

chọn Existing Code as Makefile Project rồi bấm Next

 

Bỏ chọn ô C++, chọn Cyqwin GCC rồi bấm vào Browse chọn nơi chứa thư mục HelloWorld, bấm OK rồi bấm Finish 

 

Vào chỉnh sửa file user_main.c trong thư mục app/user (xóa file spi_test.c đi nhé) để in ra Hello World.

 

Chỉnh sửa file user_main.c như sau:

- Xóa dòng #include "ets_sys.h" và #include "spi_test.h"

- Để lại 2 hàm uint32 ICACHE_FLASH_ATTR user_rf_cal_sector_set(void)  void ICACHE_FLASH_ATTR user_rf_pre_init(void) lại vì mặc định SDK v2.2.1 yêu cầu 2 hàm đó (trong 2c-esp8266_non_os_sdk_api_reference_en.pdf có yêu cầu vậy)

trong hàm user_init (void) chỉnh sửa lại như sau:

   void ICACHE_FLASH_ATTR

user_init(void)

{

    os_printf("\n=======================================\n");

    os_printf("\t\t Hello World\n");

    os_printf("\t\t SDK version: %s \n", system_get_sdk_version());

    os_printf("\n=======================================\n");

}

 

Toàn bộ chương trình như sau:

 #include "osapi.h"

#include "user_interface.h"

#include "gpio.h"

 

/******************************************************************************

 * FunctionName : user_rf_cal_sector_set

 * Description  : SDK just reversed 4 sectors, used for rf init data and paramters.

 *                We add this function to force users to set rf cal sector, since

 *                we don't know which sector is free in user's application.

 *                sector map for last several sectors : ABCCC

 *                A : rf cal

 *                B : rf init data

 *                C : sdk parameters

 * Parameters   : none

 * Returns      : rf cal sector

*******************************************************************************/

uint32 ICACHE_FLASH_ATTR

user_rf_cal_sector_set(void)

{

    enum flash_size_map size_map = system_get_flash_size_map();

    uint32 rf_cal_sec = 0;

 

    switch (size_map) {

        case FLASH_SIZE_4M_MAP_256_256:

            rf_cal_sec = 128 - 5;

            break;

 

        case FLASH_SIZE_8M_MAP_512_512:

            rf_cal_sec = 256 - 5;

            break;

 

        case FLASH_SIZE_16M_MAP_512_512:

        case FLASH_SIZE_16M_MAP_1024_1024:

            rf_cal_sec = 512 - 5;

            break;

 

        case FLASH_SIZE_32M_MAP_512_512:

        case FLASH_SIZE_32M_MAP_1024_1024:

            rf_cal_sec = 1024 - 5;

            break;

 

        case FLASH_SIZE_64M_MAP_1024_1024:

            rf_cal_sec = 2048 - 5;

            break;

        case FLASH_SIZE_128M_MAP_1024_1024:

            rf_cal_sec = 4096 - 5;

            break;

        default:

            rf_cal_sec = 0;

            break;

    }

 

    return rf_cal_sec;

}

 

void ICACHE_FLASH_ATTR

user_rf_pre_init(void)

{

}

 

void ICACHE_FLASH_ATTR

user_init(void)

{

    os_printf("\n=======================================\n");

    os_printf("\t\t Hello World\n");

    os_printf("\t\t SDK version: %s \n", system_get_sdk_version());

    os_printf("\n=======================================\n");

}

 

Chuột phải vào thư mục HellloWorld chọn Clean Project, clean xong chọn Build Project.

 

Nhìn dưới Console ra kết quả như thế này là thành công.

Vào thư mục HelloWorld\bin sẽ có các file bin để nạp cho ESP8266. Để nạp chương trình sau khi compile chúng ta dùng địa chỉ nạp như theo trong file 2a-esp8266-sdk_getting_started_guide_en.pdf  hướng dẫn từ chính hãng và dòng thông báo từ Console kết quả compile thành công là eagle.flash.bin-------->0x00000, eagle.irom0text.bin---->0x10000.

Mình dùng NodeMCU ESP12E có flash 4MB nên địa chỉ nạp như sau:

eagle.flash.bin-------->0x00000

eagle.irom0text.bin---->0x10000

blank.bin -------->0x3fe000

esp_init_data_default.bin-------->0x3fc000

 

chương trình ESPFlashDownloadTool_v3.6.3.exe trong link dropbox mình gửi phần đầu bài với cài đặt như sau, bấm START rồi nạp.

   

Vào Window->Show view->terminal để mở serial COM xem kết quả.


 

Chọn đúng cổng COM của máy tính bạn để xem kết quả


 

Kết quả Terminal hiện kết quả như sau:


  

Nhận xét

Bài đăng phổ biến từ blog này

Điều khiển đèn bằng router Dlink DIR615C2 thông qua web.

Bài 3 - Blink LED

Mod USB cho Router wifi DLink DIR615 E4