Talaan ng mga Nilalaman:

ESP32 Xiaomi Hack - Kumuha ng Data ng Wireless: 6 Mga Hakbang (na may Mga Larawan)
ESP32 Xiaomi Hack - Kumuha ng Data ng Wireless: 6 Mga Hakbang (na may Mga Larawan)

Video: ESP32 Xiaomi Hack - Kumuha ng Data ng Wireless: 6 Mga Hakbang (na may Mga Larawan)

Video: ESP32 Xiaomi Hack - Kumuha ng Data ng Wireless: 6 Mga Hakbang (na may Mga Larawan)
Video: Controlling 32 Servo motors with PCA9685 and ESP32 - V4 2024, Nobyembre
Anonim
Image
Image
ESP32 Xiaomi Hack - Kumuha ng Data nang Wireless
ESP32 Xiaomi Hack - Kumuha ng Data nang Wireless

Minamahal na mga kaibigan maligayang pagdating sa isa pang maituturo! Malalaman natin ngayon kung paano makukuha ang data na ipinapadala ng monitor ng Temperatura at Humidity na ito ng Xiaomi gamit ang pag-andar ng Bluetooth ng board ng ESP32.

Tulad ng nakikita mo, gumagamit ako ng isang board na ESP32 at isang display ng kulay na TFT na 2.8 . Sa display, ipinapakita namin ang temperatura at ang halumigmig. Ang cool na bagay ay hindi ako nakakonekta sa anumang mga sensor sa board ng ESP32. Nakukuha ko ang temperatura at ang kahalumigmigan nang wireless mula sa komersyal na Xiaomi Temperature at Humidity monitor na ito. Ang astig nito! Ang display sa aparatong Xiaomi ay nai-update bawat segundo ngunit ina-update ko ang display na konektado sa board ng ESP32 bawat 10 segundo upang makatipid ng kuryente sa Xiaomi device.

Ang cool na Xiaomi na temperatura at sensor ng kahalumigmigan na ito ay nagpapakita ng temperatura at halumigmig sa LCD display nito at maaari rin nitong maipasa ang data sa iba pang mga Xiaomi Device o app gamit ang Bluetooth protocol. Gumagamit ang mga aparato ng isang solong baterya ng AAA at dahil ito ay isang komersyal na produkto, mahusay ang buhay ng baterya ng aparato. Maaari itong tumagal sa isang solong baterya ng AAA sa loob ng maraming buwan, isang bagay na hindi natin makakamit sa aming mga proyekto sa DIY. Ilang linggo na ang nakakaraan, natuklasan ko na ang ilang mga matalino na lalaki ay pinamamahalaang baligtarin ang inhenyero ng protokol na ginagamit ng Xiaomi upang maipadala ang data mula sa sensor at nagawang makuha ang data na iyon gamit ang isang board ng ESP32. Kaya't sinubukan ko ito, at tulad ng nakikita mong gumagana!

Hakbang 1: Kunin ang Lahat ng Mga Bahagi

Kunin ang Lahat ng Mga Bahagi
Kunin ang Lahat ng Mga Bahagi

Tingnan natin ngayon kung paano mabuo ang proyektong ito. Kailangan namin ng isang ESP32 board, isang 2.8 ILI9341 display, ang temperatura ng Xiaomi at sensor ng halumigmig, isang breadboard at ilang mga wire.

Narito ang ilang mga link sa mga bahagi na gagamitin ko sa Instructable na ito.

  • ESP32 ▶
  • 2.8 "Ipakita ▶
  • Xiaomi Sensor ▶
  • Breadboard ▶
  • Mga Wires ▶
  • USB Meter ▶
  • Powerbank ▶

Hakbang 2: Ang Lupon ng ESP32

Image
Image
Ang Lupon ng ESP32
Ang Lupon ng ESP32

Kung hindi ka pamilyar dito, ang ESP32 chip ay ang kahalili ng sikat na ESP8266 chip na ginamit namin ng maraming beses sa nakaraan. Ang ESP32 ay isang hayop! Nag-aalok ito ng dalawang 32 na core ng pagproseso na gumana sa 160MHz, isang napakalaking memorya, WiFi, Bluetooth at maraming iba pang mga tampok na may halagang 7 $! Kamangha-manghang bagay!

