- ส่วนประกอบที่จำเป็น
- โมดูล Wi-Fi ESP8266
- การเชื่อมต่อ LPC2148 กับ ESP8266 สำหรับการสื่อสารแบบอนุกรม
- แผนภาพวงจรและการเชื่อมต่อ
- ขั้นตอนที่เกี่ยวข้องในการเขียนโปรแกรม UART0 ใน LPC2148 สำหรับการเชื่อมต่อ ESP8266
- การควบคุม LED โดยใช้ ESP8266 IoT Webserver กับ LPC2148
ตัวรับส่งสัญญาณ Wi-Fi ESP8266 ให้วิธีการเชื่อมต่อไมโครคอนโทรลเลอร์เข้ากับเครือข่าย มีการใช้กันอย่างแพร่หลายในโครงการ IoT เนื่องจากมีราคาถูกเล็กและใช้งานง่าย ก่อนหน้านี้เราได้ใช้มันเพื่อสร้างเว็บเซิร์ฟเวอร์โดยใช้เว็บเซิร์ฟเวอร์ Raspberry และเว็บเซิร์ฟเวอร์ Arduino
ในบทช่วยสอนนี้เราจะเชื่อมต่อโมดูล Wi-Fi ESP8266 กับไมโครคอนโทรลเลอร์ ARM7-LPC2148และสร้างเว็บเซิร์ฟเวอร์เพื่อควบคุม LED ที่เชื่อมต่อกับ LPC2148 ขั้นตอนการทำงานจะเป็นดังนี้:
- ส่งคำสั่ง AT จาก LPC2148 ถึง ESP8266 เพื่อกำหนดค่า ESP8266 ในโหมด AP
- เชื่อมต่อ Wi-Fi ของแล็ปท็อปหรือคอมพิวเตอร์กับจุดเชื่อมต่อ ESP8266
- สร้างเว็บเพจ HTML ในพีซีด้วยที่อยู่ IP ของจุดเข้าใช้งานของเว็บเซิร์ฟเวอร์ ESP8266
- สร้างโปรแกรมสำหรับ LPC2148 เพื่อควบคุม LED ตามค่าที่ได้รับจาก ESP8266
หากคุณเพิ่งเริ่มใช้โมดูล Wi-Fi ESP8266 ใหม่ไปที่ลิงก์ด้านล่างเพื่อทำความคุ้นเคยกับโมดูล Wi-Fi ESP8266
- เริ่มต้นกับ ESP8266 ตัวรับส่งสัญญาณ Wi-Fi (ตอนที่ 1)
- เริ่มต้นกับ ESP8266 (ตอนที่ 2): การใช้คำสั่ง AT
- เริ่มต้นกับ ESP8266 (ตอนที่ 3): การเขียนโปรแกรม ESP8266 ด้วย Arduino IDE และกะพริบหน่วยความจำ
ส่วนประกอบที่จำเป็น
ฮาร์ดแวร์:
- ARM7-LPC2148
- โมดูล Wi-Fi ESP8266
- FTDI (USB เป็น UART TTL)
- LED
- IC ควบคุมแรงดันไฟฟ้า 3.3V
- เขียงหั่นขนม
ซอฟต์แวร์:
- KEIL uVision
- Flash Magic Tool
- ผงสำหรับอุดรู
โมดูล Wi-Fi ESP8266
ESP8266 เป็นโมดูล Wi-Fi ที่ใช้กันอย่างแพร่หลายในราคาประหยัดสำหรับโครงการฝังตัวที่ต้องการพลังงานต่ำ 3.3V ใช้เพียงสองสาย TX และ RX สำหรับการสื่อสารแบบอนุกรมและการถ่ายโอนข้อมูลระหว่าง ESP8266 และไมโครคอนโทรลเลอร์ที่มีพอร์ต UART
Pin Diagram สำหรับโมดูล Wi-Fi ESP8266
- GND, กราวด์ (0 V)
- TXส่งบิตข้อมูล X
- GPIO 2อินพุต / เอาท์พุตเอนกประสงค์หมายเลข 2
- CH_PD, ชิปปิดเครื่อง
- GPIO 0, อินพุต / เอาต์พุตเอนกประสงค์หมายเลข 0
- RST, รีเซ็ต
- RXรับบิตข้อมูล X
- VCC, แรงดันไฟฟ้า (+3.3 V)
การตั้งค่าแผงวงจร ESP8266
ESP8266 ต้องการแหล่งจ่ายไฟคงที่ 3.3V และไม่เป็นมิตรกับเขียงหั่นขนม ดังนั้นในบทช่วยสอนก่อนหน้าของเราเกี่ยวกับ ESP8266 เราได้สร้างแผงวงจรสำหรับ ESP8266 พร้อมตัวควบคุมแรงดันไฟฟ้า 3.3V ปุ่มกด RESET และการตั้งค่าจัมเปอร์สำหรับสลับโหมด (คำสั่ง AT หรือโหมดแฟลช) นอกจากนี้ยังสามารถติดตั้งบน breadboard โดยไม่ต้องใช้ perf board
ที่นี่เราบัดกรีส่วนประกอบทั้งหมดบนเขียงหั่นขนมเพื่อสร้างบอร์ด Wi-Fi ESP8266 ของเราเอง
เรียนรู้การเชื่อมต่อ ESP8266 กับไมโครคอนโทรลเลอร์ต่างๆตามลิงค์ด้านล่าง:
- เริ่มต้นกับ ESP8266 (ตอนที่ 3): การเขียนโปรแกรม ESP8266 ด้วย Arduino IDE และกะพริบหน่วยความจำ
- การเชื่อมต่อ ESP8266 กับ STM32F103C8: การสร้างเว็บเซิร์ฟเวอร์
- การส่งอีเมลโดยใช้ MSP430 Launchpad และ ESP8266
- การเชื่อมต่อ ESP8266 กับไมโครคอนโทรลเลอร์ PIC16F877A
- การตรวจสอบถังขยะโดยใช้ IOT โดยใช้ Arduino และ ESP8266
สามารถพบโครงการที่ใช้ ESP8266 ทั้งหมดได้ที่นี่
การเชื่อมต่อ LPC2148 กับ ESP8266 สำหรับการสื่อสารแบบอนุกรม
ในการเชื่อมต่อ ESP8266 กับ LPC2148เราต้องสร้างการสื่อสารแบบอนุกรม UART ระหว่างอุปกรณ์ทั้งสองนี้เพื่อส่งคำสั่ง AT จาก LPC2148 ถึง ESP8266 เพื่อกำหนดค่าโมดูล Wi-Fi ESP8266 หากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับคำสั่ง ESP8266 AT ตามลิงค์
ดังนั้นในการใช้การสื่อสาร UART ใน LPC2148 เราจำเป็นต้องเริ่มต้นพอร์ต UART ใน LPC2148 LPC2148 มีพอร์ต UART ในตัวสองพอร์ต (UART0 และ UART1)
UART Pins ในLPC2148
UART_Port |
TX_PIN |
RX_PIN |
UART0 |
P0.0 |
P0.1 |
UART1 |
P0.8 |
P0.9 |
การเริ่มต้น UART0 ใน LPC2148
ดังที่เราทราบดีว่าพินของ LPC2148 เป็นพินสำหรับใช้งานทั่วไปดังนั้นเราจึงต้องใช้การลงทะเบียน PINSEL0 เพื่อใช้ UART0 ก่อนเริ่มต้น UART0 โปรดทราบเกี่ยวกับการลงทะเบียน UART เหล่านี้ที่ใช้ใน LPC2148 สำหรับการใช้คุณสมบัติ UART
UART ลงทะเบียนใน LPC2148
ตารางด้านล่างแสดงการลงทะเบียนที่สำคัญบางอย่างที่ใช้ในการเขียนโปรแกรม ในบทช่วยสอนในอนาคตเราจะเห็นสั้น ๆ เกี่ยวกับการลงทะเบียนอื่น ๆ ที่ใช้กับ UART ใน LPC2148
x-0 สำหรับ UART0 และ x-1 สำหรับ UART1:
ลงทะเบียน |
ลงทะเบียนชื่อ |
ใช้ |
UxRBR |
รับการลงทะเบียนบัฟเฟอร์ |
ประกอบด้วยค่าที่ได้รับล่าสุด |
UxTHR |
ส่งการลงทะเบียนโฮลดิ้ง |
มีข้อมูลที่จะส่ง |
UxLCR |
ลงทะเบียนควบคุมสาย |
มีรูปแบบเฟรม UART (No of Data Bits, Stop bit) |
UxDLL |
สลัก Divisor LSB |
LSB ของค่าเครื่องกำเนิดอัตราบอด UART |
UxDLM |
Divisor Latch MSB |
MSB ของค่าเครื่องกำเนิดอัตราบอด UART |
UxIER |
ขัดจังหวะเปิดใช้งานการลงทะเบียน |
ใช้เพื่อเปิดใช้แหล่งที่มาของการขัดจังหวะ UART0 หรือ UART1 |
UxIIR |
ขัดจังหวะการลงทะเบียนประจำตัว |
ประกอบด้วยรหัสสถานะที่มีลำดับความสำคัญและแหล่งที่มาของการขัดจังหวะที่รอดำเนินการ |
แผนภาพวงจรและการเชื่อมต่อ
การเชื่อมต่อระหว่าง LPC2148, ESP8266 และ FTDI แสดงอยู่ด้านล่าง
LPC2148 |
ESP8266 |
ส. อ. ท |
เท็กซัส (P0.0) |
RX |
NC |
RX (P0.1) |
TX |
RX |
ESP8266 ใช้พลังงานจากตัวควบคุมแรงดันไฟฟ้า 3.3V และ FTDI & LPC2148 ใช้พลังงานจาก USB
ทำไม FTDI ถึงมาที่นี่?ในบทช่วยสอนนี้เราได้เชื่อมต่อพิน RX ของ FTDI (USB เป็น UART TTL) กับพิน ESP8266 TX ซึ่งเชื่อมต่อกับพิน LPC2148 RX เพิ่มเติมเพื่อให้เราสามารถเห็นการตอบสนองของโมดูล ESP8266 โดยใช้ซอฟต์แวร์เทอร์มินัลใด ๆ เช่นผงสำหรับอุดรู Arduino IDE. แต่สำหรับนั้นให้กำหนดอัตราการรับส่งข้อมูลตามอัตราการส่งข้อมูลของโมดูล Wi-Fi ESP8266 (อัตราบอดของฉันคือ 9600)
ขั้นตอนที่เกี่ยวข้องในการเขียนโปรแกรม UART0 ใน LPC2148 สำหรับการเชื่อมต่อ ESP8266
ด้านล่างนี้เป็นขั้นตอนการเขียนโปรแกรมเพื่อเชื่อมต่อ ESP8266 กับ LPC2148 ซึ่งจะทำให้เข้ากันได้กับ IoT
ขั้นตอนที่ 1: -ก่อนอื่นเราต้องเริ่มต้นพิน UART0 TX & RX ในการลงทะเบียน PINSEL0
(P0.0 เป็น TX และ P0.1 เป็น RX) PINSEL0 = PINSEL0 - 0x00000005;
ขั้นตอนที่ 2: -ถัดไปใน U0LCR (Line Control Register) ตั้งค่า DLAB (Divisor Latch Access Bit) เป็น 1 ตามที่เปิดใช้งานจากนั้นตั้งค่าไม่ให้บิตหยุดเป็น 1 และความยาวเฟรมข้อมูล 8 บิต
U0LCR = 0x83;
ขั้นตอนที่ 3: -ตอนนี้ขั้นตอนสำคัญที่ต้องสังเกตคือการตั้งค่าของ U0DLL & U0DLM ขึ้นอยู่กับค่า PCLK และอัตราการส่งข้อมูลที่ต้องการ โดยปกติสำหรับ ESP8266 เราใช้อัตราการส่งข้อมูลที่ 9600 ดังนั้นเรามาดูวิธีการตั้งค่าอัตรารับส่งข้อมูล 9600 สำหรับ UART0
สูตรคำนวณอัตราบอด:
ที่ไหน
PLCK: นาฬิกาอุปกรณ์ต่อพ่วงในความถี่ (MHz)
U0DLM, U0DLL: ตัวแบ่งเครื่องกำเนิดไฟฟ้า Baud Rate ลงทะเบียน
MULVAL, DIVADDVAL: การลงทะเบียนเหล่านี้เป็นค่าตัวสร้างเศษส่วน
สำหรับ Baud Rate 9600 พร้อม PCLK = 15MHZ
MULVAL = 1 & DIVADDVAL = 0
256 * U0DLM + U0DLL = 97.65
ดังนั้น U0DLM = 0 และเราได้รับ U0DLL = 97 (ไม่อนุญาตให้ใช้เศษส่วน)
ดังนั้นเราจึงใช้รหัสต่อไปนี้:
U0DLM = 0x00; U0DLL = 0x61; (ค่าเลขฐานสิบหกเท่ากับ 97)
ขั้นตอนที่ 4: -สุดท้ายเราต้องปิดการใช้งาน DLA (Divisor Latch Access) เป็น 0 ใน LCR
ดังนั้นเราจึงมี
U0LCR & = 0x0F;
ขั้นตอนที่ 5: - สำหรับการส่งอักขระให้โหลดไบต์ที่จะส่งใน U0THR และรอจนกว่าไบต์จะถูกส่งซึ่งระบุโดย THRE กลายเป็น HIGH
เป็นโมฆะ UART0_TxChar (ถ่าน ch) { U0THR = ch; ในขณะที่ ((U0LSR & 0x40) == 0); }
ขั้นตอนที่ 6: - สำหรับการส่งสตริงจะใช้ฟังก์ชันด้านล่าง ในการส่งข้อมูลสตริงทีละตัวเราใช้ฟังก์ชันอักขระจากขั้นตอนด้านบน
เป็นโมฆะ UART0_SendString (ถ่าน * str) { uint8_t i = 0; ในขณะที่ (str! = '\ 0') { UART0_TxChar (str); ผม ++; } }
ขั้นตอนที่ 7: - สำหรับการรับสตริงฟังก์ชันอินเตอร์รัปต์เซอร์วิสรูทีนจะถูกใช้ที่นี่เนื่องจากโมดูล Wi-Fi ESP8266 จะส่งข้อมูลกลับไปที่พิน RX ของ LPC2148 เมื่อใดก็ตามที่เราส่งคำสั่ง AT หรือเมื่อใดก็ตามที่ ESP8266 ส่งข้อมูลไปยัง LPC2148 เช่นที่เราส่ง ข้อมูลไปยังเว็บเซิร์ฟเวอร์ของ ESP8266
ตัวอย่าง:เมื่อเราส่งคำสั่ง AT ไปยัง ESP8266 จาก LPC2148 (“ AT \ r \ n”) เราจะได้รับคำตอบว่า“ ตกลง” จากโมดูล Wi-Fi
ดังนั้นเราจึงใช้การขัดจังหวะที่นี่เพื่อตรวจสอบค่าที่ได้รับจากโมดูล Wi-Fi ESP8266 เนื่องจากรูทีนบริการขัดจังหวะ ISR มีลำดับความสำคัญสูงสุด
ดังนั้นเมื่อใดก็ตามที่ ESP8266 ส่งข้อมูลไปยัง RX พินของ LPC2148 การขัดจังหวะจะถูกตั้งค่าและฟังก์ชัน ISR จะทำงาน
ขั้นตอนที่ 8: -ในการเปิดใช้งานการขัดจังหวะสำหรับ UART0ให้ใช้รหัสต่อไปนี้
VICintEnable เป็นเวกเตอร์ขัดจังหวะเปิดใช้งานการลงทะเบียนใช้ในการเปิดการขัดจังหวะสำหรับ UART0
VICIntEnable - = (1 << 6);
VICVecCnt10 เป็นเวกเตอร์ทะเบียนควบคุมการขัดจังหวะที่สล็อตจัดสรรสำหรับ UART0
VICVectCntl0 = (1 << 5) - 6;
ถัดไป VICVectaddr0 คือการลงทะเบียนที่อยู่ อินเทอร์รัปต์ ที่มีการขัดจังหวะที่อยู่ ISR ประจำ
VICVectAddr0 = (ไม่ได้ลงนาม) UART0_ISR;
จากนั้นเราต้องกำหนดการขัดจังหวะสำหรับการลงทะเบียนบัฟเฟอร์ RBR Receive ดังนั้นใน Interrupt เปิดใช้งาน register (U0IER) เราจึงตั้งค่าสำหรับ RBR ดังนั้น interrupt service routine (ISR) จึงถูกเรียกเมื่อเรารับข้อมูล
U0IER = IER_RBR;
สุดท้ายเรามีฟังก์ชัน ISR ที่ต้องทำงานบางอย่างเมื่อเรารับข้อมูลจากโมดูล Wi-Fi ESP8266 ที่นี่เราเพิ่งอ่านค่าที่ได้รับจาก ESP8266 ที่มีอยู่ใน U0RBR และเก็บค่าเหล่านั้นไว้ใน UART0_BUFFER สุดท้ายที่ส่วนท้ายของ ISR ควรตั้งค่า VICVectAddr ด้วยค่าศูนย์หรือดัมมี่
เป็นโมฆะ UART0_ISR () __irq { ถ่าน IIRValue ที่ไม่ได้ลงนาม; IIRValue = U0IIR; IIRValue >> = 1; IIRValue & = 0x02; ถ้า (IIRValue == IIR_RDA) { UART_BUFFER = U0RBR; uart0_count ++; ถ้า (uart0_count == BUFFER_SIZE) { uart0_count = 0; } } VICVectAddr = 0x0; }
ขั้นตอนที่ 9: -โมดูลในฐานะที่เป็น ESP8266 Wi-Fi ควรจะตั้งในโหมด AP ที่เราต้องส่งเคารพคำสั่ง AT จาก LPC2148 โดยใช้ UART0_SendString () ฟังก์ชั่น
คำสั่งที่ถูกส่งไปยัง ESP8266 จาก LPC2148ระบุไว้ด้านล่าง หลังจากส่งคำสั่ง AT แต่ละคำสั่ง ESP8266 ตอบสนองด้วย“ ตกลง”
1. ส่ง AT ไปยัง ESP8266
UART0_SendString ("ที่ \ r \ n"); delay_ms (3000);
2. ส่ง AT + CWMODE = 2 (การตั้งค่า ESP8266 ในโหมด AP)
UART0_SendString ("ที่ + CWMODE = 2 \ r \ n"); delay_ms (3000);
3. ส่ง AT + CIFSR (สำหรับรับ IP ของ AP)
UART0_SendString ("ที่ + CIFSR \ r \ n"); delay_ms (3000);
4. ส่ง AT + CIPMUX = 1 (สำหรับ Mutliple Connections)
UART0_SendString ("AT + CIPMUX = 1 \ r \ n"); delay_ms (3000);
5. ส่ง AT + CIPSERVER = 1,80 (สำหรับ ENABLING ESP8266 SERVER with OPEN PORT)
UART0_SendString ("ที่ + CIPSERVER = 1,80 \ r \ n"); delay_ms (3000);
การเขียนโปรแกรมและการกระพริบไฟล์ Hex เป็น LPC2148
ในการเขียนโปรแกรม ARM7-LPC2148 เราต้องใช้เครื่องมือ keil uVision & Flash Magic สาย USB ใช้ที่นี่เพื่อตั้งโปรแกรม ARM7 Stick ผ่านพอร์ต micro USB เราเขียนโค้ดโดยใช้ Keil และสร้างไฟล์ hex จากนั้นไฟล์ HEX จะถูกแฟลชไปที่แท่ง ARM7 โดยใช้ Flash Magic หากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้ง keil uVision และ Flash Magic และวิธีการใช้งานให้ไปที่ลิงค์เริ่มต้นใช้งานไมโครคอนโทรลเลอร์ ARM7 LPC2148 และตั้งโปรแกรมโดยใช้ Keil uVision
โปรแกรมที่สมบูรณ์จะได้รับในตอนท้ายของบทช่วยสอน
หมายเหตุ: ในขณะอัปโหลดไฟล์ HEX ไปยัง LPC2148 คุณต้องไม่เปิดโมดูล Wi-Fi ESP8266 และโมดูล FTDI ที่เชื่อมต่อกับ LPC2148
การควบคุม LED โดยใช้ ESP8266 IoT Webserver กับ LPC2148
ขั้นตอนที่ 1: -หลังจากอัปโหลดไฟล์ HEX ไปยัง LPC2148 แล้วให้เชื่อมต่อโมดูล FTDI กับพีซีผ่านสาย USB และเปิดซอฟต์แวร์เทอร์มินัลสำหรับอุดรู
เลือก Serial จากนั้นเลือกพอร์ต COM ตามพีซีของคุณหรือ LAPTOP ของฉันคือ (COM3) อัตราการส่งข้อมูลคือ 9600
ขั้นตอนที่ 2: -ตอนนี้รีเซ็ตโมดูล Wi-Fi ESP8266 หรือเพียงแค่ปิดและเปิดเครื่องอีกครั้งเทอร์มินัลสำหรับอุดรูจะแสดงการตอบสนองของโมดูล Wi-Fi ESP8266 ดังที่แสดงด้านล่าง \
ขั้นตอนที่ 3: -ตอนนี้กดปุ่ม RESET บน LPC2148 หลังจากนั้น LPC2148 จะเริ่มส่งคำสั่ง AT ไปยัง ESP8266 เราสามารถดูการตอบสนองของสิ่งนั้นได้ในขั้วสำหรับอุดรู
ขั้นตอนที่ 4: - ดังที่คุณเห็นในภาพด้านบน ESP8266 ถูกตั้งค่าใน MODE 2 ซึ่งเป็นโหมด AP และที่อยู่ของ APIP คือ 192.168.4.1 โปรดสังเกตที่อยู่นี้เนื่องจากที่อยู่นี้จะถูกเข้ารหัสในโค้ด HTML ของหน้าเว็บเพื่อควบคุม LED ที่เชื่อมต่อกับ LPC2148
สำคัญ : เมื่อ ESP8266 อยู่ในโหมด AP คุณต้องเชื่อมต่อพีซีของคุณกับ ESP8266 AP ดูภาพด้านล่างโมดูล ESP8266 ของฉันแสดง AP ในชื่อ ESP_06217B (เปิดอยู่และไม่มีรหัสผ่าน)
ขั้นตอนที่ 5: -หลังจากเชื่อมต่อเครื่องคอมพิวเตอร์ไปยัง ESP8266 AP เปิด Notepad และคัดลอกวางต่อไปนี้หน้าเว็บ HTML โปรแกรม ตรวจสอบให้แน่ใจว่าได้เปลี่ยนที่อยู่ APIP ตามโมดูล Wi-Fi ESP8266 ของคุณ
ยินดีต้อนรับสู่ Circuit Digest
ESP8266 การเชื่อมต่อกับ LPC2148: การสร้างเว็บเซิร์ฟเวอร์เพื่อควบคุม LED
LED เปิด LED ดับในหน้า HTML นี้เราได้สร้างปุ่มไฮเปอร์ลิงก์สองปุ่มเพื่อเปิดและปิด LED จากหน้าเว็บ
สุดท้ายบันทึกเอกสาร notepad เป็นนามสกุล. html
หน้าเว็บจะแสดงดังด้านล่างในเว็บเบราว์เซอร์
ที่อยู่คือที่อยู่ IP ของ AP 192.168.4.1 และเราส่งค่า @ และ% เพื่อเปิดและปิด LED โดยใช้ตรรกะด้านล่างนี้ใน LPC2148
ในขณะที่ (1) { if (uart0_count! = 0) { COMMAND = UART0_BUFFER; ถ้า (COMMAND == LEDON) // ลอจิกเพื่อตั้งค่า LED ON หรือ OFF ขึ้นอยู่กับค่าที่ได้รับจาก ESP8266 { IOSET1 = (1 << 20); // ตั้งค่า OUTPUT HIGH delay_ms (100); } else if (COMMAND == LEDOFF) { IOCLR1 = (1 << 20); // ตั้งค่า OUTPUT LOW delay_ms (100); } } }
นี่คือวิธีควบคุมอุปกรณ์จากระยะไกลโดยใช้ไมโครคอนโทรลเลอร์ ESP8266 และ ARM7 LPC2148 รหัสที่สมบูรณ์และวิดีโอคำอธิบายได้รับด้านล่าง