- วัสดุที่ต้องการ:
- สิ่งต่างๆทำงานอย่างไร?
- การเขียนโปรแกรม ESP8266-01:
- การเชื่อมต่อ ESP8266-01 กับ Arduino:
- โปรแกรม Arduino และการทำงาน:
ESP8266-01 เป็นโมดูลที่ยอดเยี่ยมในการดับความกระหายในโครงการ IOT ทั้งหมดของเรา เพราะมันเป็นอิสระก็มีการพัฒนาชุมชนที่เข้มแข็งและพัฒนาไปสู่การใช้งานง่ายราคาถูกและมีประสิทธิภาพโมดูล Wi-Fi อีกหนึ่งแพลตฟอร์มโอเพ่นซอร์สที่ได้รับความนิยมมากกว่าคือ Arduino ซึ่งมีโครงการมากมายที่สร้างขึ้นรอบ ๆ รวมทั้งสองแพลตฟอร์มจะเปิดประตูขึ้นสำหรับโครงการใหม่ ๆ จำนวนมากดังนั้นในการกวดวิชานี้เราจะได้เรียนรู้วิธีการที่จะเชื่อมต่อโมดูล ESP8266-01 กับ Arduino ด้วยวิธีนี้เราจะสามารถส่งหรือรับข้อมูลระหว่าง Arduino และอินเทอร์เน็ต
สำหรับจุดประสงค์ของบทช่วยสอนนี้เราจะอ่านเวลาวันที่อุณหภูมิและความชื้นจากอินเทอร์เน็ตโดยใช้ API กับ ESP8266-01 จากนั้นส่งค่าเหล่านี้ไปยังบอร์ด Arduino และแสดงบนหน้าจอ LCD 16 * 2 ฟังดูเท่ !! มาเริ่มกันเลย
วัสดุที่ต้องการ:
- Arduino Board (ทุกรุ่น)
- ESP8266-01
- FTDI บอร์ดโปรแกรมเมอร์พร้อมตัวเลือก 3.3V
- 16x2 LCD
- โพเทนชิออมิเตอร์
- ปุ่มกด
- การเชื่อมต่อสายไฟ
- เขียงหั่นขนม
สิ่งต่างๆทำงานอย่างไร?
ก่อนที่เราจะดำน้ำสิ่งสำคัญคือต้องรู้ว่าสิ่งนี้จะได้ผลจริงแค่ไหน โดยทั่วไปเราต้องเริ่มต้นด้วยโมดูล ESP8266-01 เราจะใช้Arduino IDE เพื่อเขียนโปรแกรม ESP8266และโค้ดจะถูกเขียนเพื่อใช้ API เพื่ออ่านไฟล์ JSON ผ่านคำขอ http จากนั้นเราจะใช้ไฟล์ JSON นี้เพื่อแยกเฉพาะข้อมูลที่ต้องการจากไฟล์ JSON ที่สมบูรณ์
เมื่อข้อมูลเป็นวลีเราจะพิมพ์ออกมาโดยใช้การสื่อสารแบบอนุกรม จากนั้นสายอนุกรมเหล่านี้จะเชื่อมต่อกับ Arduino เพื่อให้ Arduino สามารถอ่านข้อมูลที่ส่งจาก ESP8266 เมื่อข้อมูลถูกอ่านและประมวลผลเราจะแสดงข้อมูลบนหน้าจอ LCD
ไม่เป็นไรหากคุณยังไม่เข้าใจสิ่งนี้อย่างสมบูรณ์เพราะเราจะเรียนรู้สิ่งเดียวกันในบทแนะนำที่เหลือ
การเขียนโปรแกรม ESP8266-01:
บทช่วยสอนนี้ถือว่าคุณมีประสบการณ์บางอย่างกับโมดูล ESP8266 หากไม่เช่นนั้นขอแนะนำให้อ่านบทแนะนำสามบทต่อไปนี้เพื่อทำความเข้าใจอย่างถ่องแท้
- เริ่มต้นกับ ESP8266-01
- การเขียนโปรแกรม ESP8266-01 โดยใช้คำสั่ง AT
- การเขียนโปรแกรม ESP8266-01 โดยใช้ Arduino IDE และกะพริบหน่วยความจำ
คุณยังสามารถตรวจสอบโครงการ ESP8266 ทั้งหมดของเราได้ที่นี่
ที่นี่เราจะตั้งโปรแกรมโมดูล ESP8266-01 โดยใช้ Arduino IDE สำหรับฮาร์ดแวร์เราใช้บอร์ด FTDI ที่มี 3.3V เพื่อเขียนโปรแกรม ESP8266เนื่องจากจะทำให้ฮาร์ดแวร์ง่ายมาก แผนภาพวงจรสำหรับเชื่อมต่อ ESP8266 กับบอร์ด FTDI แสดงไว้ด้านล่าง
ตรวจสอบให้แน่ใจว่าตรงตามเงื่อนไขต่อไปนี้
1. ESP8266-01 ทนได้เพียง 3.3V เท่านั้นห้ามใช้ 5V ดังนั้นตั้งค่า FTDI ในโหมด 3.3V เท่านั้น
2. GPIO_0 ต้องต่อสายดินสำหรับโหมดการเขียนโปรแกรม
3. ควรเชื่อมต่อพินรีเซ็ตผ่านปุ่มกับพินกราวด์ ควรกดปุ่มนี้ก่อนอัปโหลดโค้ด ทุกครั้งที่กดปุ่มไฟ LED สีน้ำเงินบนโมดูล ESP8266-01 จะสูงขึ้นเพื่อแสดงว่าโมดูลถูกรีเซ็ต
เมื่อเชื่อมต่อเสร็จแล้วให้เปิด Arduino IDE และตรวจสอบว่าคุณสามารถอัปโหลดโปรแกรมตัวอย่างได้สำเร็จหรือไม่ หากคุณไม่แน่ใจว่าจะใช้ Arduino IDE เพื่ออัปโหลดโปรแกรมไปยัง ESP8266 ได้อย่างไรให้ทำตามการเขียนโปรแกรม ESP8266 ด้วย Arduino เพื่อเรียนรู้ ณ จุดนี้ฉันถือว่าคุณอัปโหลดโปรแกรมกะพริบสำเร็จแล้ว
. โปรแกรมที่สมบูรณ์มีให้ที่ส่วนท้ายของหน้านี้เพิ่มเติมด้านล่างฉันกำลังอธิบายว่าเป็นตัวอย่างเล็ก ๆ โปรแกรมยังต้องการไลบรารี Arduino JSON ในการคอมไพล์ดังนั้นหากคุณยังไม่ได้เพิ่มไลบรารีลงใน Arduino IDE ของคุณให้เพิ่มโดยดาวน์โหลดจากไลบรารี Arduino JSON จาก Github
ESP8266 มีการเชื่อมต่อกับอินเทอร์เน็ตเพื่อรับข้อมูลเกี่ยวกับวันเวลา, อุณหภูมิและความชื้น ดังนั้นคุณต้องอนุญาตให้เชื่อมต่อกับ Wi-Fi ของคุณโดยการพิสูจน์ SSID และรหัสผ่านในบรรทัดด้านล่าง
const ถ่าน * ssid = "JIO-Fi"; // ป้อน Wi-Fi SSID const char * password = "Pas123"; // ป้อนรหัสผ่าน Wi-Fi ของคุณ
ภายในฟังก์ชั่นการ ตั้งค่า () เราตรวจสอบว่า ESP สามารถเชื่อมต่อกับ Wi-Fiได้หรือไม่หากไม่ได้ก็จะรออยู่ที่นั่นตลอดไปเพียงแค่พิมพ์“ Connecting.. ” บนจอภาพอนุกรม
ในขณะที่ (WiFi.status ()! = WL_CONNECTED) {// รอจนกว่า Wi-Fi จะเชื่อมต่อ ล่าช้า (1,000); Serial.print ("กำลังเชื่อมต่อ.. "); // พิมพ์การเชื่อมต่อ.. จนกว่าจะมีการเชื่อมต่อ }
ขั้นตอนต่อไปคือขั้นตอนที่สำคัญมาก หากการเชื่อมต่อ Wi-Fi สำเร็จเราต้องเรียกใช้ http get request เพื่ออ่านไฟล์ JSON จากอินเทอร์เน็ต ในบทช่วยสอนนี้ฉันใช้ API ที่จัดทำโดย wunderground.com ดังนั้นหากคุณวางแผนที่จะใช้แบบเดียวกันคุณสามารถเข้าสู่ลิงก์และสมัครใช้คีย์ API ฟรีหรือใช้ API ใดก็ได้ที่คุณเลือก เมื่อคุณสรุปด้วย API ของคุณแล้วคุณจะพบกับลิงค์ด้านล่างนี้
หมายเหตุ: ฉันได้เปลี่ยนคีย์ API ของลิงก์นี้แล้วจึงไม่สามารถใช้งานได้ รักษาคีย์ API ของคุณให้ปลอดภัยและอย่าแชร์
API ของฉันที่นี่ใช้เพื่อรับข้อมูลสภาพอากาศของเจนไน คุณสามารถใช้ API ใดก็ได้ แต่เมื่อคุณโหลด API ในเบราว์เซอร์ใด ๆ ก็ควรส่งคืนไฟล์ JSON ตัวอย่างเช่นAPIของฉันส่งคืนไฟล์ JSON ต่อไปนี้
ของคุณอาจส่งคืนไฟล์ที่มีข้อมูลต่างกัน เราสามารถตรวจสอบว่า ESP8266 ได้รับไฟล์ JSON นี้หรือไม่โดยการอ่านและพิมพ์ JSON บนมอนิเตอร์แบบอนุกรมของเราโดยใช้บรรทัดต่อไปนี้
int httpCode = http.GET (); // ส่งคำขอ get if (httpCode> 0) {// ตรวจสอบโค้ดส่งคืน // payload = http.getString (); // เก็บค่าใน varibale Payload สำหรับการดีบัก // Serial.println (payload); // พิมพ์เพย์โหลดสำหรับการดีบักหรือแสดงความคิดเห็นทั้งสองบรรทัด
ฉันได้แสดงความคิดเห็นเกี่ยวกับบรรทัดเหล่านี้เนื่องจากจำเป็นสำหรับการทดสอบเท่านั้น เมื่อคุณมั่นใจแล้วว่า ESP8266 สามารถรับข้อมูล JSON ได้แล้วก็ถึงเวลาที่จะต้องใช้คำว่า Data อย่างที่คุณเห็นข้อมูลนี้มีขนาดใหญ่มากและค่าส่วนใหญ่ก็ไร้ประโยชน์ยกเว้นค่าที่จำเป็นสำหรับเราเช่นวันที่เวลาอุณหภูมิและความชื้น
ดังนั้นเราจึงใช้ห้องสมุด JSON Arduino จะแยกค่าที่จำเป็นสำหรับเราและเก็บไว้ในตัวแปรเป็นไปได้เนื่องจากค่าในไฟล์ JSON ถูกกำหนดเป็นคู่ค่าชื่อ ดังนั้นชื่อนี้จึงเป็นสตริงที่จะเก็บค่าที่จำเป็นสำหรับเรา
ในการทำเช่นนี้เราต้องย้ายไปที่เว็บไซต์ซึ่งจะวิเคราะห์ไฟล์ JSON และให้รหัส Arduino แก่เรา ใช่มันง่ายอย่างนั้น ไปที่ https://arduinojson.org/assistant/ และวางไฟล์ JSON ที่เราโหลดในเบราว์เซอร์แล้วกด Enter เมื่อทำของฉันเสร็จแล้วจะมีลักษณะดังนี้ด้านล่าง
เลื่อนลงเล็กน้อยเพื่อดูโปรแกรมการใช้วลีที่สร้างขึ้นโดยอัตโนมัติ
สิ่งที่คุณต้องทำคือเลือกตัวแปรที่คุณต้องการคัดลอกและวางลงใน Arduino IDE ของคุณเหมือนที่ฉันทำที่นี่
/ * Phrasing Data โดยใช้ JSON librarey * / // ใช้ https://arduinojson.org/assistant/ เพื่อรับค่าการใช้วลีสำหรับสตริง JSON ของคุณ const size_t bufferSize = JSON_OBJECT_SIZE (0) + JSON_OBJECT_SIZE (1) + JSON_OBJECT_SIZE (2) + 2 * JSON_OBJECT_SIZE (3) + JSON_OBJECT_SIZE (8) + JSON_OBJECT_SIZE (12) + JSON_OBJECT_SIZE (56) + 2160; DynamicJsonBuffer jsonBuffer (bufferSize); JsonObject & root = jsonBuffer.parseObject (http.getString ()); / * End of Phrasing Data * / // ระบุค่า sin ให้กับตัวแปรที่ต้องการ JsonObject & current_observation = root; // ภายใต้ current_observation JsonObject & current_observation_observation_location = current_observation; // ภายใต้ observation_location const char * current_observation_station_id = current_observation; // "ICHENNAI1" // รับตำแหน่ง detials const ถ่าน * current_observation_local_time_rfc822 = current_observation; // เวลาท้องถิ่น // รับเวลาท้องถิ่น const ถ่าน * current_observation_temperature_string = current_observation; // "90.7 F (32.6 C)" // รับค่าอุณหภูมิ const ถ่าน * current_observation_relative_humidity = current_observation; // "73%" // รับค่าความชื้น
ฉันมีเพียงคัดลอกตัวแปร current_observation_station_id, current_observation_local_time_rfc822, current_observation_temperature_string และ current_observation_relative_humidity เนื่องจากเราวางแผนที่จะแสดงเฉพาะข้อมูลทั้งสี่นี้บนหน้าจอ LCD ของเรา
ในที่สุดเราก็ได้รับข้อมูลที่ต้องการจากอินเทอร์เน็ตและได้บันทึกไว้เป็นตัวแปรที่เราสามารถใช้ได้อย่างสะดวกสบายเพื่อส่งข้อมูลเหล่านี้เพื่อ Arduino เราก็ต้อง เขียนให้พวกเขาเป็นลำดับแม้ว่าจอภาพแบบอนุกรมบรรทัดต่อไปนี้จะทำเหมือนกันทุกประการ
// พิมพ์ตัวแปรผ่าน Serial.print มอนิเตอร์แบบอนุกรม(current_observation_station_id); // ส่งรายละเอียดตำแหน่งไปยัง Arduino delay (100); // ความล่าช้าความเสถียร Serial.print (current_observation_local_time_rfc822); // ส่งรายละเอียดเวลาท้องถิ่นไปยัง Arduino delay (100); // เสถียรภาพล่าช้า Serial.print (current_observation_temperature_string); // ส่งรายละเอียดอุณหภูมิไปยัง Arduino delay (100); // เสถียรภาพล่าช้า Serial.print (current_observation_relative_humidity); // ส่งรายละเอียดความชื้นไปยัง Arduino delay (100); // เสถียรภาพล่าช้า
โปรดทราบว่าฉันใช้ Serial.print () ไม่ใช่ Serial.println () เนื่องจากคำสั่ง Serial.println () จะต่อท้าย a / n และ / r พร้อมกับข้อมูลที่ไม่จำเป็นสำหรับเรา นอกจากนี้เรายังเพิ่มการหน่วงเวลา 10 วินาทีเพื่อให้ ESP ส่งค่าเหล่านี้ในช่วง 10 วินาทีไปยัง Arduino เท่านั้น
การเชื่อมต่อ ESP8266-01 กับ Arduino:
จนถึงตอนนี้เราได้ตั้งโปรแกรม ESP8266-01 ของเราให้อ่านข้อมูลที่ต้องการจากอินเทอร์เน็ตในช่วงเวลา 10 วินาทีและส่งออกไปตามลำดับ ตอนนี้เราต้องเชื่อมต่อ ESP กับ Arduinoเพื่อให้เราสามารถอ่านข้อมูลอนุกรมนี้ได้ นอกจากนี้เรายังต้องเพิ่มจอ LCD 16 * 2 ให้กับ Arduino เพื่อให้เราสามารถแสดงข้อมูลที่ได้รับจากโมดูล ESP8266 วงจรเพื่อเชื่อมต่อโมดูล ESP8266 กับ Arduinoแสดงอยู่ด้านล่าง
ตรวจสอบให้แน่ใจว่าพิน GPIO_0 ว่างและเปิดโมดูลด้วยขา 3.3V ของ Arduino เท่านั้นและกดปุ่มกดเพื่อใส่โมดูล ESP ในโมดูลการทำงาน ตอนนี้โปรแกรมที่เราอัปโหลดไปยัง ESP ควรจะเริ่มทำงานแล้วและโมดูลควรจะส่งข้อมูลผ่านพินอนุกรมไปยัง Arduino พินอนุกรมเหล่านี้เชื่อมต่อกับพินหมายเลข 6 และ 7 บน Arduino ดังนั้นเราจึงสามารถใช้ตัวเลือกอนุกรมซอฟต์แวร์บน Arduino เพื่ออ่านข้อมูลอนุกรมเหล่านี้จากพิน
โปรแกรม Arduino และการทำงาน:
โปรแกรม Arduino สมบูรณ์จะได้รับยังพร้อมกับรหัส ESP ในตอนท้ายของหน้านี้ คุณสามารถเลื่อนลงเพื่อดูโปรแกรมหรืออ่านเพิ่มเติมได้หากต้องการทำความเข้าใจโปรแกรม
โปรแกรมเชื่อมต่อนั้นค่อนข้างง่ายเราเพียงแค่ต้องใช้ไลบรารีอนุกรมของซอฟต์แวร์เพื่ออ่านข้อมูลจากพิน 6 และ 7 และแสดงบนหน้าจอ LCD เนื่องจากข้อมูลที่ได้รับอยู่ในรูปแบบสตริงเราจึงต้องใช้ตัวเลือกสตริงย่อยเพื่อแบ่งส่วนข้อมูลตามความต้องการของเราหรือแม้กระทั่งแปลงเป็นจำนวนเต็มหากจำเป็น ดังนั้นเราจึงเริ่มต้นด้วยการกำหนดหมุดที่จอแอลซีดีมีการเชื่อมต่อ
const int rs = 8, th = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // หมุดที่เชื่อมต่อ LCD LCD LiquidCrystal (rs, en, d4, d5, d6, d7);
เนื่องจากเราได้เชื่อมต่อRx Tx และหมุดของ ESP8266 กับ 6 และ 7 THขาของ Arduinoเราต้อง initialise อนุกรมซอฟแวร์ สำหรับพินเหล่านั้นเพื่อให้เราสามารถได้รับข้อมูลแบบอนุกรมจากพวกเขา.i มีชื่อนี้เป็น ESP_Serial คุณสามารถ ตั้งชื่อสิ่งที่คุณต้องการ
SoftwareSerial ESP_Serial (6,7); // Tx, Rx
ภายในฟังก์ชั่นการ ตั้งค่า () เราเริ่มต้นการสื่อสารแบบอนุกรมสำหรับจอภาพอนุกรมและสำหรับซีเรียลซอฟต์แวร์ หากคุณสามารถรวบรวมข้อมูลใหม่ได้เราได้สร้างโปรแกรม ESP เพื่อสื่อสารที่อัตรารับส่งข้อมูล 9600 ดังนั้นเราจึงต้องใช้อัตรารับส่งข้อมูลเดียวกันสำหรับพอร์ตอนุกรมของซอฟต์แวร์ นอกจากนี้เรายังแสดงข้อความแนะนำเล็ก ๆ บนจอ LCD เป็นเวลา 2 วินาที
การตั้งค่าเป็นโมฆะ () {lcd.begin (16, 2); // เราใช้จอ LCD 16 * 2 lcd.print ("Arduino & ESP"); // แสดงข้อความแนะนำ Serial.begin (115200); ESP_Serial.begin (9600); ล่าช้า (2000); lcd.clear (); }
ภายในฟังก์ชันmain loop () เราต้องตรวจสอบว่า ESP8266 ส่งอะไรหรือไม่ หากเป็นเช่นนั้นแล้วเราอ่านสตริงจาก ESP8266 และบันทึกลงในตัวแปรที่เรียกว่าน้ำหนักบรรทุก เพย์โหลดตัวแปรเป็นประเภท String และจะเก็บข้อมูลทั้งหมดที่ส่งจากโมดูล ESP8266
ในขณะที่ (ESP_Serial.available ()> 0) {payload = ESP_Serial.readString ();
ตอนนี้เราต้องแยกสตริงนี้ออกเป็นชิ้นเล็ก ๆเพื่อที่เราจะได้ใช้เพื่อจุดประสงค์ของเราเองในกรณีนี้เราต้องแยกมันเพื่อแสดงบนหน้าจอ LCD สามารถทำได้อย่างง่ายดายโดยใช้ฟังก์ชัน สตริงย่อย ใน Arduino คุณต้องทราบตำแหน่งของอักขระแต่ละตัวเพื่อใช้ฟังก์ชัน สตริงย่อย นี้ คุณสามารถพิมพ์เพย์โหลดบนมอนิเตอร์แบบอนุกรมเพื่อทราบตำแหน่งของอักขระและใช้เพื่อจัดประเภทสตริงย่อยดังที่แสดงด้านล่าง
local_date = payload.substring (14, 20); local_time = payload.substring (26, 31); อุณหภูมิ = payload.substring (48, 54); ความชื้น = payload.substring (55, 60);
ตอนนี้ฉันสามารถไปข้างหน้าและใช้ตัวแปรเหล่านี้อย่างใดอย่างหนึ่งพิมพ์บนหน้าจอแบบอนุกรมหรือเพียงแค่พิมพ์บนหน้าจอ LCDอย่างไรก็ตามการพิมพ์บนมอนิเตอร์ Serial จะช่วยให้เราตรวจสอบว่าสตริงย่อยแยกถูกต้องหรือไม่ จากนั้นเราก็พิมพ์บนจอ LCD โดยใช้บรรทัดต่อไปนี้
lcd.clear (); lcd.setCursor (1, 0); lcd.print (local_date); lcd.setCursor (8, 0); lcd.print (local_time); lcd.setCursor (1, 1); lcd.print (อุณหภูมิ); lcd.setCursor (10, 1); lcd.print (ความชื้น);
อัปโหลดโปรแกรมไปยัง Arduino และตรวจสอบให้แน่ใจว่าการเชื่อมต่อเป็นไปตามที่แสดงในแผนภาพวงจรด้านบน ปรับความคมชัดของจอ LCD จนกว่าคุณจะเห็นสิ่งต่างๆได้ชัดเจน คุณควรเห็นข้อความ Intro บน LCD จากนั้นไม่กี่วินาทีรายละเอียดต่างๆเช่นวันที่เวลาอุณหภูมิและความชื้นจะปรากฏในหน้าจอ LCD ดังที่แสดงด้านล่าง
นอกจากนี้คุณยังสามารถสังเกตเห็นไฟ LED สีฟ้าบน ESP8266 กระพริบทุกครั้งที่ข้อมูลมาใน หากคุณไม่เห็นสิ่งนี้แสดงว่า ESP ไม่ได้อยู่ในโหมดการเขียนโปรแกรมให้ลองกดปุ่มรีเซ็ตและตรวจสอบการเชื่อมต่อด้วย
ในทำนองเดียวกันคุณสามารถใช้ API ใดก็ได้เพื่อรับข้อมูลที่ต้องการจากอินเทอร์เน็ตและป้อนข้อมูลไปยัง Arduino และดำเนินการกับ Arduino มี API มากมายบนอินเทอร์เน็ตและคุณสามารถสร้างโครงการได้ไม่ จำกัด จำนวน หวังว่าคุณจะเข้าใจโครงการและสนุกกับการสร้างมัน หากคุณประสบปัญหาใด ๆ โปรดโพสต์ไว้ในส่วนความคิดเห็นด้านล่างหรือในฟอรัมของเรา
คุณสามารถค้นหาโครงการที่เกี่ยวข้องกับ ESP8266 ทั้งหมดของเราได้ที่นี่