Mangyaring panoorin ang detalyadong pagsusuri na inihanda ko para sa board na ito. Inilakip ko ang video sa Instructable na ito. Makakatulong itong maunawaan kung bakit babaguhin ng chip na ito ang paraan ng paggawa natin ng mga bagay magpakailanman! Ang isa sa mga pinaka kapanapanabik na bagay tungkol sa ESP32 ay na kahit na napakalakas nito, nag-aalok ito ng isang mode na deep-sleep na nangangailangan lamang ng 10μΑs ng kasalukuyang. Ginagawa nitong perpektong chip ang ESP32 para sa mababang aplikasyon ng kuryente.

Hakbang 3: 2.8 "TFT Display para sa Arduino at ESP32

Image
Image
2.8
2.8
2.8
2.8
2.8
2.8

Malaki ang display, at nag-aalok ito ng isang resolusyon na 320x240 pixel. Kung ihahambing sa isa sa mga ipinapakita kong paborito, ang display na 1.8 Kulay ng TFT ay makikita mo ito nang mas malaki. Nag-aalok din ang screen ng pag-andar ng touch na isang idinagdag na bonus at isang puwang ng SD card sa likuran. Gumagamit ito ng interface ng SPI, kaya't ang koneksyon sa Arduino o sa board ng ESP32 ay napaka prangka. Ang gastos ng display ay medyo mababa; nagkakahalaga ito ng humigit-kumulang na 11 $ na kung saan sa palagay ko ay isang makatarungang presyo para sa inaalok ng display na ito.

Ang isa pang bagay tulad ng tungkol sa display na ito ay hindi ito dumating bilang isang kalasag tulad ng touch display na ginagamit namin sa ngayon. Sa ganitong paraan, maaari naming ikonekta ang display sa anumang board, ang Arduino Pro mini, ang STM32, ang ESP8266, at ang ESP32. Napakahalaga nito sapagkat mayroon kaming isang display na may mababang gastos na maaari naming magamit sa bawat board. Hanggang ngayon, ang tanging display sa ugnayan na maaari naming magamit sa mga board na ito ay ang mga ipinapakita na Nextion na mas mahal, at upang maging matapat kahit na ginagamit ko ang mga ito paminsan-minsan, hindi ko talaga sila gusto.

Hakbang 4: Pagkonekta sa Display

Pagkonekta sa Display
Pagkonekta sa Display
Pagkonekta sa Display
Pagkonekta sa Display
Pagkonekta sa Display
Pagkonekta sa Display
Pagkonekta sa Display
Pagkonekta sa Display

Una, kailangan naming ikonekta ang Lupon ng ESP32 sa 2.8 na display. Maaari mong makita ang eskematiko na nakakabit sa Instructable. Ginagamit ko ang board na ito ng DOIT ESP32 na inilabas mga dalawang taon na ang nakakalipas. Ang bersyon ng board na ito ay hindi na magagamit dahil mayroon na ngayong isang mas bagong bersyon na magagamit na nag-aalok ng maraming mga pin, ang isang ito. Ang tanging kadahilanan na ginagamit ko ang lumang bersyon ng board ay ang pin ng GND ng board na inilagay sa tabi ng mga SPI pin, sa parehong bahagi ng board, na ginagawang friendly ang breadboard.

Matapos ikonekta ang display sa board maaari naming paganahin ang proyekto. Pagkatapos ng ilang segundo, nakatanggap kami ng live na data mula sa kalapit na Xiaomi Device. Dahil ang aparato ay gumagamit ng Bluetooth 4 ang saklaw nito ay medyo maganda. Madali naming makukuha ang data na inililipat ng aparatong ito mula sa mga distansya hanggang 10 metro o higit pa! Maaari rin naming matanggap ang antas ng baterya ng Xiaomi Device ngunit hindi ko ipinapakita ang halagang ito sa screen.

Kung gagamitin namin ang USB meter na ito, maaari naming makita na ang kasalukuyang gumuhit ng proyektong ito ay nasa 120-150 mA gamit ang malaking display na ito. Kung gumagamit kami ng isang e-paper display, ilagay ang board ng ESP32 sa deep mode ng pagtulog, at kumuha ng data mula sa sensor bawat ilang minuto maaari naming gawing friendly ang baterya ng proyektong ito. Susubukan ko ito sa isang hinaharap na video. Ang proyektong ito ay isang pagpapakita lamang na makakakuha kami ng data mula sa aparatong ito nang wireless.

Hakbang 5: Ang Code ng Project

Ang Code ng Proyekto
Ang Code ng Proyekto

Tingnan natin ngayon ang bahagi ng software ng proyekto.

Ang code ng proyekto ay batay sa proyektong ito:

Ginamit ko ang code na nakakakuha ng data na iyon mula sa aparato ng Xiaomi at nagtayo ng isang nakapag-iisang proyekto kasama nito.

Sa variable na ito, ipinapahayag namin na kailangan naming makakuha ng sariwang data bawat 10 segundo.

# tukuyin ang SCAN_TIME 10 // segundo

Dito, ipinapahayag namin na nais naming ipakita ang temperatura sa degree Celsius. Kung nais mong gamitin ang Imperial system itakda lamang ang variable na ito sa hindi totoo.

boolean METRIC = totoo; // Itakda ang totoo para sa system ng panukat; hindi totoo para sa imperyal

Sa pag-andar ng pag-setup pinasimuno namin ang pagpapakita at ang module ng Bluetooth ng board ng ESP32 at pagkatapos ay iguhit namin ang interface ng gumagamit sa screen.

walang bisa ang pag-setup () {

WRITE_PERI_REG (RTC_CNTL_BROWN_OUT_REG, 0); // huwag paganahin ang brownout detector

tft.begin ();

Serial.begin (115200);

Serial.println ("ESP32 XIAOMI DISPLAY"); initBlu Bluetooth ();

drawUI ();

}

Susunod, naghahanap kami para sa mga aparatong Bluetooth sa malapit bawat 10 segundo. Hindi kami gumagawa ng isang koneksyon sa Xiaomi Device dahil hindi ito kinakailangan. Nag-scan lang kami para sa kalapit na Bluetooth na mga peripheral na mababang enerhiya at suriin ang mga packet ng ad ng broadcast.

void loop () {char printLog [256]; Serial.printf ("Simulan ang BLE scan para sa% d segundo … / n", SCAN_TIME); BLEScanResults foundDevices = pBLEScan-> start (SCAN_TIME); int count = foundDevices.getCount (); printf ("Nahanap ang bilang ng aparato:% d / n", bilang);

pagkaantala (100);

}

Ang halumigmig at mga halagang temperatura ay nakaimbak sa mga packet na iyon, kaya kailangan lamang nating basahin ang mga ito. Matapos naming mabasa ang mga halagang ipinapakita namin ang mga ito sa screen. Tulad ng dati maaari kang makahanap ng isang link sa code ng proyektong ito sa paglalarawan na naka-attach sa Instructable na ito.

Hakbang 6: Pangwakas na Mga Pag-iisip at Pagpapabuti

Pangwakas na Pag-iisip at Pagpapabuti
Pangwakas na Pag-iisip at Pagpapabuti
Pangwakas na Pag-iisip at Pagpapabuti
Pangwakas na Pag-iisip at Pagpapabuti

Ngayon alam na namin kung paano makakuha ng data nang wireless mula sa sensor na ito maaari kaming bumuo ng isang kumpletong istasyon ng panahon na pinapatakbo ng baterya. Dahil ang Xiaomi Device na ito ay isang komersyal na produkto, nag-aalok ito ng mahusay na buhay ng baterya. Sa kasamaang palad, hindi pa namin makakamit ang katulad na pagkonsumo ng baterya sa aming mga proyekto. Kaya, plano kong gamitin ang sensor na ito bilang isang panlabas na sensor para sa isang proyekto ng istasyon ng panahon na gagamit ng isang malaking pagpapakita ng e-papel. Ito ay magiging cool. Gayundin, maghanap ako para sa iba pang mga aparatong pinagana ng Xiaomi Bluetooth na maaari naming i-hack sa katulad na paraan. Manatiling nakatutok.

Nais kong malaman ang iyong opinyon tungkol sa proyektong ito. Napapakinabangan mo ba na makakakuha kami ng data mula sa ilang mga komersyal na Bluetooth device? Ano ang itatayo mo gamit ang pagpapaandar na ito? Nais kong basahin ang iyong mga ideya kaya mangyaring i-post ang mga ito sa seksyon ng mga komento sa ibaba. Salamat!

Inirerekumendang: