- วัสดุที่ต้องการ:
- การเขียนโปรแกรมไมโครคอนโทรลเลอร์ PIC:
- ฟังก์ชั่นใน ESP8266 Library:
- โปรแกรมตัวอย่าง:
- เอาต์พุตจำลอง:
- การตรวจสอบผลลัพธ์:
- การเพิ่มฟังก์ชันให้กับไลบรารี ESP8266:
ในบทความนี้ให้เราคุยกับวิธีการเชื่อมต่อ WIFI โมดูล ESP8266 กับไมโครคอนโทรลเลอร์ จนถึงตอนนี้คุณอาจใช้โมดูล ESP8266 เป็นไมโครคอนโทรลเลอร์แบบสแตนด์อโลนหรืออาจใช้กับไลบรารี Arduino แต่เมื่อพูดถึงโครงการระบบฝังตัวที่ไม่ยอมใครง่ายๆเราควรรู้วิธีใช้กับไมโครคอนโทรลเลอร์ PIC เช่นกัน สิ่งนี้จะช่วยให้คุณปรับแต่งโครงการของคุณในมุมมองการออกแบบและในขณะเดียวกันก็ทำให้ราคาถูก
โมดูล ESP8266 มาพร้อมกับเฟิร์มแวร์เริ่มต้นที่โหลดไว้ดังนั้นเราจึงสามารถตั้งโปรแกรมโมดูลโดยใช้คำสั่ง AT คำสั่งเหล่านี้ต้องส่งผ่านช่องทางการสื่อสารแบบอนุกรม ช่องนี้จะจัดตั้งขึ้นระหว่าง PIC และโมดูล ESP8266 โดยใช้โมดูล USART ในไมโครคอนโทรลเลอร์ การทำงานทั้งหมดจะได้รับการตรวจสอบและรายงานไปยังผู้ใช้โดยใช้จอ LCD 16x2 ดังนั้นบทช่วยสอนนี้จึงถือว่าคุณมีความรู้พื้นฐานเกี่ยวกับโมดูล USART ใน PIC การเชื่อมต่อ LCD กับ PIC และการใช้คำสั่ง AT ใน ESP8266 หากคุณไม่ทำเช่นนั้นคุณสามารถกลับไปที่บทช่วยสอนที่เชื่อมโยงเพื่อเรียนรู้ล่วงหน้าได้
วัสดุที่ต้องการ:
คุณจะต้องใช้ฮาร์ดแวร์ต่อไปนี้เพื่อทำบทช่วยสอนนี้ให้เสร็จสิ้น
- PIC16F877A
- ออสซิลเลเตอร์คริสตัล 20MHz
- 7805
- LM317
- ESP8266
- จอ LCD 16 * 2
- โปรแกรมเมอร์ PicKit3
- ตัวต้านทาน (1K, 220ohm, 360ohm)
- ตัวเก็บประจุ (1uF, 0.1uF, 33pF)
- สายจัมเปอร์
- อะแดปเตอร์ 12V เพื่อจ่ายไฟให้กับโมดูล PIC และ ESP
ฮาร์ดแวร์:
แผนผังทั้งหมดของโครงการแสดงไว้ที่นี่ด้านล่าง
แผนผังประกอบด้วยวงจรควบคุมแรงดันไฟฟ้าสองวงจรวงจรหนึ่งคือตัวควบคุม + 5V ซึ่งใช้ในการจ่ายไฟให้กับไมโครคอนโทรลเลอร์ PIC และอีกตัวเป็นตัวควบคุม 3.3V ซึ่งขับเคลื่อนโมดูล ESP8266 + 5V ควบคุมโดยใช้ 7805 (Linear Voltage Regulator IC) 3.3V ถูกควบคุมโดยใช้ LM317 (Variable Voltage Regulator) โมดูล ESP8266 ใช้กระแสไฟฟ้ามาก (~ 800mA) ดังนั้นหากคุณออกแบบแหล่งจ่ายไฟของคุณเองโปรดตรวจสอบให้แน่ใจว่าสามารถจ่ายกระแสไฟฟ้าได้สูง ตรวจสอบให้แน่ใจด้วยว่าได้เชื่อมต่อพินกราวด์ของโมดูล PIC และ ESP8266 เข้าด้วยกันแล้ว
ตอนนี้เรารู้แล้วว่า PIC ทำงานที่ + 5V และ ESP8266 ทำงานที่ 3.3V โวลต์ ในการสร้างการสื่อสาร USART ระหว่างสองโมดูลนี้เราจำเป็นต้องมีวงจรแปลงลอจิก 5V - 3.3V ดังแสดงในรูปด้านบน วงจรนี้ไม่ใช่อะไรนอกจากตัวแบ่งที่มีศักยภาพซึ่งจะแปลง + 5V ขาเข้าเป็น 3.3V สิ่งนี้จะป้องกันไม่ให้ขา RX ที่ทนได้ 3.3V ของ ESP8266 รับ + 5V
ฉันได้สร้างโมดูล PIC และ ESP บนบอร์ด perf สองตัวที่แยกจากกันดังที่แสดงในบทช่วยสอนเหล่านี้ ด้วยวิธีนี้ฉันสามารถใช้มันในระดับสากลสำหรับโครงการที่คล้ายกันมากขึ้น
- ฮาร์ดแวร์ LED ที่ใช้ PIC
- เริ่มต้นกับ ESP8266
คุณสามารถทำตามแบบเดียวกันหรือสร้างบอร์ดของคุณเองในสไตล์ของคุณหรือเพียงแค่เชื่อมต่อวงจรด้านบนกับเขียงหั่นขนม
การเขียนโปรแกรมไมโครคอนโทรลเลอร์ PIC:
ในการตั้งโปรแกรมไมโครคอนโทรลเลอร์ PIC ให้ส่ง“ คำสั่ง AT”โดยใช้ USART ไปยังโมดูล ESP8266 เราต้องใช้ไลบรารี ไลบรารีนี้จะช่วยให้คุณประหยัดความยุ่งยากได้มากเช่นการใช้โมดูลคำสั่ง ESP8266 เพื่อตรวจสอบคำสั่ง AT แต่ละคำสั่งจากนั้นหาวิธีส่งไปยังโมดูล ESP ไลบรารีนี้เป็นซอฟต์แวร์ฟรีที่พัฒนาโดย Camil Staps และต่อมาได้รับการปรับปรุงและแก้ไขโดย Circuit Digest เพื่อให้สามารถใช้กับไมโครคอนโทรลเลอร์ PIC16F877A ของเราได้ คุณสามารถดาวน์โหลดได้ที่นี่
ไลบรารียังอยู่ระหว่างการพัฒนา แต่คุณสามารถใช้คำสั่ง AT ที่สำคัญส่วนใหญ่ในเฟิร์มแวร์ ESP8266 ได้ หากคุณพบว่าคำสั่งใดที่คุณต้องการขาดหายไปโปรดแจ้งให้เราทราบในส่วนความคิดเห็นแล้วฉันจะพยายามเพิ่มคำสั่งให้คุณ บทช่วยสอนนี้จะอธิบายคำสั่งทั้งหมด (จนถึงปัจจุบัน) ที่สามารถใช้ได้ผ่านไลบรารีนี้ นอกจากนี้ยังจะแนะนำให้คุณเพิ่มฟังก์ชันของคุณเองในห้องสมุด
ฟังก์ชั่นใน ESP8266 Library:
- Initialize_ESP8266 (): ฟังก์ชันนี้จะเริ่มต้นโมดูล USART ของ PIC เพื่อสื่อสารกับโมดูล ESP8266 ตั้งค่าอัตรารับส่งข้อมูลที่ 115200 และเตรียมพิน Rx และ Tx ของ PIC สำหรับการสื่อสาร USART
- _esp8266_putch ():ฟังก์ชันนี้ใช้เพื่อส่งอักขระเดี่ยวแบบอนุกรมไปยังโมดูล ESP8266 ตัวอย่างเช่น _esp8266_putch ('a') จะส่งอักขระแบบอนุกรมไปยังโมดูล ESP
- _esp8266_getch ():ฟังก์ชันนี้ใช้เพื่อรับอักขระเดียวจากโมดูล ESP ตัวอย่างเช่นถ้า ESP กำลังพิมพ์“ ตกลง” และเราใช้ถ่าน a = _esp8266_getch () จากนั้นถ่าน 'o' จะถูกเก็บไว้ในตัวแปร a
- ESP8266_send_string ():ฟังก์ชันนี้เป็นเวอร์ชันสตริงของ _esp8266_putch () สามารถส่งสตริงที่สมบูรณ์หนึ่งชุดไปยังโมดูล ESP8266 ตัวอย่างเช่น ESP8266_send_string (“ AT / r / n”) จะส่งคำสั่ง“ AT” ไปยังโมดูล ESP8266
- esp8266_isStarted ():ใช้เพื่อตรวจสอบว่า PIC สามารถสื่อสารกับโมดูล ESP ได้หรือไม่ มันส่งคำสั่ง“ AT” และรอให้“ ตกลง” หากได้รับมันจะส่งคืนจริงมิฉะนั้นจะส่งคืนเท็จ
- esp8266_restart ():รีเซ็ตโมดูล ESP8266 และส่งคืนจริงคือรีเซ็ตสำเร็จและส่งคืนเท็จหากไม่สำเร็จ
- esp8266_mode ():ใช้เพื่อตั้งค่าโหมดการทำงานของโมดูล ESP8266 อย่างที่เราทราบกันดีว่ามันสามารถทำงานได้ในสามโหมดที่แตกต่างกัน
โหมดสถานี |
|
โหมด Soft AP |
|
ทั้งโหมดสถานีและ AP |
- esp8266_connect ():ให้คุณเชื่อมต่อกับสัญญาณ wifi ตัวอย่างเช่น esp8266_connect (“ home”,” 12345678”) จะอนุญาตให้โมดูลของคุณเชื่อมต่อกับสัญญาณ wifi ที่ชื่อ home ซึ่งมีรหัสผ่านคือ 12345678
- esp8266_disconnect ():ฟังก์ชันนี้จะตัดการเชื่อมต่อโมดูลของคุณจากการเชื่อมต่อ wifi ใด ๆ ที่เคยเชื่อมต่อ
- esp8266_ip ():รับที่อยู่ IP และส่งคืน ใช้ฟังก์ชันนี้หากคุณต้องการทราบที่อยู่ IP ของโมดูล ESP8266
- esp8266_start ():ฟังก์ชันนี้ใช้เพื่อเริ่มการสื่อสาร TCP หรือ UDP ยกตัวอย่างเช่น esp8266_start ( "TCP", "192.168.101.110", 80) จะเริ่มเครือข่าย TCP ใน IP นั้นและพอร์ต 80
- esp8266_send ():ฟังก์ชันนี้ใช้เพื่อส่งข้อมูลไปยังเครือข่าย TCP / UDP สคริปต์ HTML จะถูกส่งโดยใช้คำสั่งนี้ จากนั้นสคริปต์นี้จะปรากฏในที่อยู่ IP ซึ่งมีการสร้างการสื่อสารก่อนหน้านี้
- esp8266_config_softAP ():ฟังก์ชันนี้ใช้เพื่อกำหนดค่า softAP ตัวอย่างเช่น esp8266_config_softAP (“ office”,” 12345678”); จะสร้างสัญญาณ Wifi ชื่อ office และควรใช้รหัสผ่าน 12345678 เพื่อเข้าถึง
- esp8266_get_stationIP ():ฟังก์ชันนี้จะส่งคืนที่อยู่ IP / MAC ของไคลเอ็นต์ที่เชื่อมต่อกับ softAP ของคุณ
โปรแกรมตัวอย่าง:
ตอนนี้เราได้เข้าใจการทำงานของแต่ละคำสั่งในไลบรารีแล้วให้เราดูโปรแกรมตัวอย่างเล็ก ๆ ในโปรแกรมนี้เราจะตรวจสอบว่าการเชื่อมต่อระหว่าง ESP8266 และ PIC นั้นสำเร็จหรือไม่จากนั้นสร้างเครือข่าย WIFI (SoftAP) ด้วยชื่อและรหัสผ่านที่ต้องการ โปรแกรมที่สมบูรณ์และการจำลองแบบเดียวกันจะได้รับการอธิบายเพื่อความเข้าใจของคุณ
อีกครั้งหากคุณยังไม่ได้อ่านการเชื่อมต่อ PIC กับ LCD และบทช่วยสอน PIC USART โปรดอ่านก่อนดำเนินการต่อเพราะเพียงเท่านี้คุณก็จะเข้าใจ
เนื่องจากเราเพิ่งเริ่มเชื่อมต่อ PIC กับ ESP8266ฉันจึงใช้ LCD เพื่อให้แน่ใจว่าสิ่งต่างๆทำงานได้อย่างถูกต้อง
ทำ {Lcd_Set_Cursor (1,1); Lcd_Print_String ("ไม่พบ ESP"); } ในขณะที่ (! esp8266_isStarted ()); // รอจนกว่า ESP จะส่งกลับ "ตกลง" Lcd_Set_Cursor (1,1); Lcd_Print_String ("เชื่อมต่อ ESP แล้ว"); __delay_ms (1500); Lcd_Clear ();
เมื่อเราส่ง“ AT” ไปยังโมดูล ESP8266 ระบบจะตอบกลับด้วยคำว่า“ OK” สิ่งนี้ทำให้เรามั่นใจได้ว่าเชื่อมต่อโมดูล ESP8266 เรียบร้อยแล้ว ฟังก์ชัน esp8266_isStarted () ใช้เหมือนกัน เราส่งสัญญาณ AT จาก PIC และเรารอจนกว่าโมดูล ESP จะมีชีวิตและส่งตกลงมาให้เรา หากเราตกลงเราจะแสดงว่า“ ESP เชื่อมต่ออยู่” บนจอ LCD
esp8266_mode (2); Lcd_Set_Cursor (1,1); Lcd_Print_String ("ESP ตั้งเป็น AP"); __delay_ms (1500); Lcd_Clear ();
บรรทัดข้างต้นของโค้ดใช้เพื่อตั้งค่าโมดูล ESP ให้ทำงานในโหมด“ soft AP” ฟังก์ชัน esp8266_mode (2); ส่งคำสั่ง AT“ AT + CWMODE = 3” ไปยังโมดูลและรอให้โมดูลตอบสนองด้วย“ ตกลง”
/ * กำหนดค่าชื่อ AP และรหัสผ่าน * / esp8266_config_softAP ("CircuitDigest", "619007123"); Lcd_Set_Cursor (1,1); Lcd_Print_String ("กำหนดค่า AP แล้ว"); __delay_ms (1500); Lcd_Clear (); / * กำหนดค่า AP แล้ว * /
ส่วนของรหัสนี้ใช้เพื่อกำหนดค่า softAP ที่นี่เราได้ตั้งชื่อ SSID เป็น“ CircuitDigest” และรหัสผ่านเป็น“ 619007123” เพื่อระบุว่ากระบวนการเสร็จสมบูรณ์เราจะรอให้โมดูลตอบสนองด้วย“ ตกลง” จากนั้นพิมพ์ AP ที่กำหนดค่าลงบนหน้าจอ LCD
ตอนนี้เราได้เชื่อมต่อโมดูล ESP8266 กับ PIC MCU แล้วและได้กำหนดค่า softAP ด้วยชื่อและรหัสผ่านที่เราเลือก ตามปกติให้จำลองรหัสนี้และดูว่ามันทำงานอย่างไร
เอาต์พุตจำลอง:
เรากำลังใช้ซอฟต์แวร์ Proteus เพื่อจำลองผลลัพธ์ ไฟล์การออกแบบสำหรับสิ่งเดียวกันนี้สามารถพบได้ในไฟล์แนบ
เนื่องจากเราไม่มีโมดูล ESP8266 ในไลบรารี Proteus เราจึงใช้เทอร์มินัล Serial และตอบกลับในฐานะผู้ใช้โมดูล PIC การจำลองหน้าจอเมื่อเสร็จสิ้นจะมีลักษณะดังนี้
ผลลัพธ์ของรหัสของเราจะแสดงในเทอร์มินัลเสมือน การทำงานทั้งหมดของการจำลองจะอธิบายไว้ในวิดีโอด้านล่าง
การตรวจสอบผลลัพธ์:
เมื่อโปรแกรมได้รับการตรวจสอบโดยใช้การจำลองแล้วให้ถ่ายโอนข้อมูลลงในไมโครคอนโทรลเลอร์ PIC ของคุณ ทำการเชื่อมต่อตามที่แสดงในแผนผังด้านบน (ส่วนฮาร์ดแวร์) คุณควรจะสามารถติดตามความคืบหน้าของคุณผ่านจอ LCD
เมื่อ LCD แจ้งว่ากำหนดค่า AP แล้วเราสามารถตรวจสอบได้โดยใช้การตั้งค่า WIFI ในโทรศัพท์หรือแล็ปท็อป แล็ปท็อปของฉันแสดงสัญญาณต่อไปนี้ตามโปรแกรมของเรา
นั่นคือพวกเราได้เชื่อมต่อโมดูล ESP8266 กับไมโครคอนโทรลเลอร์ PIC เรียบร้อยแล้ว นี่เป็นอินเทอร์เฟซพื้นฐานมากและหากคุณต้องการทำโปรเจ็กต์ที่ซับซ้อนโดยใช้ ESP8266 คุณอาจต้องเพิ่มไลบรารีของคุณเองหรืออย่างน้อยก็เพิ่มฟังก์ชันของคุณเอง เชื่อฉันว่ามันง่ายมากที่จะทำเช่นนั้นฉันจะให้ข้อมูลเชิงลึกสั้น ๆ สำหรับสิ่งเดียวกัน
การเพิ่มฟังก์ชันให้กับไลบรารี ESP8266:
การเพิ่มฟังก์ชันของคุณเองจะช่วยให้คุณส่งคำสั่ง“ AT” ไปยังโมดูล ESP8266 ในการดำเนินการต่อคุณต้องอ่านเอกสารชุดคำสั่งของโมดูล ESP8266 คุณสามารถส่งคำสั่ง AT ที่คุณพบในคู่มือชุดคำสั่งนั้นได้โดยตรง แต่อย่าลืมต่อท้าย“ / r / n” ที่ท้ายคำสั่ง AT ทุกคำสั่ง ตัวอย่างเช่นหากคุณต้องการสร้างการเชื่อมต่อหลายรายการกับโมดูล ESP ของคุณ จากนั้นเปิดเอกสารชุดคำสั่งและค้นหาคำสั่ง AT ที่จะทำงานนี้ให้คุณ ที่นี่คำสั่ง“ AT + CIPMUX = 1” จะช่วยให้คุณสร้างการเชื่อมต่อหลายรายการกับโมดูล ESP ของคุณ
ตอนนี้สิ่งที่คุณต้องทำคือส่ง“ AP + CIPMUX = 1” นี้ไปยังโมดูล ESP8266 ของคุณโดยใช้พอร์ตอนุกรม วิธีที่ไม่ยอมใครง่ายๆคือการใช้คำสั่ง
_esp8266_print ("AT + CIPMUX = 1 \ r \ n" ")
วิธีนี้จะได้ผล แต่ไม่ใช่วิธีที่ดีที่สุด คุณต้องอ่านสิ่งที่ ESP8266 ตอบสนองต่อคำสั่งของคุณ ในกรณีของเรามันจะตอบสนองด้วย "ตกลง" ดังนั้นคุณต้องอ่านข้อมูลขาเข้าจากโมดูล ESP8266 และยืนยันว่าเป็น "ตกลง" นอกจากนี้คุณสามารถสร้างฟังก์ชันนี้โดยที่“ 1” หรือ“ 0” สามารถส่งผ่านเป็นอาร์กิวเมนต์ได้
ไปข้างหน้าและพยายามสร้างฟังก์ชันของคุณเองสำหรับห้องสมุด แต่ถ้าคุณต้องการความช่วยเหลือโปรดใช้ส่วนความคิดเห็นและเราจะช่วยคุณเอง