สารบัญ:

ESP32 Xiaomi Hack - รับข้อมูลแบบไร้สาย: 6 ขั้นตอน (พร้อมรูปภาพ)
ESP32 Xiaomi Hack - รับข้อมูลแบบไร้สาย: 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ESP32 Xiaomi Hack - รับข้อมูลแบบไร้สาย: 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ESP32 Xiaomi Hack - รับข้อมูลแบบไร้สาย: 6 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: ESP32 Xiaomi Bluetooth Hack - Get data wirelessly 2024, กรกฎาคม
Anonim
Image
Image
ESP32 Xiaomi Hack - รับข้อมูลแบบไร้สาย
ESP32 Xiaomi Hack - รับข้อมูลแบบไร้สาย

เพื่อน ๆ ที่รักยินดีต้อนรับสู่ Instructable อื่น! วันนี้เราจะมาเรียนรู้วิธีรับข้อมูลที่เครื่องตรวจสอบอุณหภูมิและความชื้น Xiaomi นี้ส่งโดยใช้ฟังก์ชัน Bluetooth ของบอร์ด ESP32

อย่างที่คุณเห็น ฉันใช้บอร์ด ESP32 และจอแสดงผล TFT สีขนาด 2.8 นิ้ว บนจอแสดงผล เราแสดงอุณหภูมิและความชื้น สิ่งที่ยอดเยี่ยมคือฉันไม่ได้เชื่อมต่อเซ็นเซอร์ใดๆ กับบอร์ด ESP32 ฉันได้รับอุณหภูมิและความชื้นแบบไร้สายจากเครื่องวัดอุณหภูมิและความชื้น Xiaomi เชิงพาณิชย์นี้ เจ๋งแค่ไหน! จอแสดงผลบนอุปกรณ์ Xiaomi อัปเดตทุก ๆ วินาที แต่ฉันอัปเดตจอแสดงผลที่เชื่อมต่อกับบอร์ด ESP32 ทุก 10 วินาทีเพื่อประหยัดพลังงานบนอุปกรณ์ Xiaomi

เซ็นเซอร์อุณหภูมิและความชื้น Xiaomi สุดเจ๋งนี้แสดงอุณหภูมิและความชื้นบนจอ LCD และยังสามารถส่งข้อมูลไปยังอุปกรณ์ Xiaomi หรือแอพอื่น ๆ โดยใช้โปรโตคอล Bluetooth อุปกรณ์ใช้แบตเตอรี่ AAA ก้อนเดียว และเนื่องจากเป็นผลิตภัณฑ์เชิงพาณิชย์ อายุการใช้งานแบตเตอรี่ของอุปกรณ์จึงดีเยี่ยม สามารถใช้แบตเตอรี่ AAA เพียงก้อนเดียวได้นานหลายเดือน ซึ่งเป็นสิ่งที่เราไม่สามารถทำได้ในโครงการ DIY ของเรา เมื่อไม่กี่สัปดาห์ก่อน ฉันค้นพบว่าคนฉลาดบางคนสามารถทำวิศวกรรมย้อนกลับโปรโตคอลที่ Xiaomi ใช้ในการส่งข้อมูลจากเซ็นเซอร์และจัดการเพื่อให้ได้ข้อมูลนั้นโดยใช้บอร์ด ESP32 ดังนั้นฉันจึงลองและอย่างที่คุณเห็นมันใช้งานได้!

ขั้นตอนที่ 1: รับชิ้นส่วนทั้งหมด

รับอะไหล่ทั้งหมด
รับอะไหล่ทั้งหมด

ตอนนี้เรามาดูวิธีการสร้างโครงการนี้ เราต้องการบอร์ด ESP32, จอแสดงผล ILI9341 ขนาด 2.8”, เซ็นเซอร์อุณหภูมิและความชื้น Xiaomi, เขียงหั่นขนมและสายไฟ

นี่คือลิงก์บางส่วนไปยังส่วนที่ฉันจะใช้ในคำแนะนำนี้

  • ESP32 ▶
  • จอแสดงผล 2.8" ▶
  • Xiaomi เซนเซอร์ ▶
  • เขียงหั่นขนม ▶
  • สายไฟ ▶
  • เครื่องวัด USB ▶
  • พาวเวอร์แบงค์ ▶

ขั้นตอนที่ 2: บอร์ด ESP32

Image
Image
บอร์ด ESP32
บอร์ด ESP32

หากคุณไม่คุ้นเคย ชิป ESP32 เป็นตัวตายตัวแทนของชิป ESP8266 ยอดนิยมที่เราเคยใช้มาหลายครั้งแล้ว ESP32 เป็นสัตว์ร้าย! มันมีแกนประมวลผล 32 คอร์สองตัวที่ทำงานที่ 160MHz หน่วยความจำจำนวนมาก WiFi บลูทู ธ และคุณสมบัติอื่น ๆ อีกมากมายด้วยราคาประมาณ 7 $! ของวิเศษ!

