- Thành phần bắt buộc
- Mô-đun Wi-Fi ESP8266
- Kết nối LPC2148 với ESP8266 cho Giao tiếp nối tiếp
- Sơ đồ mạch và kết nối
- Các bước liên quan đến lập trình UART0 trong LPC2148 để giao tiếp ESP8266
- Điều khiển đèn LED bằng Máy chủ trang web IoT ESP8266 với LPC2148
Bộ thu phát Wi-Fi ESP8266 cung cấp một cách kết nối bộ vi điều khiển với mạng. Nó được sử dụng rộng rãi trong các dự án IoT vì nó rẻ, nhỏ và dễ sử dụng. Trước đây chúng tôi đã sử dụng nó để tạo máy chủ web bằng máy chủ web Raspberry và máy chủ web Arduino.
Trong hướng dẫn này, chúng tôi sẽ giao diện Mô-đun Wi-Fi ESP8266 với vi điều khiển ARM7-LPC2148 và tạo một máy chủ web để điều khiển đèn LED được kết nối với LPC2148. Quy trình làm việc sẽ diễn ra như sau:
- Gửi lệnh AT từ LPC2148 đến ESP8266 để cấu hình ESP8266 ở chế độ AP
- Kết nối Wi-Fi của máy tính xách tay hoặc máy tính với Điểm truy cập ESP8266
- Tạo trang web HTML trong PC bằng địa chỉ IP Điểm truy cập của máy chủ web ESP8266
- Tạo chương trình cho LPC2148 để điều khiển đèn LED theo giá trị nhận được từ ESP8266
Nếu bạn hoàn toàn mới với mô-đun Wi-Fi ESP8266, hãy truy cập các liên kết bên dưới để làm quen với mô-đun Wi-Fi ESP8266.
- Bắt đầu với Bộ thu phát Wi-Fi ESP8266 (Phần 1)
- Bắt đầu với ESP8266 (Phần 2): Sử dụng lệnh AT
- Bắt đầu với ESP8266 (Phần 3): Lập trình ESP8266 với Arduino IDE và nhấp nháy bộ nhớ của nó
Thành phần bắt buộc
Phần cứng:
- ARM7-LPC2148
- Mô-đun Wi-Fi ESP8266
- FTDI (USB sang UART TTL)
- Đèn LED
- IC điều chỉnh điện áp 3.3V
- Breadboard
Phần mềm:
- KEIL uVision
- Flash Magic Tool
- Bột trét
Mô-đun Wi-Fi ESP8266
ESP8266 là một mô-đun Wi-Fi được sử dụng rộng rãi với chi phí thấp cho các dự án nhúng yêu cầu nguồn điện thấp 3,3V. Nó chỉ sử dụng hai dây TX và RX để giao tiếp nối tiếp và truyền dữ liệu giữa ESP8266 và bất kỳ vi điều khiển nào có cổng UART.
Sơ đồ chân cho mô-đun Wi-Fi ESP8266
- GND, mặt đất (0 V)
- TX, Truyền bit dữ liệu X
- GPIO 2, đầu vào / đầu ra mục đích chung số 2
- CH_PD, chip tắt nguồn
- GPIO 0, đầu vào / đầu ra mục đích chung số 0
- RST, Đặt lại
- RX, Nhận bit dữ liệu X
- VCC, Điện áp (+3,3 V)
Thiết lập bảng mạch ESP8266
ESP8266 yêu cầu nguồn cung cấp liên tục 3.3V và nó không thân thiện với bảng mạch. Vì vậy, trong hướng dẫn trước của chúng tôi về ESP8266, chúng tôi đã tạo bảng mạch cho ESP8266 với bộ điều chỉnh Điện áp 3.3V, nút nhấn ĐẶT LẠI và thiết lập jumper cho các chế độ chuyển đổi (lệnh AT hoặc chế độ flash). Nó cũng có thể được thiết lập trên breadboard mà không cần sử dụng perf board.
Ở đây, chúng tôi đã hàn tất cả các thành phần trên bảng mạch để tạo bảng mạch Wi-Fi ESP8266 của riêng mình
Tìm hiểu giao diện của ESP8266 với các bộ vi điều khiển khác nhau bằng các liên kết sau:
- Bắt đầu với ESP8266 (Phần 3): Lập trình ESP8266 với Arduino IDE và nhấp nháy bộ nhớ của nó
- Kết nối ESP8266 với STM32F103C8: Tạo máy chủ web
- Gửi email bằng MSP430 Launchpad và ESP8266
- Giao diện ESP8266 với Vi điều khiển PIC16F877A
- Giám sát Dumpster Dựa trên IOT sử dụng Arduino & ESP8266
Tất cả các dự án dựa trên ESP8266 có thể được tìm thấy tại đây.
Kết nối LPC2148 với ESP8266 cho Giao tiếp nối tiếp
Để giao tiếp ESP8266 với LPC2148, chúng ta phải thiết lập giao tiếp nối tiếp UART giữa hai thiết bị này để gửi các lệnh AT từ LPC2148 đến ESP8266 để định cấu hình mô-đun Wi-Fi ESP8266. Để biết thêm về các lệnh ESP8266 AT, hãy làm theo liên kết.
Vì vậy, để sử dụng giao tiếp UART trong LPC2148, chúng ta cần khởi tạo cổng UART trong LPC2148. LPC2148 có hai cổng UART sẵn có (UART0 và UART1).
Ghim UART trong LPC2148
UART_Port |
TX_PIN |
RX_PIN |
UART0 |
P0.0 |
P0.1 |
UART1 |
P0.8 |
P0.9 |
Khởi tạo UART0 trong LPC2148
Như chúng ta biết rằng các chân của LPC2148 là các chân đa dụng nên chúng ta cần sử dụng thanh ghi PINSEL0 để sử dụng UART0. Trước khi khởi tạo UART0, hãy cho biết về các thanh ghi UART này được sử dụng trong LPC2148 để sử dụng tính năng UART.
Đăng ký UART trong LPC2148
Bảng dưới đây cho thấy một số thanh ghi quan trọng được sử dụng trong lập trình. Trong các hướng dẫn trong tương lai, chúng ta sẽ xem sơ qua về các thanh ghi khác được sử dụng cho UART trong LPC2148.
x-0 cho UART0 & x-1 cho UART1:
ĐĂNG KÝ |
ĐĂNG KÝ TÊN |
SỬ DỤNG |
UxRBR |
Nhận đăng ký đệm |
Chứa giá trị đã nhận gần đây |
UxTHR |
Đăng ký lưu giữ truyền |
Chứa dữ liệu được truyền |
UxLCR |
Đăng ký kiểm soát dòng |
Chứa định dạng khung UART (Không có bit dữ liệu, bit dừng) |
UxDLL |
Divisor Latch LSB |
LSB của giá trị bộ tạo tốc độ truyền UART |
UxDLM |
Chốt số chia MSB |
MSB của giá trị bộ tạo tốc độ truyền UART |
UxIER |
Đăng ký cho phép ngắt |
Nó được sử dụng để kích hoạt các nguồn ngắt UART0 hoặc UART1 |
UxIIR |
Đăng ký nhận dạng ngắt |
Nó chứa mã trạng thái có mức độ ưu tiên và nguồn ngắt đang chờ xử lý |
Sơ đồ mạch và kết nối
Kết nối giữa LPC2148, ESP8266 và FTDI được hiển thị bên dưới
LPC2148 |
ESP8266 |
FTDI |
TX (P0.0) |
RX |
NC |
RX (P0.1) |
TX |
RX |
ESP8266 được cấp nguồn qua Bộ điều chỉnh điện áp 3.3V và FTDI & LPC2148 được cấp nguồn từ USB.
Tại sao FTDI lại ở đây?Trong hướng dẫn này, chúng tôi đã kết nối chân RX của FTDI (USB to UART TTL) với chân ESP8266 TX được kết nối thêm với chân LPC2148 RX, để chúng tôi có thể xem phản hồi của mô-đun ESP8266 bằng cách sử dụng bất kỳ phần mềm đầu cuối nào như putty, Arduino IDE. Nhưng đối với điều đó, hãy đặt tốc độ truyền theo tốc độ truyền của mô-đun Wi-Fi ESP8266. (Tỷ lệ Baud của tôi là 9600).
Các bước liên quan đến lập trình UART0 trong LPC2148 để giao tiếp ESP8266
Dưới đây là các bước lập trình để kết nối ESP8266 với LPC2148 để làm cho nó tương thích với IoT.
Bước 1: - Đầu tiên chúng ta cần khởi tạo các chân UART0 TX & RX trong thanh ghi PINSEL0.
(P0.0 dưới dạng TX và P0.1 dưới dạng RX) PINSEL0 = PINSEL0 - 0x00000005;
Bước 2: - Tiếp theo trong U0LCR (Line Control Register), đặt DLAB (Divisor Latch Access Bit) thành 1 vì nó cho phép chúng và sau đó đặt không có bit dừng là 1 và độ dài khung dữ liệu là 8 bit.
U0LCR = 0x83;
Bước 3: - Bước quan trọng cần lưu ý bây giờ là thiết lập các giá trị của U0DLL & U0DLM tùy thuộc vào giá trị PCLK và tốc độ truyền mong muốn. Thông thường đối với ESP8266, chúng tôi sử dụng tốc độ truyền là 9600. Vì vậy, hãy xem cách đặt tốc độ truyền 9600 cho UART0.
Công thức tính tốc độ truyền:
Ở đâu, PLCK: Đồng hồ ngoại vi theo tần số (MHz)
U0DLM, U0DLL: Thanh ghi bộ chia bộ tạo Tốc độ Baud
MULVAL, DIVADDVAL: Các thanh ghi này là các giá trị của trình tạo phân số
Đối với Tốc độ Baud 9600 với PCLK = 15MHZ
MULVAL = 1 & DIVADDVAL = 0
256 * U0DLM + U0DLL = 97,65
Vì vậy, U0DLM = 0 và chúng tôi nhận được U0DLL = 97 (Phân số không được phép)
Vì vậy, chúng tôi sử dụng mã sau:
U0DLM = 0x00; U0DLL = 0x61; (Giá trị thập lục phân của 97)
Bước 4: - Cuối cùng, chúng ta phải tắt DLA (Divisor Latch Access) được đặt thành 0 trong LCR.
Vì vậy chúng tôi có
U0LCR & = 0x0F;
Bước 5: - Để truyền một ký tự, tải byte sẽ được gửi trong U0THR và đợi cho đến khi byte được truyền, được chỉ ra bằng BA trở thành CAO.
void UART0_TxChar (char ch) { U0THR = ch; while ((U0LSR & 0x40) == 0); }
Bước 6: - Để truyền một chuỗi, chức năng dưới đây được sử dụng. Để gửi dữ liệu chuỗi từng cái một, chúng tôi đã sử dụng hàm ký tự từ bước trên.
void UART0_SendString (char * str) { uint8_t i = 0; while (str! = '\ 0') { UART0_TxChar (str); i ++; } }
Bước 7: - Đối với Nhận một chuỗi, chức năng thường trình dịch vụ ngắt được sử dụng ở đây vì mô-đun Wi-Fi ESP8266 sẽ truyền dữ liệu trở lại chân RX của LPC2148 bất cứ khi nào chúng tôi gửi lệnh AT hoặc bất cứ khi nào ESP8266 gửi dữ liệu đến LPC2148, giống như chúng tôi gửi dữ liệu vào máy chủ web của ESP8266.
Ví dụ: Khi chúng tôi gửi lệnh AT tới ESP8266 từ LPC2148 (“AT \ r \ n”) thì chúng tôi nhận được câu trả lời “OK” từ mô-đun Wi-Fi.
Vì vậy, chúng tôi sử dụng một ngắt ở đây để kiểm tra giá trị nhận được từ mô-đun Wi-Fi ESP8266 vì quy trình dịch vụ ngắt ISR có mức ưu tiên cao nhất.
Vì vậy, bất cứ khi nào ESP8266 gửi dữ liệu đến chân RX của LPC2148 thì ngắt được đặt và chức năng ISR được thực thi.
Bước 8: - Để kích hoạt ngắt cho UART0, sử dụng mã sau
Các VICintEnable được vectored gián đoạn cho phép register sử dụng để cho phép ngắt cho UART0.
VICIntEnable - = (1 << 6);
Các VICVecCnt10 được vectored đăng ký kiểm soát ngắt mà giao đất khe cho UART0.
VICVectCntl0 = (1 << 5) - 6;
Tiếp theo, VICVectaddr0 là thanh ghi địa chỉ ngắt vectơ có địa chỉ ISR thường trình dịch vụ ngắt.
VICVectAddr0 = (không dấu) UART0_ISR;
Sau đó, chúng ta phải gán ngắt cho thanh ghi bộ đệm Nhận RBR. Vì vậy, trong thanh ghi cho phép ngắt (U0IER) chúng tôi đặt cho RBR. Vì vậy, thường trình dịch vụ ngắt (ISR) đó được gọi khi chúng ta nhận dữ liệu.
U0IER = IER_RBR;
Cuối cùng, chúng tôi có chức năng ISR cần thực hiện tác vụ nhất định khi chúng tôi nhận dữ liệu từ Mô-đun Wi-Fi ESP8266. Ở đây, chúng tôi chỉ đọc giá trị nhận được từ ESP8266 có trong U0RBR và lưu trữ các giá trị đó trong UART0_BUFFER. Cuối cùng ở cuối ISR, VICVectAddr phải được đặt bằng 0 hoặc giá trị giả.
void UART0_ISR () __irq { unsigned char IIRValue; IIRValue = U0IIR; IIRValue >> = 1; IIRValue & = 0x02; if (IIRValue == IIR_RDA) { UART_BUFFER = U0RBR; uart0_count ++; if (uart0_count == BUFFER_SIZE) { uart0_count = 0; } } VICVectAddr = 0x0; }
Bước 9: - Vì mô-đun Wi-Fi ESP8266 phải được đặt ở chế độ AP, chúng tôi cần gửi các lệnh AT được tôn trọng từ LPC2148 bằng cách sử dụng hàm UART0_SendString () .
Các lệnh AT được gửi đến ESP8266 từ LPC2148 được đề cập bên dưới. Sau khi gửi mỗi lệnh AT, ESP8266 phản hồi bằng “OK”
1. Gửi AT tới ESP8266
UART0_SendString ("AT \ r \ n"); delay_ms (3000);
2. Gửi AT + CWMODE = 2 (Đặt ESP8266 ở chế độ AP).
UART0_SendString ("AT + CWMODE = 2 \ r \ n"); delay_ms (3000);
3. Gửi AT + CIFSR (Để nhận IP của AP)
UART0_SendString ("AT + CIFSR \ r \ n"); delay_ms (3000);
4. Gửi AT + CIPMUX = 1 (Đối với nhiều kết nối lẫn nhau)
UART0_SendString ("AT + CIPMUX = 1 \ r \ n"); delay_ms (3000);
5. Gửi AT + CIPSERVER = 1,80 (Để KHỞI ĐỘNG MÁY CHỦ ESP8266 với CỔNG MỞ)
UART0_SendString ("AT + CIPSERVER = 1,80 \ r \ n"); delay_ms (3000);
Lập trình và nhấp nháy tệp Hex sang LPC2148
Để lập trình ARM7-LPC2148, chúng ta cần công cụ keil uVision & Flash Magic. Cáp USB được sử dụng ở đây để lập trình Thanh ARM7 qua cổng micro USB. Chúng tôi viết mã bằng Keil và tạo một tệp hex và sau đó tệp HEX được chuyển sang thanh ARM7 bằng Flash Magic. Để biết thêm về cách cài đặt keil uVision và Flash Magic cũng như cách sử dụng chúng, hãy truy cập liên kết Bắt đầu với Vi điều khiển ARM7 LPC2148 và Lập trình bằng Keil uVision.
Chương trình hoàn chỉnh được đưa ra ở cuối hướng dẫn.
Lưu ý: Trong khi tải tệp HEX lên LPC2148, bạn không được cấp nguồn cho Mô-đun Wi-Fi ESP8266 và mô-đun FTDI được kết nối với LPC2148.
Điều khiển đèn LED bằng Máy chủ trang web IoT ESP8266 với LPC2148
Bước 1: - Sau khi tải tệp HEX lên LPC2148, kết nối mô-đun FTDI với PC qua cáp USB và mở phần mềm đầu cuối putty.
Chọn Serial và sau đó Chọn cổng COM theo PC của bạn hoặc LAPTOP của tôi là (COM3). Tốc độ baud là 9600.
Bước 2: - Bây giờ đặt lại Mô-đun Wi-Fi ESP8266 hoặc chỉ cần TẮT NGUỒN và BẬT NGUỒN lại, thiết bị đầu cuối putty sẽ hiển thị phản hồi của mô-đun Wi-Fi ESP8266 như hình bên dưới. \
Bước 3: - Bây giờ nhấn nút ĐẶT LẠI trên LPC2148. Sau đó LPC2148 bắt đầu gửi các lệnh AT tới ESP8266. Chúng ta có thể thấy phản ứng của điều đó trong thiết bị đầu cuối putty.
Bước 4: - Như bạn thấy trong hình trên, ESP8266 được đặt ở MODE 2 là chế độ AP và địa chỉ của APIP là 192.168.4.1. Lưu ý địa chỉ này vì địa chỉ này sẽ được mã hóa cứng trong mã HTML của trang web để điều khiển đèn LED được kết nối với LPC2148.
Quan trọng : Khi ESP8266 ở chế độ AP, bạn phải kết nối PC của mình với ESP8266 AP. Xem hình ảnh bên dưới mô-đun ESP8266 của tôi hiển thị AP dưới tên ESP_06217B (Nó đang mở và không có mật khẩu).
Bước 5: - Sau khi kết nối PC với AP ESP8266, hãy mở sổ ghi chú và sao chép-dán trang web chương trình HTML sau. Đảm bảo thay đổi địa chỉ APIP theo mô-đun Wi-Fi ESP8266 của bạn
Chào mừng bạn đến với Circuit Digest
Giao diện ESP8266 với LPC2148: Tạo Webserver để điều khiển đèn LED
LED BẬT LED TẮTTrong trang HTML này, chúng tôi đã tạo hai nút siêu liên kết để Bật và tắt đèn LED từ trang web.
Cuối cùng lưu tài liệu notepad dưới dạng đuôi .html
Trang web sẽ được hiển thị như bên dưới trong trình duyệt web.
Ở đây địa chỉ là địa chỉ IP của AP 192.168.4.1 và chúng tôi gửi các giá trị @ và% để BẬT và TẮT đèn LED bằng cách sử dụng logic này bên dưới trong LPC2148.
while (1) { if (uart0_count! = 0) { COMMAND = UART0_BUFFER; if (COMMAND == LEDON) // Logic để đặt LED BẬT hoặc TẮT tùy thuộc vào giá trị nhận được từ ESP8266 { IOSET1 = (1 << 20); // Đặt OUTPUT HIGH delay_ms (100); } else if (COMMAND == LEDOFF) { IOCLR1 = (1 << 20); // Đặt OUTPUT LOW delay_ms (100); } } }
Đây là cách một thiết bị có thể được điều khiển từ xa bằng bộ vi điều khiển ESP8266 và ARM7 LPC2148. Mã hoàn chỉnh và video giải thích được đưa ra bên dưới.