ESP32 Xiaomi Hack - Bežično preuzmite podatke: 6 koraka (sa slikama)
ESP32 Xiaomi Hack - Bežično preuzmite podatke: 6 koraka (sa slikama)
Anonim
Image
Image
ESP32 Xiaomi Hack - Bežično preuzimajte podatke
ESP32 Xiaomi Hack - Bežično preuzimajte podatke

Dragi prijatelji, dobrodošli na još jedan Instructable! Danas ćemo naučiti kako doći do podataka koje ovaj Xiaomi monitor temperature i vlažnosti odašilje pomoću Bluetooth funkcije ESP32 ploče.

Kao što vidite, koristim ESP32 ploču i 2,8”TFT ekran u boji. Na ekranu prikazujemo temperaturu i vlažnost. Zgodno je to što nisam spojio nikakve senzore na ESP32 ploču. Bežično dobivam temperaturu i vlagu iz ovog komercijalnog Xiaomi monitora temperature i vlažnosti. Kako je to super! Zaslon na Xiaomi uređaju ažurira se svake sekunde, ali ja ažuriram zaslon koji je spojen na ESP32 ploču svakih 10 sekundi radi uštede energije na Xiaomi uređaju.

Ovaj hladni Xiaomijev senzor temperature i vlažnosti prikazuje temperaturu i vlažnost na LCD ekranu, a također može prenijeti podatke na druge Xiaomi uređaje ili aplikacije koristeći Bluetooth protokol. Uređaji koriste jednu AAA bateriju, a budući da je riječ o komercijalnom proizvodu, trajanje baterije uređaja je odlično. Može raditi na jednoj AAA bateriji mjesecima, što ne možemo postići na našim DIY projektima. Prije nekoliko tjedana otkrio sam da su neki pametni momci uspjeli preokrenuti protokol koji Xiaomi koristi za prijenos podataka sa senzora i uspjeli su doći do tih podataka pomoću ESP32 ploče. Pa probao sam, i kao što vidite radi!

Korak 1: Nabavite sve dijelove

Nabavite sve dijelove
Nabavite sve dijelove

Pogledajmo sada kako izgraditi ovaj projekt. Potrebna nam je ploča ESP32, ekran od 2,8 inča ILI9341, Xiaomijev senzor temperature i vlažnosti, matična ploča i neke žice.

Evo nekoliko veza do dijelova koje ću koristiti u ovom uputstvu.

  • ESP32 ▶
  • 2.8 "Zaslon ▶
  • Xiaomi senzor ▶
  • Breadboard ▶
  • Žice ▶
  • USB mjerač ▶
  • Powerbank ▶

Korak 2: ESP32 ploča

Image
Image
Ploča ESP32
Ploča ESP32

Ako niste upoznati s njim, čip ESP32 je nasljednik popularnog čipa ESP8266 koji smo koristili mnogo puta u prošlosti. ESP32 je zver! Nudi dva 32 procesorska jezgra koja rade na 160MHz, ogromnu količinu memorije, WiFi, Bluetooth i mnoge druge funkcije po cijeni od oko 7 USD! Zadivljujuće stvari!

Molimo pogledajte detaljnu recenziju koju sam pripremio za ovu ploču. Priložio sam video na ovom uputstvu. Pomoći će razumjeti zašto će ovaj čip zauvijek promijeniti način na koji stvaramo stvari! Jedna od najuzbudljivijih stvari o ESP32 je ta da, iako je tako moćan, nudi način dubokog sna koji zahtijeva samo 10 μΑs struje. To čini ESP32 idealnim čipom za aplikacije male snage.

Korak 3: 2.8 "TFT ekran za Arduino i ESP32

Image
Image
2.8
2.8
| |

Ekran je veliki i nudi rezoluciju 320x240 piksela. U poređenju sa jednim od mojih omiljenih ekrana, 1,8 -inčni TFT ekran u boji možete ga videti mnogo većim. Zaslon također nudi dodirnu funkciju koja je dodatni bonus i utor za SD karticu na stražnjoj strani. Koristi SPI sučelje, pa je veza s Arduino ili ESP32 pločom vrlo jednostavna. Cena ekrana je relativno niska; košta oko 11 USD što je po mom mišljenju poštena cijena za ono što ovaj ekran nudi.

Još jedna stvar kod ovog ekrana je ta što ne dolazi kao štit poput ekrana osjetljivog na dodir koji smo do sada koristili. Na ovaj način možemo povezati zaslon s bilo kojom pločom, Arduino Pro mini, STM32, ESP8266 i ESP32. Ovo je vrlo važno jer sada imamo jeftin ekran koji možemo koristiti sa svakom pločom. Do sada su jedini dodirni ekran koji smo mogli koristiti s ovim pločama bili Nextion ekrani koji su skuplji, i da budem iskren, iako ih povremeno koristim, ne sviđaju mi se.

Korak 4: Povezivanje ekrana

Povezivanje ekrana
Povezivanje ekrana
Povezivanje ekrana
Povezivanje ekrana
Povezivanje ekrana
Povezivanje ekrana
Povezivanje ekrana
Povezivanje ekrana

Prvo moramo povezati ESP32 ploču s ekranom od 2,8”. Shemu možete pronaći u prilogu Instructable. Koristim ovu ploču DOIT ESP32 koja je objavljena prije otprilike dvije godine. Ova verzija ploče više nije dostupna jer je sada dostupna njena novija verzija koja nudi više pinova, ova. Jedini razlog zašto koristim staru verziju ploče je taj što je GND pin ploče postavljen pored SPI pinova, na istoj strani ploče, što je čini prihvatljivom za matičnu ploču.

Nakon povezivanja zaslona na ploču možemo uključiti projekt. Nakon nekoliko sekundi primamo podatke uživo s obližnjeg Xiaomi uređaja. Budući da uređaj koristi Bluetooth 4, njegov domet je prilično dobar. Lako možemo doći do podataka koje ovaj uređaj prenosi s udaljenosti do 10 metara ili više! Možemo primiti i nivo napunjenosti Xiaomi uređaja, ali ja ne prikazujem ovu vrijednost na ekranu.

Ako koristimo ovaj USB mjerač, možemo vidjeti da je trenutna potrošnja ovog projekta oko 120-150 mA koristeći ovaj veliki zaslon. Ako koristimo ekran za e-papir, stavite ESP32 ploču u način dubokog sna i dobivajte podatke sa senzora svakih nekoliko minuta kako bismo ovaj projekt učinili ekonomičnijim za baterije. Pokušat ću ovo u jednom budućem videu. Ovaj projekt je samo demonstracija da možemo bežično dobiti podatke s ovog uređaja.

Korak 5: Kôd projekta

Kodeks projekta
Kodeks projekta

Pogledajmo sada softversku stranu projekta.

Kod projekta zasnovan je na ovom projektu:

Koristio sam kôd koji te podatke dobiva sa Xiaomi uređaja i sa njim izgradio samostalni projekt.

U ovoj varijabli izjavljujemo da moramo dobivati svježe podatke svakih 10 sekundi.

#define SCAN_TIME 10 // sekundi

Ovdje izjavljujemo da želimo prikazati temperaturu u stupnjevima Celzijusa. Ako želite koristiti Imperial sistem, samo postavite ovu varijablu na false.

boolean METRIC = true; // Postavi vrednost true za metrički sistem; lažno za carsko

Kod funkcije postavljanja inicijaliziramo zaslon i Bluetooth modul ploče ESP32, a zatim na ekranu iscrtavamo korisničko sučelje.

void setup () {

WRITE_PERI_REG (RTC_CNTL_BROWN_OUT_REG, 0); // onemogućavanje smeđeg detektora

tft.begin ();

Serial.begin (115200);

Serial.println ("ESP32 XIAOMI DISPLAY"); initBluetooth ();

drawUI ();

}

Zatim svakih 10 sekundi tražimo Bluetooth uređaje u blizini. Ne uspostavljamo vezu sa Xiaomi uređajem jer to nije potrebno. Skeniramo samo obližnje Bluetooth niskoenergetske periferne uređaje i provjeravamo emitirane oglasne pakete.

void loop () {char printLog [256]; Serial.printf ("Pokreni BLE skeniranje %d sekundi… / n", SCAN_TIME); BLEScanResult foundDevices = pBLEScan-> start (SCAN_TIME); int count = foundDevices.getCount (); printf ("Broj pronađenih uređaja: %d / n", broj);

kašnjenje (100);

}

Vrijednosti vlažnosti i temperature pohranjene su u tim paketima, pa ih samo trebamo pročitati. Nakon što očitamo vrijednosti, prikazujemo ih na ekranu. Kao i uvijek, možete pronaći vezu do koda ovog projekta u opisu priloženom ovom uputstvu.

Korak 6: Završna razmišljanja i poboljšanja

Završna razmišljanja i poboljšanja
Završna razmišljanja i poboljšanja
Završna razmišljanja i poboljšanja
Završna razmišljanja i poboljšanja

Sada kada znamo kako bežično doći do podataka s ovog senzora, možemo izgraditi potpunu meteorološku stanicu na baterije. Budući da je ovaj Xiaomi uređaj komercijalni proizvod, nudi veliko trajanje baterije. Nažalost, još ne možemo postići sličnu potrošnju baterije na našim projektima. Dakle, planiram koristiti ovaj senzor kao vanjski senzor za projekt meteorološke stanice koji će koristiti veliki ekran e-papira. Bit će super. Također, potražit ću i druge Xiaomi Bluetooth uređaje koje možemo hakirati na sličan način. Ostanite uz nas.

Volio bih znati vaše mišljenje o ovom projektu. Smatrate li da je korisno što možemo dobiti podatke s nekih komercijalnih Bluetooth uređaja? Što ćete izgraditi pomoću ove funkcionalnosti? Volio bih pročitati vaše ideje pa ih objavite u donjem odjeljku komentara. Hvala!