สารบัญ:

วิธีใช้ Bluetooth(BLE) ด้วย ESP32: 3 ขั้นตอน
วิธีใช้ Bluetooth(BLE) ด้วย ESP32: 3 ขั้นตอน

วีดีโอ: วิธีใช้ Bluetooth(BLE) ด้วย ESP32: 3 ขั้นตอน

วีดีโอ: วิธีใช้ Bluetooth(BLE) ด้วย ESP32: 3 ขั้นตอน
วีดีโอ: สอน เขียนโปรแกรม ภาษาซี Arduino | ESP32 โปรเจค เขียน MIT App inveter ส่งข้อมูลผ่าน bluetooth #EP10 2024, มิถุนายน
Anonim

#####บันทึก#####

วิธีการที่แสดงใน Instructables นี้เก่าและล้าสมัย ดูวิดีโอนี้สำหรับวิธีการล่าสุด

###############

ในขณะที่ ESP32 มีรายการคุณสมบัติมากมาย (วิกิพีเดีย) คุณลักษณะที่ใหญ่ที่สุดที่ดึงดูดสายตาคือบลูทูธ v4.2 ในตัวพร้อมการรองรับ BLE แต่ข้อความดังกล่าวอาจทำให้เข้าใจผิดได้ แม้ว่าจะมีฮาร์ดแวร์อยู่ แต่ไม่มีซอฟต์แวร์รองรับการใช้บลูทูธ (อยู่ระหว่างการพัฒนา)

สำหรับผู้ที่ไม่รู้ว่า BLE คืออะไร ย่อมาจาก Bluetooth Low Energy เป็นโปรโตคอลบลูทูธที่ช่วยเพิ่มการใช้พลังงานที่ต่ำกว่ามากเมื่อเทียบกับบลูทูธ "คลาสสิก"

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

ข้อสงวนสิทธิ์บางประการ …

บางสิ่งที่ควรกล่าวถึงก่อนที่คุณจะดำเนินการต่อไปกับคู่มือนี้..

หมายเหตุ 1: เมื่อฉันบอกว่ายังไม่รองรับ Bluetooth ฉันหมายถึงในสภาพแวดล้อมการพัฒนา Arduino

การสนับสนุนเป็นอย่างดีอาจมีอยู่ใน SDK อย่างเป็นทางการเช่นเดียวกับ IDF แต่ฉันไม่พบคำแนะนำที่เหมาะสมสำหรับสิ่งเหล่านั้น

หมายเหตุ 2: วิธีที่ฉันใช้นั้นเป็นวิธีแก้ปัญหาชั่วคราวและไม่ใช่วิธีที่ BLE ควรจะทำงานได้ดี ห้องสมุดรองรับการสร้างบริการใน BLE ไม่ได้อยู่ที่นี่สำหรับสภาพแวดล้อมของ Arduino

สิ่งเดียวที่คุณสามารถทำได้อย่างน่าเชื่อถือคือการสร้าง Beacon ที่โฆษณาชื่อ ความคิดเห็น YouTube ใส่ไว้อย่างหรูหรามาก: "ฮ่า ๆ แฮ็คที่โหดร้าย แต่คุณจะทำอย่างไร"

หมายเหตุ 3: ข้อมูลประเภทเดียวที่คุณสามารถส่งได้คือสตริง

คุณอาจตัดสินใจเขียนโค้ดและถอดรหัสข้อมูลประเภทอื่นๆ เข้าและออกจากสตริงได้เป็นอย่างดี แต่นั่นก็อยู่นอกเหนือขอบเขตของคู่มือนี้

ขั้นตอนที่ 1: ตัวอย่างบิลด์

Image
Image
ตัวอย่างบิลด์
ตัวอย่างบิลด์
ตัวอย่างบิลด์
ตัวอย่างบิลด์
ตัวอย่างบิลด์
ตัวอย่างบิลด์

หากคุณมาที่นี่เพื่ออธิบาย คุณสามารถข้ามขั้นตอนนี้ได้ แต่การทำตามขั้นตอนนี้อาจให้ความกระจ่างขึ้นเล็กน้อย..