โปรดดูบทวิจารณ์โดยละเอียดที่ฉันเตรียมไว้สำหรับบอร์ดนี้ ฉันได้แนบวิดีโอในคำแนะนำนี้ จะช่วยให้เข้าใจว่าทำไมชิปตัวนี้จะเปลี่ยนวิธีที่เราทำสิ่งต่างๆ ไปตลอดกาล! สิ่งที่น่าตื่นเต้นที่สุดอย่างหนึ่งเกี่ยวกับ ESP32 คือถึงแม้จะทรงพลังมาก แต่ก็มีโหมดหลับลึกซึ่งต้องการกระแสไฟเพียง 10μΑs ทำให้ ESP32 เป็นชิปในอุดมคติสำหรับการใช้งานที่ใช้พลังงานต่ำ

ขั้นตอนที่ 3: จอแสดงผล TFT 2.8" สำหรับ Arduino และ ESP32

Image
Image
2.8
2.8
2.8
2.8
2.8
2.8

จอแสดงผลมีขนาดใหญ่และมีความละเอียด 320x240 พิกเซล เมื่อเทียบกับจอแสดงผลโปรดของฉัน จอแสดงผลสี TFT ขนาด 1.8 นิ้ว คุณจะเห็นว่ามีขนาดใหญ่กว่ามาก หน้าจอยังมีฟังก์ชั่นสัมผัสซึ่งเป็นโบนัสเพิ่มเติมและช่องเสียบการ์ด SD ที่ด้านหลัง มันใช้อินเทอร์เฟซ SPI ดังนั้นการเชื่อมต่อกับ Arduino หรือบอร์ด ESP32 นั้นตรงไปตรงมามาก ค่าใช้จ่ายของจอแสดงผลค่อนข้างต่ำ มีค่าใช้จ่ายประมาณ 11 เหรียญซึ่งในความคิดของฉันเป็นราคาที่ยุติธรรมสำหรับสิ่งที่จอแสดงผลนี้เสนอ

อีกสิ่งหนึ่งที่ชอบเกี่ยวกับจอแสดงผลนี้คือมันไม่ได้มาเป็นเกราะเหมือนหน้าจอสัมผัสที่เราใช้อยู่ ด้วยวิธีนี้ เราสามารถเชื่อมต่อจอแสดงผลกับบอร์ดใดก็ได้ เช่น Arduino Pro mini, STM32, ESP8266 และ ESP32 สิ่งนี้สำคัญมากเพราะตอนนี้เรามีจอแสดงผลราคาประหยัดที่ใช้ได้กับทุกบอร์ด จนถึงตอนนี้ จอสัมผัสเดียวที่เราสามารถใช้ได้กับบอร์ดเหล่านี้คือจอแสดงผล Nextion ซึ่งมีราคาแพงกว่า และตามจริงแล้วแม้ว่าฉันจะใช้มันเป็นครั้งคราว ฉันไม่ชอบมันเลยจริงๆ

ขั้นตอนที่ 4: เชื่อมต่อจอแสดงผล

การเชื่อมต่อจอภาพ
การเชื่อมต่อจอภาพ
การเชื่อมต่อจอภาพ
การเชื่อมต่อจอภาพ
การเชื่อมต่อจอแสดงผล
การเชื่อมต่อจอแสดงผล
การเชื่อมต่อจอแสดงผล
การเชื่อมต่อจอแสดงผล

ขั้นแรก เราต้องเชื่อมต่อบอร์ด ESP32 กับจอแสดงผล 2.8” คุณสามารถค้นหาแผนผังที่แนบมากับ Instructable ฉันใช้บอร์ด DOIT ESP32 ซึ่งเปิดตัวเมื่อประมาณสองปีที่แล้ว บอร์ดรุ่นนี้ไม่มีวางจำหน่ายแล้วเนื่องจากตอนนี้มีเวอร์ชั่นใหม่กว่าซึ่งมีพินให้เลือกมากกว่านี้ เหตุผลเดียวที่ฉันใช้บอร์ดเวอร์ชันเก่าคือพิน GND ของบอร์ดวางไว้ข้างหมุด SPI ที่ด้านเดียวกันของบอร์ด ซึ่งทำให้เขียงหั่นขนมเป็นมิตร

หลังจากเชื่อมต่อจอแสดงผลกับบอร์ดแล้ว เราสามารถเปิดเครื่องโครงการได้ หลังจากนั้นไม่กี่วินาที เราได้รับข้อมูลสดจากอุปกรณ์ Xiaomi ที่อยู่ใกล้เคียง เนื่องจากอุปกรณ์ใช้ Bluetooth 4 ช่วงของมันค่อนข้างดี เราสามารถรับข้อมูลที่อุปกรณ์นี้ส่งได้อย่างง่ายดายจากระยะทางไม่เกิน 10 เมตรขึ้นไป! นอกจากนี้เรายังสามารถรับระดับแบตเตอรี่ของอุปกรณ์ Xiaomi ได้ แต่ฉันไม่แสดงค่านี้บนหน้าจอ

หากเราใช้เครื่องวัด USB นี้ เราจะเห็นว่าการวาดปัจจุบันของโครงการนี้อยู่ที่ประมาณ 120-150 mA โดยใช้จอแสดงผลขนาดใหญ่นี้ หากเราใช้จอแสดงผล e-paper ให้ตั้งค่าบอร์ด ESP32 ในโหมดดีปสลีป และรับข้อมูลจากเซ็นเซอร์ทุกๆ สองสามนาที เราจะทำให้โปรเจ็กต์นี้เป็นมิตรกับแบตเตอรี่ ฉันจะลองสิ่งนี้ในวิดีโอหน้า โครงการนี้เป็นเพียงการสาธิตว่าเราสามารถรับข้อมูลจากอุปกรณ์นี้แบบไร้สายได้

ขั้นตอนที่ 5: รหัสของโครงการ

รหัสโครงการ
รหัสโครงการ

มาดูด้านซอฟต์แวร์ของโครงการกัน

รหัสของโครงการขึ้นอยู่กับโครงการนี้:

ฉันใช้รหัสที่ได้รับข้อมูลนั้นจากอุปกรณ์ Xiaomi และสร้างโครงการแบบสแตนด์อโลนด้วย

ในตัวแปรนี้ เราประกาศว่าเราจำเป็นต้องรับข้อมูลใหม่ทุกๆ 10 วินาที

#define SCAN_TIME 10 // วินาที

ที่นี่เราประกาศว่าเราต้องการแสดงอุณหภูมิเป็นองศาเซลเซียส หากคุณต้องการใช้ระบบอิมพีเรียล ให้ตั้งค่าตัวแปรนี้เป็นเท็จ

บูลีน METRIC = จริง; //ตั้งค่าจริงสำหรับระบบเมตริก เท็จสำหรับจักรพรรดิ

ที่ฟังก์ชั่นการตั้งค่า เราเริ่มต้นการแสดงผลและโมดูล Bluetooth ของบอร์ด ESP32 จากนั้นเราวาดส่วนต่อประสานผู้ใช้บนหน้าจอ

การตั้งค่าเป็นโมฆะ () {

WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //ปิดการใช้งานเครื่องตรวจจับไฟดับ

tft.begin();

Serial.begin(115200);

Serial.println ("แสดง ESP32 XIAOMI"); initBluetooth();

drawUI();

}

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

วงเป็นโมฆะ () { ถ่าน printLog[256]; Serial.printf("เริ่มการสแกน BLE เป็นเวลา %d วินาที…\n", SCAN_TIME); BLEScanResults foundDevices = pBLEScan->start(SCAN_TIME); จำนวน int = foundDevices.getCount(); printf("พบจำนวนอุปกรณ์: %d\n", นับ);

ล่าช้า (100);

}

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

ขั้นตอนที่ 6: ความคิดและการปรับปรุงขั้นสุดท้าย

ความคิดสุดท้าย & การปรับปรุง
ความคิดสุดท้าย & การปรับปรุง
ความคิดสุดท้าย & การปรับปรุง
ความคิดสุดท้าย & การปรับปรุง

ตอนนี้เรารู้วิธีรับข้อมูลแบบไร้สายจากเซ็นเซอร์นี้แล้ว เราก็สามารถสร้างสถานีตรวจอากาศที่ใช้พลังงานแบตเตอรี่ได้อย่างสมบูรณ์ เนื่องจากอุปกรณ์ Xiaomi นี้เป็นผลิตภัณฑ์เชิงพาณิชย์ จึงมีอายุการใช้งานแบตเตอรี่ที่ยาวนาน ขออภัย เรายังใช้แบตเตอรี่ไม่เท่ากันในโครงการของเรา ดังนั้นฉันจึงวางแผนที่จะใช้เซ็นเซอร์นี้เป็นเซ็นเซอร์กลางแจ้งสำหรับโครงการสถานีตรวจอากาศซึ่งจะใช้จอแสดงผล e-paper ขนาดใหญ่ มันจะเย็น นอกจากนี้ ฉันจะค้นหาอุปกรณ์ที่เปิดใช้งาน Xiaomi Bluetooth อื่น ๆ ที่เราสามารถแฮ็คได้ในลักษณะเดียวกัน คอยติดตาม.

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

แนะนำ: