Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
Kära vänner välkomna till en annan instruerbar! Idag ska vi lära oss hur vi får data som denna Xiaomi temperatur- och luftfuktighetsmonitor överför med hjälp av Bluetooth -funktionen på ESP32 -kortet.
Som du kan se använder jag ett ESP32 -kort och en 2,8”TFT -färgskärm. På displayen visar vi temperaturen och luftfuktigheten. Det coola är att jag inte har anslutit några sensorer till ESP32 -kortet. Jag får temperaturen och luftfuktigheten trådlöst från denna kommersiella Xiaomi temperatur- och fuktighetsmonitor. Hur coolt är inte det! Displayen på Xiaomi -enheten uppdateras varannan, men jag uppdaterar skärmen som är ansluten till ESP32 -kortet var 10: e sekund för att spara ström på Xiaomi -enheten.
Denna coola Xiaomi temperatur- och fuktighetssensor visar temperaturen och luftfuktigheten på dess LCD -skärm och den kan också överföra data till andra Xiaomi -enheter eller appar med Bluetooth -protokollet. Enheterna använder ett enda AAA -batteri och eftersom det är en kommersiell produkt är batteriets livslängd utmärkt. Det kan hålla på ett enda AAA -batteri i flera månader, något vi inte kan uppnå på våra DIY -projekt. För några veckor sedan upptäckte jag att några kluriga killar lyckades omkonstruera protokollet som Xiaomi använder för att överföra data från sensorn och lyckades få den med hjälp av ett ESP32 -kort. Så jag försökte det, och som ni ser fungerar det!
Steg 1: Skaffa alla delar
Låt oss nu se hur vi bygger detta projekt. Vi behöver ett ESP32 -kort, en 2,8”ILI9341 -skärm, Xiaomi temperatur- och fuktsensor, en brödbräda och några ledningar.
Här är några länkar till de delar jag kommer att använda i denna instruktionsbok.
- ESP32 ▶
- 2,8 "skärm ▶
- Xiaomi -sensor ▶
- Brödbräda ▶
- Ledningar ▶
- USB -mätare ▶
- Powerbank ▶
Steg 2: ESP32 -kortet
Om du inte känner till det är ESP32 -chipet efterföljaren till det populära ESP8266 -chipet som vi har använt många gånger tidigare. ESP32 är ett odjur! Den erbjuder två 32 processorkärnor som arbetar med 160 MHz, en enorm mängd minne, WiFi, Bluetooth och många andra funktioner till en kostnad av cirka 7 $! Fantastiska saker!
Se den detaljerade recensionen som jag har förberett för denna tavla. Jag har bifogat videon på denna Instructable. Det kommer att hjälpa till att förstå varför detta chip kommer att förändra hur vi gör saker för alltid! En av de mest spännande sakerna med ESP32 är att även om den är så kraftfull erbjuder den ett djupt sömnläge som bara kräver 10μΑs ström. Detta gör ESP32 till det idealiska chipet för applikationer med låg effekt.
Steg 3: 2,8 "TFT -skärm för Arduino och ESP32
| |Displayen är stor och har en upplösning på 320x240 pixlar. Jämfört med en av mina favoritskärmar, 1,8 -tums färg TFT -skärm, du kan se den mycket större. Skärmen erbjuder också pekfunktion som är en extra bonus och en SD -kortplats på baksidan. Den använder SPI -gränssnittet, så anslutningen med Arduino eller ESP32 -kortet är mycket enkel. Kostnaden för displayen är relativt låg; det kostar cirka 11 $ vilket enligt mig är ett rimligt pris för vad den här skärmen erbjuder.
En annan sak som med den här skärmen är att den inte kommer som en skärm som den pekskärm vi använt hittills. På så sätt kan vi ansluta skärmen till valfritt kort, Arduino Pro mini, STM32, ESP8266 och ESP32. Detta är mycket viktigt eftersom vi nu har en billig bildskärm som vi kan använda med varje bräda. Fram till nu var den enda pekskärm vi kunde använda med dessa brädor Nextion -skärmarna som är dyrare, och om jag ska vara ärlig även om jag använder dem då och då, gillar jag dem inte riktigt.
Steg 4: Ansluta skärmen
Först måste vi ansluta ESP32 -kortet till 2,8”-skärmen. Du hittar schemat som bifogas Instructable. Jag använder detta DOIT ESP32 -kort som släpptes för ungefär två år sedan. Den här versionen av kortet är inte längre tillgänglig eftersom det nu finns en nyare version av den som erbjuder fler pins, den här. Den enda anledningen till att jag använder den gamla versionen av brädet är att GND -stiftet på brädet placeras bredvid SPI -stiften, på samma sida av brädet, vilket gör det brödbräda vänligt.
Efter att ha anslutit skärmen till kortet kan vi starta projektet. Efter några sekunder får vi levande data från den närliggande Xiaomi -enheten. Eftersom enheten använder Bluetooth 4 är räckvidden ganska bra. Vi kan enkelt få data som den här enheten överför från avstånd upp till 10 meter eller mer! Vi kan också ta emot batterinivån på Xiaomi -enheten men jag visar inte detta värde på skärmen.
Om vi använder denna USB-mätare kan vi se att den nuvarande dragningen av detta projekt är cirka 120-150 mA med denna stora display. Om vi använder en e-pappersdisplay, sätt ESP32-kortet i djupt viloläge och få data från sensorn varannan minut så kan vi göra detta projekt batterivänligt. Jag kommer att prova detta i en framtida video. Detta projekt är bara en demonstration av att vi kan få data från den här enheten trådlöst.
Steg 5: Koden för projektet
Låt oss nu se mjukvarusidan av projektet.
Projektets kod är baserad på detta projekt:
Jag använde koden som hämtar data från Xiaomi -enheten och byggde ett fristående projekt med den.
I denna variabel deklarerar vi att vi måste få färsk data var 10: e sekund.
#define SCAN_TIME 10 // sekunder
Här förklarar vi att vi vill visa temperaturen i grader Celsius. Om du vill använda det kejserliga systemet ställer du bara in denna variabel till falsk.
booleska METRIC = true; // Ställ in true för metriska system; falskt för kejserligt
Vid installationsfunktionen initierar vi displayen och Bluetooth -modulen på ESP32 -kortet och sedan ritar vi användargränssnittet på skärmen.
void setup () {
WRITE_PERI_REG (RTC_CNTL_BROWN_OUT_REG, 0); // inaktivera brownout -detektor
tft.begin ();
Serial.begin (115200);
Serial.println ("ESP32 XIAOMI DISPLAY"); initBluetooth ();
drawUI ();
}
Därefter söker vi efter Bluetooth -enheter i närheten var 10: e sekund. Vi gör ingen anslutning till Xiaomi -enheten eftersom det inte behövs. Vi söker bara efter Bluetooth -kringutrustning i närheten och kontrollerar sändningsannonspaketen.
void loop () {char printLog [256]; Serial.printf ("Starta BLE -skanning i %d sekunder … / n", SCAN_TIME); BLEScanResults foundDevices = pBLEScan-> start (SCAN_TIME); int count = foundDevices.getCount (); printf ("Antal enheter hittades: %d / n", count);
fördröjning (100);
}
Luftfuktigheten och temperaturvärdena lagras i dessa paket, så vi behöver bara läsa dem. När vi läst värdena visar vi dem på skärmen. Som alltid kan du hitta en länk till koden för detta projekt i beskrivningen som bifogas denna instruktionsbok.
Steg 6: Sista tankar och förbättringar
Nu när vi vet hur vi får data trådlöst från denna sensor kan vi bygga en komplett batteridriven väderstation. Eftersom denna Xiaomi -enhet är en kommersiell produkt erbjuder den bra batteritid. Tyvärr kan vi inte uppnå liknande batteriförbrukning på våra projekt än. Så jag planerar att använda den här sensorn som en utomhus sensor för ett väderstationprojekt som kommer att använda en stor e-pappersdisplay. Det kommer att bli coolt. Jag kommer också att söka efter andra Xiaomi Bluetooth -aktiverade enheter som vi kan hacka på ett liknande sätt. Håll ögonen öppna.
Jag skulle gärna vilja veta din åsikt om detta projekt. Tycker du det är bra att vi kan få data från vissa kommersiella Bluetooth -enheter? Vad ska du bygga med den här funktionen? Jag skulle vilja läsa dina idéer så lägg dem i kommentarsfältet nedan. Tack!