Tải bản đầy đủ - 0 (trang)
CHƯƠNG 4: CÁC MÔ HÌNH LẬP TRÌNH VỚI ESP8266

CHƯƠNG 4: CÁC MÔ HÌNH LẬP TRÌNH VỚI ESP8266

Tải bản đầy đủ - 0trang

2. Tập lệnh AT cơ bản

Tốc độ giao tiếp mặc định (Baud rate): 9600 hoặc 115200.

Các lệnh AT nên được viết hoa. Các lệnh AT phải được kết thúc bởi 2 dấu CR (\ r) +

LF(\n), tương đương với 2 byte 0x0D + 0x0A.

Việc cài đặt các kết nối wifi sẽ tự động được lưu lại và không phải cài đặt lại khi reset

module.

AT – Kiểm tra kết nối.

AT+RST – Reset module.

AT+GMR – Kiểm tra phiên bản firmware.

AT+CWMODE? – Kiểm tra kiểu kết nối.

Giá trị trả về sẽ là 1,2,3 tương ứng với STA (Station), AP (Access point), BOTH.

AT+CWLAP – Hiển thị danh sách các cột WIFI.

AT+CWJAP – Kết nối với Access point.

Cú pháp kết nối như sau: AT+CWJAP=”SSID”,”PW”

SSID là tên của Access point. PW là mật khẩu.

Nếu Module esp8266 đã kết nối với AP rồi thì bạn có thể dùng lệnh AT+CWJAP? để xem

nó đang được kết nối với AP nào.

AT+CIFSR – Kiểm tra IP.

AT+CIPMUX – Thiết lập kết nối TCP/UDP.

AT+ CIPMUX?: xem cài đặt thiết lập.

AT+ CIPMUX=0: single.

AT+ CIPMUX=1: Multiple.

AT+CIPSERVER=[,] – thiết lập server:

Mode = 0: Close server, Mode =1: Open server, Port: Cổng.

Phải thiết lập chế độ kết nối tcp/udp bằng lệnh AT+ CIPMUX=1 mới thiết lập server được.

Tất cả dữ liệu truyền với ESP8266 qua đường UART là mã ASCII của lệnh. Ví dụ

như lệnh Restart module, MCU sẽ truyền chuỗi Ascii[]= “AT+RST\r\n” và nếu thành

công nó sẽ nhận lại chuỗi Ascii[] = “AT+RST\r\r\n\r\nOK\r\n” . Sau đó Esp8266 sẽ tiến

hành khởi động lại. Lưu ý rằng chuỗi Ascii mà MCU và Esp8266 truyền đều phải có

kết thúc bằng CR+LF (\r\n).



II.



LẬP TRÌNH TRỰC TIẾP TRÊN CHIP ESP8266

1. Ngun lý hoạt động



Trong mơ hình này, chúng ta sẽ lập trình ra một firmware cho ESP8266 sử dụng bộ

thư viện SDK được cung cấp bởi Espressif. Chúng ta sẽ theo mơ hình này cho các ứng

dụng muốn dùng ES8266 để điều khiển thiết bị trực tiếp mà không cần một external MCU

điều khiển hoặc chúng ta cần các tính năng mà firmware chuẩn chưa cung cấp.



SV Nguyễn Thị Hạnh - BM. Mạng Máy Tính– Khóa 58



Page 32



2. Đặc điểm của quá trình lập trình trên chip ESP8266

Bộ thư viện SDK của ESP8266 bao gồm các thành phần sau:

- Các file code thư viện cung cấp API để điều khiển phần cứng (HAL driver), định

nghĩa các địa chỉ của thanh ghi điều khiển, cũng như các module software như

RTOS, Memory Management...

- Các chương trình biên dịch (compiler and linker) để biên dịch source code và tạo ra

file *.bin firmware cho ESP8266

- Software để truyền file *.bin xuống ESP8266 qua đường UART (chúng ta cần thay

đổi giá trị của vài chân GPIO để ESP8266 vào chế độ nạp firmware từ UART).

Lưu ý: Espressif khuyên chúng ta nên biên dịch firmware cho ESP8266 trên nền

Linux OS sử dụng các compiler tool được khuyên dùng để đảm bảo firmware được biên

dịch đúng. Với môi trường Windows, Espressif cung cấp một file máy ảo (dùng trong

Virtual Box) có cài đặt sẵn các trình biên dịch có thể sử dụng ngay. Ngồi ra cộng đồng

mạng cũng hỗ trợ 1 bộ toolkit khác dùng trên Windows biên dịch bằng Python. Chúng ta sẽ

đi sâu vào hướng dẫn ở các bài sau.

Với các file code thư viện, Espressif hỗ trợ 2 bộ thư viện: Non-OS SDK và RTOS SDK.

Chúng ta sẽ dùng bộ thư viện Non-OS SDK để lập trình cho ESP8266 khơng sử dụng hệ

thống RTOS; và RTOS SDK để lập trình ứng dụng có sử dụng các giải pháp đồng bộ các

tác vụ ứng dụng của hệ thống RTOS.

Bản chất ứng dụng sử dụng Non-OS SDK và RTOS SDK có thể được mơ tả như sau:

Non-OS SDK: Do khơng có sử dụng hệ điều hành quản lý (OS) nên các hoạt động

trong chương trình sẽ được quản lý thông qua timer hay các hàm call-back. Các tác vụ sẽ

được gọi khi có 1 điều kiện tương ứng xảy ra và thông thường được xử lý theo phương thức

polling để kiểm tra tất cả các điều kiện của các tính năng tương ứng. Đây là mơ hình lập

trình truyền thống mà chúng ta thường sử dụng khi bắt đầu quá trình học lập trình ứng

dụng. Ưu điểm của nó là đơn giản nên ổn định và được nhà sản xuất cập nhật các tính năng

mới đầu tiên. Hiện nay, phiên bản mới nhất của Non-OS SDK là V2.0.0.

Cấu trúc thư mục của Non-OS SDK như sau:



SV Nguyễn Thị Hạnh - BM. Mạng Máy Tính– Khóa 58



Page 33



Hình 4.2 Cấu trúc thư mục của Non-OS SDK

app: Thư mục làm việc chính chứa tất cả source code sẽ được compile của ứng dụng.

bin: Chứa firmware đã được compile và nạp trực tiếp xuống flash.

documents: các tài liệu liên quan đến SDK.

driver_lib: Các thư viện hỗ trợ các thiết bị ngoại vi như UART, I2C và GPIO.

examples: Chứa các ví dụ mẫu để tham khảo.

include: Chứa các header file sử dụng trong SDK. Các tập tin này cũng định nghĩa các

API cũng như các macro mà SDK hỗ trợ. Người sử dụng không nên sửa các file này.

ld: Chứa các file tương tác với các phần mềm chạy SDK . Nhà sản xuất khuyến cáo khơng

nên sửa đổi nó trừ khi có những yêu cầu đặc biệt.

lib: Chứa các thư viện hỗ trợ bởi SDK như cấu hình chip, Wifi config... đến các tính năng

cao cấp như Mesh, SmartConfig, mDNS, Sniffer…

SV Nguyễn Thị Hạnh - BM. Mạng Máy Tính– Khóa 58



Page 34



tools: Chứa các script cần thiết cho quá trình compile firmware: script tạo file binary, script

tạo certificate… Nhà sản xuất khuyến cáo người sử dụng không nên sửa các file này.

RTOS SDK: Sử dụng FreeRTOS mã nguồn mở giúp hệ thống hoạt động đa nhiệm.

Do đó, hệ thống này cho phép người dùng sử dụng các phương thức chuẩn cho việc quản lý

tài nguyên, chu kỳ hoạt động theo chu kỳ, quản lý thời gian trễ trong tác vụ , cung cấp

thơng tin cũng như đồng bộ hóa giữa các tác vụ. Ưu điểm của nó có thể xử lý đa nhiệm

trong các yêu cầu dự án lớn tuy nhiên phụ thuộc vào chất lượng SDK mà hệ thống hoạt

động ổn định hay khơng. Do đó thơng thường các API mới được cập nhật chậm hơn so

với Non-OS. Điểm đặc biệt cần lưu ý là RTOS không hỗ trợ AT command. Do đó nếu

bạn muốn viết 1 firmware mà cần hỗ trợ AT command để giao tiếp với MCU bạn phải sử

dụng Non-OS SDK. Hiện nay, phiên bản mới nhất của RTOS SDK là V1.4.0 cung cấp

hầu hết tất cả các Api của Non-OS SDK ngoại trừ việc không hỗ trợ AT command.

Cấu trúc thư mục của RTOS SDK như sau:



Hình 4.3 Cấu trúc thư mục của RTOS SDK

bin: Chứa firmware đã được compile và nạp trực tiếp xuống flash.

documents: các tài liệu liên quan đến SDK.

examples: Chứa các ví dụ mẫu để tham khảo.

examples/driver_lib: Các thư viện hỗ trợ các thiết bị ngoại vi như UART, I2C và GPIO.

SV Nguyễn Thị Hạnh - BM. Mạng Máy Tính– Khóa 58



Page 35



examples/project_template: template cho project.

examples/smart_config: Ví dụ mẫu cho Smart Config.

examples/spiffs_test: Ví dụ mẫu cho SPIFFS.

examples/websocket_demo: Ví dụ mẫu cho WebSocket.

extra_include: Các header files của Xtensa.

include: Chứa các header file sử dụng trong SDK. Các tập tin này cũng định nghĩa các API

cũng như các macro mà SDK hỗ trợ. Người sử dụng không nên sửa các file này.

ld: Chứa các file tương tác với các phần mềm chạy SDK. Nhà sản xuất khuyến cáo khơng

nên sửa đổi nó trừ khi có những yêu cầu đặc biệt.

lib: Chứa các thư viện hỗ trợ bởi SDK như cấu hình chip, Wifi config, FreeRTOS... đến các

tính năng cao cấp như Mesh, SmartConfig, mDNS, Sniffer…

third_party: Các thư viện hỗ trợ open-source từ các nhà phát triển: Spiffs, Lwip, ssl…

tools: Chứa các script cần thiết cho quá trình compile firmware: script tạo file binary, script

tạo certificate… Nhà sản xuất khuyến cáo người sử dụng không nên sửa các file này.

Hiện tại Espressif chưa hỗ trợ một chương trình IDE như IAR, Keil để lập trình cho

ESP8266. Do đó chúng ta sẽ dùng một trình soạn thảo text cơ bản (Java, Visual Studio,

Notepad...) để viết code ứng dụng cho ESP8266, sau đó sử dụng trình biên dịch để biên

dịch mã code cùng với SDK hỗ trợ ra file binary. Cuối cùng chúng ta sử dụng tool

download để nạp firmware xuống device.



III.



LẬP TRÌNH ESP 8266 SỬ DỤNG ARDUINO IDE

1. Nguyên lý hoạt động



Chúng ta có thể hiểu ngun lý của mơ hình này là bộ thư viện ArduinoESP8266

giúp tạo ra các dòng code của ESP8266 từ những lệnh quen thuộc trên Arduino IDE. Vì vậy

người lập trình vẫn có thể sử dụng ngơn ngữ Arduino đã quen thuộc và dễ hiểu để lập trình

cho ESP8266. Hơn nữa ArduinoESP8266 cũng hỗ trợ tích hợp trình biên dịch vào Arduino

IDE để tạo file firmware và được nạp xuống module ESP8266 thông qua UART.

Hiện tại, thư viện mới nhất của ESP8266 trên Adruino hỗ trợ khá đầy đủ các chức năng cần

thiết của 1 module wifi như: TCP, UDP, thiết lập HTTP, mDNS, SSDP, DNS servers,

OTA… Ngoài ra nó cũng hỗ trợ giao tiếp các thiết bị ngoại vi như: flash memory, SD cards,

servos, SPI, I2C…

Chúng ta có thể sử dụng các lệnh quen thuộc trong Adruino IDE. Khi biên dịch trong

Arduino IDE, bộ thư viện ESP8266 sẽ chuyển đổi các lệnh Arduino thành các code của

ESP8266 sử dụng các API của Non-OS SDK. (Được thể hiện rõ trong mơ hình dưới đây).



SV Nguyễn Thị Hạnh - BM. Mạng Máy Tính– Khóa 58



Page 36



Hình 4.4 Mơ hình sử dụng IDE của Adruino lập trình cho Esp8266



2. Các hàm chuẩn

Các hàm chuẩn cho digital IO:

pinMode(pin, Mode)

//pin = 0 cho GPIO0, 1 cho GPIO01 và 2 cho GPIO02

digitalRead(pin)

digitalWrite(pin, value)

attachInterrupt(digitalPinToInterrupt(pin), callback_func, mode); //Lưu ý khơng có interrupt

cho GPIO16

deattachInterrupt(digitalPinToInterrupt(pin)

Các hàm chuẩn cho Analog IO:

analogRead(A0)

//trả về 0-1023 tương ứng với 0-1V

analogWrite(pin, value) // tạo điện áp analog tại chân GPIO, value từ 0-1023

analogWriteFreq(new_frequency) //thay đổi tần số 1KHz mặc định của PWM để tạo

analog điện áp.

Các hàm chuẩn cho timer:

delay(ms)

delayMicroseconds(us)

Lưu ý là chúng ta nên gọi hàm delay(), delayMicroseconds() thường xuyên để firmware xử

lý chức năng Wifi của ESP có thể hoạt động bình thường. Nếu chương trình ứng dụng trên

Arduino chiếm nhiều thời gian và ít gọi hàm delay(), chức năng Wifi sẽ có thể khơng hoạt

động như mong đợi



SV Nguyễn Thị Hạnh - BM. Mạng Máy Tính– Khóa 58



Page 37



Các hàm chuẩn cho UART:

Serial.begin(baudrate) // và Serial1.begin(baudrate)

Serial.print(), Serial.println(), Serial.readByte(), Serial.readString(), v.v…

Các hàm chuẩn cho I2C:

Wire.begin(sda_pin, scl_pin) //thay đổi chân mặc định chân GPIO4, GPIO5 cho I2C

Wire.beginTransaction(),Wire.write(), Wire.read(), Wire.endTransaction(), v.v….

Các hàm đọc thông tin phần cứng trên ESP8266:

ESP.restart() //reset ESP

ESP.getResetReason()

ESP.getChipId()

ESP.getFlashChipSize()

ESP.getFlashSpeed()

Các hàm API cho Wifi:

WiFi.mode(mode) //chọn mode là thiết bị Wifi, Access Point, hoặc Soft Access Point

WiFi.softAP(ssid, password) //thiết lập thông tin mạng Wifi

WiFi.macAddress(mac) //thay đổi MAC address khi làm thiết bị Wifi

WiFi.softAPmacAddress(mac) //thay đổi MAC address khi làm Access Point

Wifi.localIP()

//đọc địa chỉ IP khi hoạt động như 1 thiết bị Wifi

Wifi.softAPIP() //đọc địa chỉ IP khi hoạt động như 1 Access Point

WifiUDP.xxxx() // hỗ trợ truyền nhận dữ liệu qua UDP



SV Nguyễn Thị Hạnh - BM. Mạng Máy Tính– Khóa 58



Page 38



IV.



SO SÁNH CÁC MƠ HÌNH LẬP TRÌNH ESP 8266



Mơ hình lập trình

Firmware với AT command



Ưu điểm

Điểm hạn chế

Đơn giản, nhanh gọn Hạn chế bởi các lệnh AT

Sử dụng firwmare có sẵn, command được cung cấp

ổn định

Cần 1 MCU ngoài để điều

khiển

Tốc độ đáp ứng khơng tối

ưu.

Lập trình trưc tiếp dùng Khả năng sử dụng phần Lập trình C phức tạp, tốn

SDK

cứng cao.

thời gian nghiên cứu.

Khơng cần MCU ngồi Độ ổn định của chương

Có thể tối ưu tốc độ truyền trình tùy thuộc vào khả

dữ liệu

năng của người lập trình.

Sử dụng các bộ thư viện Sử dụng được ngôn ngữ cấp Giới hạn bởi bộ thư viện

khác

cao (Arduino, Python).

được cung cấp.

Không cần MCU ngoài Khả năng tối ưu phần cứng,

(trường

hợp tốc độ truyền dữ liệu không

ArduinoESP8266).

cao.

Đơn giản và nhanh hơn lập Tốn bộ nhớ chương trình và

trình trực tiếp

thời gian thực thi cho các bộ

thư viện như MicroPython



SV Nguyễn Thị Hạnh - BM. Mạng Máy Tính– Khóa 58



Page 39



CHƯƠNG 5: ĐIỀU KHIỂN THIẾT BỊ ĐIỆN BẰNG ESP 8266

THÔNG QUA ĐIỆN THOẠI DI ĐỘNG

I.



XÂY DỰNG MƠ HÌNH HỆ THỐNG ĐIỆN

1. Mơ tả hệ thống điện



Vì hầu hết hệ thống điện về cơ bản với người sử dụng là dùng để điều khiển theo

hướng bật tắt hoặc tăng giảm, dựa vào yếu tố của đề tài và cơ sở trên ta sẽ chọn hệ thống

điện điều khiển: gồm module ESP 8266, hai module relay.



2. Sơ đồ hệ thống điều khiển



Hình 5.1 Sơ đồ hệ thống điều khiển



3. Thiết bị phần cứng

-



II.



Module Rơle hai kênh.

Dây cáp USB hai đầu type A-B

Module ESP 8266

Board mạch Arduino Uno

Dây dẫn

Điện thoại di động



CHƯƠNG TRÌNH ĐIỀU KHIỂN BOARD ARDUINO



#define ROLE1 9

#define ROLE2 8

#define CMD_SEND_BEGIN "AT+CIPSEND=0"

SV Nguyễn Thị Hạnh - BM. Mạng Máy Tính– Khóa 58



Page 40



#define CMD_SEND_END "AT+CIPCLOSE=0"

#define HANHNGUYEN_PROTOCOL_HTTP 80

#define HANHNGUYEN_PROTOCOL_HTTPS 443

#define HANHNGUYEN_PROTOCOL_FTP 21

#define

HANHNGUYEN_PROTOCOL_CURRENT

HANHNGUYEN_PROTOCOL_HTTP

#define HANHNGUYEN_CHAR_CR 0x0D

#define HANHNGUYEN_CHAR_LF 0x0A

#define HANHNGUYEN_STRING_EMPTY ""

#define HANHNGUYEN_DELAY_SEED 1000

#define HANHNGUYEN_DELAY_1X (1*HANHNGUYEN_DELAY_SEED)

#define HANHNGUYEN_DELAY_2X (2*HANHNGUYEN_DELAY_SEED)

#define HANHNGUYEN_DELAY_3X (3*HANHNGUYEN_DELAY_SEED)

#define HANHNGUYEN_DELAY_4X (4*HANHNGUYEN_DELAY_SEED)

#define HANHNGUYEN_DELAY_0X (5*HANHNGUYEN_DELAY_SEED)

bool hasRequest = false;

void setup()

{

delay(HANHNGUYEN_DELAY_0X);

Serial.begin(115200);

pinMode(ROLE1, OUTPUT);

digitalWrite(ROLE1, LOW);

pinMode(ROLE2, OUTPUT);

digitalWrite(ROLE2, LOW);

initESP8266();

}

void loop()

{

while(Serial.available())

{

bufferingRequest(Serial.read());

}

if(hasRequest == true)

{

String htmlResponse = ""

""

""

SV Nguyễn Thị Hạnh - BM. Mạng Máy Tính– Khóa 58



Page 41



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

CHƯƠNG 4: CÁC MÔ HÌNH LẬP TRÌNH VỚI ESP8266

Tải bản đầy đủ ngay(0 tr)

×