อันดับแรก ฉันจะสร้างโครงการตัวอย่าง จากนั้นฉันจะพยายามอธิบายว่ามันทำงานอย่างไรและคุณจะจำลองการสื่อสาร Bluetooth ได้อย่างไร เราจะสร้างเซ็นเซอร์อุณหภูมิแบบพกพาที่ส่งฟีดข้อมูลสดไปยังสมาร์ทโฟนของคุณ บิลด์สามารถทำงานได้หลายวันบน li-po เดียว และแสดงให้เห็นประโยชน์ของ BLE ได้อย่างง่ายดาย

คุณสามารถใช้โมดูลนี้เป็นรถไฟเหาะเพื่อป้องกันเครื่องดื่มของคุณและรับการแจ้งเตือนทันทีที่เครื่องดื่มของคุณมีอุณหภูมิที่เหมาะสม เพราะมันจะเป็นการเลียนแบบถ้าคุณต้องจิบชาที่มีดีกรีสูงกว่า 40

ฮาร์ดแวร์เดียวที่คุณต้องการคือบอร์ด ESP32 และเซ็นเซอร์อุณหภูมิดิจิตอล บอร์ดของฉันรองรับแบตเตอรี่ภายนอก ดังนั้นฉันจึงใช้ 3.7v li-po ที่ฉันกู้คืนจากอุปกรณ์เก่าบางตัวเพื่อทำให้โปรเจ็กต์นี้พกพาสะดวก

ฮาร์ดแวร์

การเชื่อมต่อสำหรับเซ็นเซอร์อุณหภูมิทำได้ง่าย สายสีแดงเชื่อมต่อกับ 3.3v สีดำเชื่อมต่อกับกราวด์ (gnd) สีเหลืองเชื่อมต่อกับ GPIO 2 ซึ่งบนกระดานของฉันถูกทำเครื่องหมายเป็น D9 เชื่อมต่อตัวต้านทาน 4.7k ohm ระหว่างสายสีแดงและสีเหลือง ฉันไม่ได้ใช้ตัวต้านทาน แต่ฉันใช้เทอร์มินัลแบบเสียบได้ 3 พินที่มาพร้อมกับเซ็นเซอร์ของฉัน มีตัวต้านทานแบบดึงขึ้นในตัว

li-po ควรเชื่อมต่อโดยใช้ขั้วต่อ JST แต่ฉันไม่สามารถซื้อได้ดังนั้นฉันจึงเสียบสายจัมเปอร์ (หญิงเป็นหญิง) ลงในขั้วต่อและบัดกรีอีกคู่หนึ่งเข้ากับขั้วแบตเตอรี่ ทำให้มีการเชื่อมต่อที่เชื่อถือได้และสวิตช์เปิดปิดชั่วคราว

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

ซอฟต์แวร์

หากคุณยังไม่ได้ติดตั้ง Arduino IDE ให้ไปที่ลิงค์นี้เพื่อดาวน์โหลด ซอฟต์แวร์ Arduino เป็นค่าเริ่มต้นไม่ได้มาพร้อมกับคำจำกัดความของบอร์ดสำหรับบอร์ด ESP32 ต่างๆ เพื่อให้พวกเขาไปที่ลิงค์นี้และดาวน์โหลดไฟล์ในซิป คุณต้องแตกไฟล์ไปยังตำแหน่งนี้:

C:/ผู้ใช้//เอกสาร/Arduino/ฮาร์ดแวร์/espserrif/ESP32

ชื่อผู้ใช้ของคุณอยู่ที่ไหนในพีซีของคุณ ตรวจสอบให้แน่ใจว่าไฟล์ต่างๆ อยู่ภายใต้โฟลเดอร์ ESP32 และไม่ได้อยู่ภายใต้โฟลเดอร์อื่น

ตอนนี้ หากคุณเริ่มซอฟต์แวร์ Arduino และไปที่เครื่องมือ -> บอร์ด คุณจะเห็นบอร์ด ESP32 ต่างๆ เมื่อคุณเลื่อนลง

เซ็นเซอร์อุณหภูมิแบบดิจิตอลส่วนใหญ่ใช้โปรโตคอล OneWire เพื่อสื่อสารกับไมโครคอนโทรลเลอร์ เราจึงต้องรับไลบรารี ไปที่สเก็ตช์ -> รวมไลบรารี -> จัดการไลบรารีและค้นหา onewire และติดตั้งไลบรารีที่มีผู้เขียนมากเกินไป คุณไม่จำเป็นต้องมีฮับ onewire ละเว้นมัน

ตอนนี้คุณสามารถดาวน์โหลดและเปิดโค้ดที่แนบมากับขั้นตอนนี้ (temperature-example.ino)

หากคุณใช้เซ็นเซอร์ที่แตกต่างจากฉัน คุณจะต้องเปลี่ยนรหัสตามนั้น แทนที่รหัสภายใต้ getTemp() เพียงคืนอุณหภูมิสุดท้ายในรูปของ

กลับ;

ลอยตัวที่มีอุณหภูมิอยู่ที่ไหน

เสียบบอร์ด เลือกบอร์ดและพอร์ตที่ถูกต้องจากใต้เครื่องมือ แล้วกดอัพโหลด

หากรหัสปฏิเสธที่จะอัปโหลด ให้ถอดเซ็นเซอร์ออกและเชื่อมต่อ GPIO 0 กับกราวด์ คืนค่าการเชื่อมต่อหลังจากการอัปโหลด

ตอนนี้ ESP ของคุณควรกรีดร้องอุณหภูมิของกาแฟของคุณไปทั่วโลก แต่คุณต้องการใครสักคนที่สามารถเข้าใจได้

แอพ Android

ขออภัยผู้ใช้ iPhone (…ไม่จริง)

ดาวน์โหลด apk จากที่นี่และติดตั้ง เมื่อคุณเริ่มแอป คุณจะได้รับการต้อนรับด้วยอินเทอร์เฟซที่เรียบง่าย

หากคุณได้รับข้อความแสดงข้อผิดพลาดว่า 'ไม่รองรับการโฆษณา' ให้คลิกตกลงและไม่ต้องสนใจ แต่หากคุณได้รับข้อความว่า 'ไม่รองรับ BLE' แสดงว่าโทรศัพท์ของคุณไม่มี Bluetooth 4.0 หรือสูงกว่าและจะไม่สามารถทำงานได้ แอป

ตรวจสอบให้แน่ใจว่า Bluetooth บนโทรศัพท์ของคุณเปิดอยู่ และคลิก 'เริ่มการสแกน' ตราบใดที่ esp อยู่ในระยะทำการและเปิดเครื่องอยู่ คุณควรจะได้รับค่าอุณหภูมิบางส่วน

ข้อผิดพลาดที่เป็นไปได้:

  • -1000:: หมายความว่าอุปกรณ์ของคุณไม่พบ ESP ตรวจสอบให้แน่ใจว่า Bluetooth เปิดอยู่ และลองรีสตาร์ท ESP
  • SNA:: หมายความว่าโทรศัพท์ของคุณกำลังรับข้อมูลจาก ESP แต่ตัว ESP เองไม่พบเซ็นเซอร์อุณหภูมิบน GPIO 2 ตรวจสอบให้แน่ใจว่าการเชื่อมต่อนั้นปลอดภัย ดูว่าคุณกำลังใช้ตัวต้านทานค่าที่ถูกต้องหรือไม่ ตรวจสอบอีกครั้งกับแผนผังบอร์ดของคุณว่าคุณเชื่อมต่อกับ GPIO 2 และไม่ใช่พินที่ทำเครื่องหมายเป็น D2

ขั้นตอนที่ 2: คำอธิบาย

วิธีการทำงานของ BLE ตามปกติคืออุปกรณ์โฆษณาชื่อเหมือนสัญญาณ ทุกคนสามารถเห็นชื่อนี้และใช้เพื่อระบุอุปกรณ์ จากนั้นอุปกรณ์ก็สามารถสร้างบริการต่างๆ ที่ผู้อื่นเห็นได้เมื่อเชื่อมต่อ บริการเหล่านี้สามารถมีสตรีมข้อมูลที่แตกต่างกันได้

สำหรับเช่น อุปกรณ์ที่ชื่อว่า 'Weather Station' สามารถให้บริการภายใต้เช่น 'Temperature', 'Humidity' และ 'Wind' เมื่ออุปกรณ์ BLE อื่น เช่น สมาร์ทโฟนของคุณสแกนหาอุปกรณ์ จะเห็น Weather Station และเมื่อเชื่อมต่อกับอุปกรณ์ ก็จะสามารถรับสตรีมข้อมูลภายใต้บริการต่างๆ ได้

ไลบรารี่ (สำหรับ ESP32) ที่เรามีอยู่ในปัจจุบันทำให้เราสร้างบีคอนที่ผู้อื่นสามารถค้นพบได้ แต่นั่นคือขอบเขตของมัน เราไม่สามารถสร้างบริการและอุปกรณ์ใดๆ เชื่อมต่อกับมันได้

ดังนั้นวิธีที่ฉันส่งข้อมูลโดยไม่สร้างบริการก็คือการใช้เทคนิคที่คล้ายกับโปรโตคอล WiFi ที่เรียกว่า Beacon Stuffing ซึ่งหมายความว่าฉันกำลังรวมข้อมูลที่จะส่งภายในชื่อบีคอนด้วย ซึ่งช่วยให้ฉันโฆษณาข้อมูลได้โดยไม่ต้องให้อุปกรณ์อื่นเชื่อมต่อกับบีคอน

ble.begin(beaconMsg); //beaconMsg เป็นชื่อที่โฆษณา

เรากำลังใช้ไลบรารี SimpleBLE เพื่อสร้างบีคอนที่มีชื่ออยู่ในรูปแบบ ESP โดยที่ 'ESP' ยังคงไม่เปลี่ยนแปลงที่จุดเริ่มต้นของชื่อเสมอ และจะถูกแทนที่ด้วยข้อมูลล่าสุดที่ส่งคืนโดยฟังก์ชัน getValue() ทุกๆ 100 มิลลิวินาที

float getValue(){ส่งคืน sensorValue;}

แอป Android จะค้นหาชื่ออุปกรณ์ BLE ที่ขึ้นต้นด้วย "ESP" เมื่อพบแล้ว จะแยกชื่อและแสดงเฉพาะข้อมูลจากส่วนท้ายเท่านั้น

การสื่อสารมีทางเดียวเท่านั้น แอพไม่ส่งอะไรกลับ

ขั้นตอนที่ 3: บทสรุป

ในตอนท้ายของวัน วิธีนี้ไม่สามารถทดแทนไลบรารี BLE ที่ใช้งานได้อย่างถูกต้อง แต่อาจเพียงพอที่จะทำให้โครงการบางโครงการสิ้นสุดลง จนกว่า Arduino จะรองรับ BLE อย่างสมบูรณ์ หวังว่าคำแนะนำนี้จะช่วยคุณได้บ้าง

ขอบคุณมากที่ DFRobot.com ที่ส่งผลิตภัณฑ์เหล่านี้มาให้ฉัน:

  • บอร์ด ESP32 FireBeetle
  • โล่ขยาย FireBeetle
  • DS18B20 เซ็นเซอร์อุณหภูมิ

ฉันเพิ่งพบห้องสมุดนี้ ReadME อ้างว่าคุณสามารถเชื่อมต่อกับอุปกรณ์ BLE อื่นเพื่อรับข้อมูลได้ (ไม่สามารถโฆษณาตัวเองได้) ฉันยังไม่ได้ลอง แต่คุณสามารถตรวจสอบได้หากคุณสนใจ

สามารถตรวจสอบวิดีโอโครงการได้ที่: YouTube

แนะนำ: