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) và 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
Đăng nhận xét