Inhoudsopgave:
- Stap 1: Verkrijg alle onderdelen
- Stap 2: Het ESP32-bord
- Stap 3: 2,8" TFT-display voor Arduino en ESP32
- Stap 4: Het beeldscherm aansluiten
- Stap 5: De code van het project
- Stap 6: Laatste gedachten en verbeteringen
Video: ESP32 Xiaomi Hack - Draadloos gegevens ophalen - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:14
Beste vrienden welkom bij een andere Instructable! Vandaag gaan we leren hoe we de gegevens kunnen krijgen die deze Xiaomi-temperatuur- en vochtigheidsmonitor verzendt met behulp van de Bluetooth-functionaliteit van het ESP32-bord.
Zoals je kunt zien, gebruik ik een ESP32-bord en een 2,8-inch TFT-kleurenscherm. Op het display geven we de temperatuur en de luchtvochtigheid weer. Het leuke is dat ik geen sensoren op het ESP32-bord heb aangesloten. Ik krijg de temperatuur en de luchtvochtigheid draadloos van deze commerciële Xiaomi-temperatuur- en vochtigheidsmeter. Hoe cool is dat! Het scherm op het Xiaomi-apparaat wordt elke seconde bijgewerkt, maar ik update het scherm dat is aangesloten op het ESP32-bord elke 10 seconden om stroom te besparen op het Xiaomi-apparaat.
Deze coole Xiaomi-temperatuur- en vochtigheidssensor geeft de temperatuur en de vochtigheid weer op het LCD-scherm en kan de gegevens ook naar andere Xiaomi-apparaten of apps verzenden met behulp van het Bluetooth-protocol. De apparaten gebruiken een enkele AAA-batterij en aangezien het een commercieel product is, is de levensduur van de batterij van het apparaat uitstekend. Hij gaat maandenlang mee op een enkele AAA-batterij, iets wat we bij onze doe-het-zelfprojecten niet kunnen bereiken. Een paar weken geleden ontdekte ik dat een paar slimme jongens erin slaagden om het protocol dat Xiaomi gebruikt om de gegevens van de sensor te verzenden, te reverse-engineeren en slaagden erin om die gegevens te krijgen met behulp van een ESP32-bord. Dus ik heb het geprobeerd, en zoals je kunt zien werkt het!
Stap 1: Verkrijg alle onderdelen
Laten we nu kijken hoe we dit project kunnen bouwen. We hebben een ESP32-bord nodig, een 2,8-inch ILI9341-display, de Xiaomi-temperatuur- en vochtigheidssensor, een breadboard en enkele draden.
Hier zijn enkele links naar de onderdelen die ik in deze Instructable ga gebruiken.
- ESP32 ▶
- 2,8" scherm ▶
- Xiaomi-sensor ▶
- Breadboard ▶
- Draden ▶
- USB-meter ▶
- Powerbank ▶
Stap 2: Het ESP32-bord
Mocht je er niet bekend mee zijn, de ESP32 chip is de opvolger van de populaire ESP8266 chip die we in het verleden al vaker hebben gebruikt. De ESP32 is een beest! Het biedt twee 32 verwerkingskernen die werken op 160 MHz, een enorme hoeveelheid geheugen, WiFi, Bluetooth en vele andere functies met een kostprijs van ongeveer $ 7! Geweldige dingen!
Bekijk de gedetailleerde recensie die ik voor dit bord heb opgesteld. Ik heb de video op deze Instructable bijgevoegd. Het zal helpen begrijpen waarom deze chip de manier waarop we dingen maken voor altijd zal veranderen! Een van de meest opwindende dingen van de ESP32 is dat, hoewel hij zo krachtig is, hij een diepe slaapmodus biedt die slechts 10μΑs stroom nodig heeft. Dit maakt de ESP32 de ideale chip voor toepassingen met een laag stroomverbruik.
Stap 3: 2,8" TFT-display voor Arduino en ESP32
Het scherm is groot en biedt een resolutie van 320x240 pixels. Vergeleken met een van mijn favoriete schermen, het 1,8” kleuren TFT-scherm zie je het een stuk groter. Het scherm biedt ook aanraakfunctionaliteit, wat een toegevoegde bonus is, en een SD-kaartsleuf aan de achterkant. Het maakt gebruik van de SPI-interface, dus de verbinding met de Arduino of het ESP32-bord is heel eenvoudig. De kosten van het display zijn relatief laag; het kost ongeveer 11 $, wat naar mijn mening een eerlijke prijs is voor wat dit scherm biedt.
Iets anders aan dit scherm is dat het niet als een schild wordt geleverd zoals het aanraakscherm dat we tot nu toe gebruikten. Op deze manier kunnen we het display op elk bord aansluiten, de Arduino Pro mini, de STM32, de ESP8266 en de ESP32. Dit is erg belangrijk omdat we nu een goedkope display hebben die we bij elk bord kunnen gebruiken. Tot nu toe waren de enige aanraakschermen die we met deze borden konden gebruiken de Nextion-schermen die duurder zijn, en om eerlijk te zijn, hoewel ik ze van tijd tot tijd gebruik, vind ik ze niet echt leuk.
Stap 4: Het beeldscherm aansluiten
Eerst moeten we het ESP32-bord aansluiten op het 2,8-inch display. U vindt het schema bij Instructable. Ik gebruik dit DOIT ESP32-bord dat ongeveer twee jaar geleden is uitgebracht. Deze versie van het bord is niet langer beschikbaar omdat er nu een nieuwere versie van is die meer pinnen biedt, deze. De enige reden dat ik de oude versie van het bord gebruik, is dat de GND-pin van het bord naast de SPI-pinnen is geplaatst, aan dezelfde kant van het bord, wat het breadboard-vriendelijk maakt.
Nadat we het display op het bord hebben aangesloten, kunnen we het project opstarten. Na een paar seconden ontvangen we live gegevens van het nabijgelegen Xiaomi-apparaat. Omdat het apparaat Bluetooth 4 gebruikt, is het bereik ervan redelijk goed. We kunnen gemakkelijk de gegevens krijgen die dit apparaat verzendt van afstanden tot 10 meter of meer! We kunnen ook het batterijniveau van het Xiaomi-apparaat ontvangen, maar ik geef deze waarde niet op het scherm weer.
Als we deze USB-meter gebruiken, kunnen we zien dat de huidige stroomafname van dit project ongeveer 120-150 mA is met dit grote display. Als we een e-paperdisplay gebruiken, het ESP32-bord in de diepe slaapmodus zetten en om de paar minuten gegevens van de sensor krijgen, kunnen we dit project batterijvriendelijk maken. Ik zal dit in een toekomstige video proberen. Dit project is slechts een demonstratie dat we draadloos gegevens van dit apparaat kunnen krijgen.
Stap 5: De code van het project
Laten we nu de softwarekant van het project bekijken.
De code van het project is gebaseerd op dit project:
Ik gebruikte de code die die gegevens van het Xiaomi-apparaat haalt en bouwde er een op zichzelf staand project mee.
In deze variabele verklaren we dat we elke 10 seconden nieuwe gegevens moeten krijgen.
#define SCAN_TIME 10 // seconden
Hierbij verklaren we dat we de temperatuur in graden Celsius willen weergeven. Als u het imperiale systeem wilt gebruiken, stelt u deze variabele in op false.
booleaans METRISCH = waar; //Instellen waar voor metrisch systeem; false voor imperial
Bij de setup-functie initialiseren we het display en de Bluetooth-module van het ESP32-bord en tekenen we vervolgens de gebruikersinterface op het scherm.
ongeldige setup() {
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); // schakel brownout-detector uit
tft.begin();
Serieel.begin(115200);
Serial.println ("ESP32 XIAOMI DISPLAY"); initBluetooth();
drawUI();
}
Vervolgens zoeken we elke 10 seconden naar Bluetooth-apparaten in de buurt. We maken geen verbinding met het Xiaomi-apparaat omdat dit niet nodig is. We scannen alleen naar Bluetooth-randapparatuur met laag energieverbruik in de buurt en controleren de uitgezonden advertentiepakketten.
void loop() { char printLog [256]; Serial.printf("Start BLE-scan voor %d seconden…\n", SCAN_TIME); BLEScanResults gevondenDevices = pBLEScan->start(SCAN_TIME); int count = gevondenDevices.getCount(); printf("Aantal apparaten gevonden: %d\n", aantal);
vertraging (100);
}
De vochtigheids- en temperatuurwaarden worden in die pakketten opgeslagen, dus we hoeven ze alleen maar uit te lezen. Nadat we de waarden hebben gelezen, geven we ze weer op het scherm. Zoals altijd vindt u een link naar de code van dit project in de beschrijving bij deze Instructable.
Stap 6: Laatste gedachten en verbeteringen
Nu we weten hoe we draadloos gegevens van deze sensor kunnen krijgen, kunnen we een compleet weerstation op batterijen bouwen. Aangezien dit Xiaomi-apparaat een commercieel product is, biedt het een lange batterijduur. Helaas kunnen we voor onze projecten nog geen vergelijkbaar batterijverbruik bereiken. Dus ik ben van plan deze sensor te gebruiken als een buitensensor voor een weerstationproject dat een groot e-paperdisplay zal gebruiken. Het zal cool zijn. Ik ga ook op zoek naar andere Xiaomi Bluetooth-apparaten die we op een vergelijkbare manier kunnen hacken. Blijf kijken.
Ik zou graag uw mening over dit project willen weten. Vindt u het handig dat we gegevens van sommige commerciële Bluetooth-apparaten kunnen krijgen? Wat ga je bouwen met deze functionaliteit? Ik zou graag uw ideeën willen lezen, dus plaats ze alstublieft in de opmerkingen hieronder. Bedankt!
Aanbevolen:
Maak mooie plots van live Arduino-gegevens (en sla de gegevens op in Excel): 3 stappen
Maak mooie plots van live Arduino-gegevens (en sla de gegevens op in Excel): we spelen allemaal graag met onze plotterfunctie in de Arduino IDE. Hoewel het nuttig kan zijn voor basistoepassingen, worden de gegevens gewist naarmate meer punten worden toegevoegd en het is niet bijzonder aangenaam voor de ogen. De Arduino IDE-plotter werkt niet
Tijd en datum ophalen van internet - zelfstudie: 9 stappen
Tijd en datum van internet halen - Zelfstudie: In deze zelfstudie leren we hoe u de datum en tijd van de NIST TIME-server kunt krijgen met behulp van M5Stack StickC en Visuino, Bekijk een demonstratievideo
Gegevens ophalen uit een Firebase-database op NodeMCU: 7 stappen
Gegevens ophalen uit een Firebase-database op NodeMCU: voor deze instructie halen we gegevens op uit een database in Google Firebase en halen deze op met behulp van een NodeMCU voor verdere ontleding. PROJECTVEREISTEN:1) NodeMCU of ESP8266 Controller2) G-Mail account voor het maken van een Firebase-database.3) Download de
Een robot laten ophalen: 6 stappen
Een robot laten spelen Fetch: gebruik de nieuwe Pixy2 en een DFRobot ESP32 FireBeetle om een robot te maken die items kan vinden en ophalen
Gegevens ophalen van een dode computer: 4 stappen
Gegevens ophalen van een lege computer: Dit houdt in dat de harde schijf van de lege computer wordt verwijderd en het lijkt alsof het een externe HDD op een andere computer is. U hebt nodig: Een tweede computer Een externe HDD Opmerking: de externe HDD moet van hetzelfde type zijn als de doel-HDD