ไลบรารีสำหรับทำการสืบค้น HTTP ด้วยโมดูล ESP8266 WiFi และ Arduino

ไลบรารีสำหรับทำการสืบค้น HTTP ด้วยโมดูล ESP8266 WiFi และ Arduino

ไลบรารีสำหรับทำการสืบค้น HTTP ด้วยโมดูล ESP8266 WiFi และ Arduino

วิธีง่ายๆ ในการส่งข้อมูลไปและกลับจากไมโครคอนโทรลเลอร์คือการรวมศูนย์ข้อมูลนั้นไว้บนเว็บเซิร์ฟเวอร์ แม้ว่าวิธีการจะไม่มีประสิทธิภาพเท่ากับการเข้าถึงฐานข้อมูลโดยตรง แต่ก็มีประสิทธิภาพเพียงพอ โดยเฉพาะอย่างยิ่งหากคุณพิจารณาโครงการที่ใช้ไมโครคอนโทรลเลอร์ และเพิ่มข้อดีของความแพร่หลาย (ข้อมูลในระบบคลาวด์) และความเรียบง่าย (มัน สามารถจัดการเป็นข้อมูลข้อความและคำสั่งได้) การส่งข้อมูลโดยใช้ระบบนี้อาจประกอบด้วยการร้องขอ HTTP POST และรับโดยการวิเคราะห์เนื้อหาการตอบสนองต่อคำขอ HTTP GET

สารบัญ

    El โมดูล WiFi ESP8266 เป็นตัวเลือกที่ประหยัดมาก ด้วยประสิทธิภาพที่เหมาะมากสำหรับใช้กับไมโครคอนโทรลเลอร์ และใช้งานง่ายมากกับการทำงานกับคำสั่ง AT

    เพื่อจัดระบบการใช้งานด้วยคำขอ HTTP ฉันได้พัฒนาไลบรารีขนาดเล็กที่รองรับความต้องการของโปรเจ็กต์อุปกรณ์การจัดการการนอนหลับของฉัน (ซึ่งฉันเรียกว่า SleepManager) เนื่องจากอิงโครงสร้างพื้นฐานบนเว็บเซิร์ฟเวอร์ที่อนุญาตให้ขยายไปยังอ็อบเจ็กต์ได้ IoT ในขณะที่ บริการคลาวด์. การเพิ่มบริการอื่นๆ เช่น คำขอ UDP ไปยังไลบรารีได้ไม่ใช่เรื่องยาก เป็นต้น การซิงโครไนซ์เวลาผ่าน NTP แม้ว่าดังที่ฉันอธิบายในข้อความที่เชื่อมโยง มันไม่สำคัญสำหรับความต้องการของฉัน และฉันสามารถแก้ไขได้ด้วยคำขอ HTTP ไปยังหน้าเว็บที่เตรียมไว้สำหรับวัตถุประสงค์นั้น ดังที่ฉันแสดงในตัวอย่างการใช้ไลบรารีนี้

    การทำงานของไลบรารีจะขึ้นอยู่กับการส่งคำสั่ง AT เมื่ออุปกรณ์พร้อมใช้งานและทำซ้ำคำสั่งเหล่านั้น (โดยมีความล่าช้าเล็กน้อย) ในกรณีที่เกิดข้อผิดพลาด ซึ่งตีความได้ว่าไม่พร้อมใช้งาน (สำเร็จโดยการทดสอบ) เช่น จากการเข้าถึง WiFi แบบจุดหรือ กำลังปรึกษาเซิร์ฟเวอร์

    ไลบรารีใช้ประโยชน์จากข้อเท็จจริงที่ว่าโมดูล ESP8266 WiFi ส่งคืนรหัส +IPD เพื่อเป็นคำเตือนการรับข้อมูลเพื่อเติมบัฟเฟอร์ขนาดเล็กด้วยข้อมูลที่เซิร์ฟเวอร์ส่งคืน สำหรับโปรเจ็กต์อุปกรณ์การจัดการการนอนหลับ ฉันจำเป็นต้องวิเคราะห์ข้อมูลที่ส่งคืนจากเซิร์ฟเวอร์น้อยมาก ดังนั้น เพื่อประหยัด บัฟเฟอร์และตัวชี้ที่เรียกใช้ผ่านบัฟเฟอร์จึงมีขนาดเล็กเป็นพิเศษ นี่จะเป็นหนึ่งในสิ่งแรกที่คุณจะต้องเปลี่ยนเพื่อนำไลบรารีกลับมาใช้ใหม่เพื่อประมวลผลข้อมูลปริมาณมากขึ้น

    ฟังก์ชั่นที่เปิดเผยเป็นสาธารณะช่วยให้ (1) รู้สถานะของโมดูล: เชื่อมต่ออยู่หรือไม่ มีข้อมูลในบัฟเฟอร์และจำนวนเท่าใด และหากโมดูล ESP8266 ดำเนินการตามที่ร้องขอเสร็จสิ้นแล้วหรือไม่ (2) เชื่อมต่อกับจุดเชื่อมต่อ WiFi บนเครือข่ายที่มีเซิร์ฟเวอร์ DHCP และ (3) ส่งคำขอ HTTP GET และ POST แม้ว่าคุณจะเห็นแล้วว่าโค้ดได้รับการออกแบบมาเพื่อให้ง่ายต่อการเพิ่มผู้อื่น

    เกี่ยวกับการทำงานภายใน เมทริกซ์สองตัวแรกถูกสร้างขึ้น ตัวแรกมีคำสั่ง AT และอีกตัวหนึ่งมีการตอบสนองที่คาดหวังสำหรับความสำเร็จและข้อผิดพลาด ดังนั้นโปรแกรมที่ใช้ไลบรารีจะต้องเรียกใช้ฟังก์ชันเป็นครั้งคราว enviar ซึ่งจะทำหน้าที่ส่งคำสั่งซื้อไปยังโมดูลหากว่างและไม่ยุ่งและไปที่ฟังก์ชัน ได้รับ ซึ่งจะประมวลผลการตอบสนองจากโมดูล ESP8266 (และจากเซิร์ฟเวอร์ HTTP ผ่านโมดูลนั้นหากมี)

    เนื่องจากมีความเป็นไปได้ที่โมดูลอาจถูกตัดการเชื่อมต่อเนื่องจากสัญญาณขาดหาย โปรแกรมหลักสามารถตรวจสอบได้ว่าโมดูล ESP8266 เชื่อมต่อกับจุดเชื่อมต่อ WiFi หรือไม่ (พร้อมฟังก์ชัน conectado) และลองเชื่อมต่อเป็นอย่างอื่น (ด้วยฟังก์ชัน เชื่อมต่อ_wifi)

    หากต้องการทราบว่าการดำเนินการที่ร้องขอเสร็จสิ้นแล้วหรือไม่ โปรแกรมสามารถใช้ฟังก์ชันนี้ได้ การดำเนินการ_เสร็จสิ้น และในกรณีนั้นให้ส่งข้อมูลอื่นหรือใช้ข้อมูลผลลัพธ์ที่ใช้ฟังก์ชันนี้ read_bufferโดยส่งคืนเนื้อหาของบัฟเฟอร์ที่เติมข้อมูลที่มาถึงโมดูล ESP8266 จนกว่าการดำเนินการจะเสร็จสิ้นและฟังก์ชัน บัฟเฟอร์_ความยาว ซึ่งรายงานจำนวนข้อมูลนี้ที่เซิร์ฟเวอร์เตือนว่ากำลังจะถูกส่ง (เพื่อให้ข้อมูลจากโมดูลเองสามารถลดราคาได้)

    ตัวอย่างด้านล่างใช้ไลบรารีแบบสอบถาม HTTP กับโมดูล ESP8266 WiFi เพื่อส่งข้อมูลไปยังเซิร์ฟเวอร์ (เปอร์เซ็นต์ที่ได้รับจากการอ่านอินพุตแบบอะนาล็อก) ทุกๆ ช่วงเวลาที่กำหนด เนื่องจากไม่คาดว่าจะได้รับการตอบสนองใดๆ จึงไม่ได้ใช้บัฟเฟอร์ และเพียงพอสำหรับการดำเนินการให้เสร็จสมบูรณ์อย่างถูกต้อง ระบบนี้คือสิ่งที่ฉันใช้ในโปรเจ็กต์อุปกรณ์จัดการการนอนหลับเพื่อจัดเก็บผลลัพธ์การอ่านเซ็นเซอร์บนเซิร์ฟเวอร์

    ตัวอย่างต่อไปนี้ใช้แบบสอบถาม HTTP GET เพื่อสอบถามเวลาของเซิร์ฟเวอร์และซิงโครไนซ์กับเวลาของอุปกรณ์ควบคุมไมโครโดยเพิ่มเวลาตอบสนองโดยประมาณ ในความเป็นจริงมันเพิ่มอีก 4 ถึง 6 วินาทีเพื่อให้แน่ใจว่าเวลาของอุปกรณ์นั้นมากกว่าเวลาของเซิร์ฟเวอร์และเพื่อตรวจสอบได้อย่างง่ายดายว่าเวลาบนนาฬิกาเรียลไทม์ที่เป็นส่วนหนึ่งของอุปกรณ์นั้นถูกต้องหรือสูญหายเนื่องจากการดาวน์โหลด . แบตเตอรี่

    หลังจากการทดสอบหลายครั้งฉันได้ตรวจสอบแล้วว่าระบบนี้ของ การซิงโครไนซ์เวลากับโมดูล ESP8266 WiFi มันแม่นยำเพียงพอสำหรับความต้องการของฉัน ในกรณีที่เลวร้ายที่สุดโดยมีข้อผิดพลาดน้อยกว่า 10 วินาทีซึ่งค่อนข้างไม่เกี่ยวข้องในกรณีของฉัน

    ดังที่เห็นในโค้ด จำเป็นต้องสืบค้นความยาวของบัฟเฟอร์ก่อน เนื่องจากการอ่านจะรีเซ็ตเพื่อให้สามารถจัดเก็บข้อมูลใหม่ได้

    เมื่ออ่านเนื้อหาของบัฟเฟอร์แล้ว ในตัวอย่างนี้ บัฟเฟอร์จะถูกประมวลผลเพื่อให้ได้เวลา ขั้นแรก เลือกข้อความระหว่างเครื่องหมายปีกกา (เซิร์ฟเวอร์ตอบสนองโดยใช้คำสั่ง PHP echo “{“.time().”}”) lo transforma en un “objeto tiempo” y de él obtiene en formato humano la fecha y la hora.

    โปรแกรมตัวอย่างต่อไปนี้ ซึ่งได้รับแรงบันดาลใจจากข้อความค้นหาของผู้ใช้ ใช้เพื่อค้นหาที่อยู่ IP สาธารณะที่ใช้บริการ ตรวจสอบ IP AWS (บริการเว็บ Amazon) ทุกห้านาที

    เช่นเดียวกับในตัวอย่างก่อนหน้านี้ มีการตั้งสมมติฐานหลายประการที่จะต้องเปลี่ยนแปลงขึ้นอยู่กับการกำหนดค่าเครือข่ายที่ใช้ (ในตัวอย่าง 192.168.1.X) SSID และคีย์ WiFi... วิธีค้นหา ที่อยู่ IP ไม่ได้หรูหรามากนัก แต่ถือว่ามันเป็นบรรทัดสุดท้ายของการตอบสนองต่อคำขอ HTTP GET แม้ว่าอาจมี API ที่จะทำในลักษณะที่ออร์โธดอกซ์มากกว่าก็ตาม


    ที่นี่คุณสามารถ ดาวน์โหลดไลบรารี่ ESP8266 สำหรับการสืบค้น HTTP ด้วย Arduino Uno (ไม่มีคอนโซล) และจากที่นี่คุณก็ทำได้ ดาวน์โหลดไลบรารี่แบบสอบถาม HTTP ESP8266 สำหรับ Arduino ที่ใช้คอนโซล กล่าวคือ ต้องใช้พอร์ตอนุกรมโดยซอฟต์แวร์หรือใช้เป็นฮาร์ดแวร์ เช่น เมนบอร์ด Arduino Mega o Arduino Leonardo.

    แสดงความคิดเห็น

    คุณอาจจะพลาด