Sadržaj:
- Korak 1: Izradite Blynk projekt
- Korak 2: Preuzmite programe na FireBeetle Board-ESP32
- Korak 3: Povezivanje hardvera
Video: Kako napraviti brojač koraka?: 3 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:32
Nekada sam se dobro snašao u mnogim sportovima: hodanje, trčanje, vožnja bicikla, igranje badmintona itd.
Volim jahanje kako bih uskoro putovao. Pa, pogledaj moj trbušni trbuh …….
Pa, u svakom slučaju, odlučujem ponovno početi vježbati. Koju opremu trebam pripremiti? Osim sportskog objekta, da! Trebam instrument! Vjerujem da uz to mogu održati odgovarajuću količinu vježbe. Ovdje nastaje instrument. Počnimo s videom ~
Instrument ne samo da može bilježiti korake (i kalorije) u stvarnom vremenu, već i prikazivati vrijeme. Ono što je posebno je to što je format prikaza pokazivač ~ tako super! Stvarno, jako mi se sviđa!
Svoje zapise možete postaviti na Internet
samo jednim klikom. Sve zapise može prikazati Blynk (softver za pametni telefon koji je već predstavljen). Isti kao nosivi pametni sat, instrument dobiva vrijeme na mreži (tako da se ne morate bojati snage i ažuriranja vremena).
Hardver u Meed -u:
FireBeetle ploča-ESP32
FireBeetle pokriva-Proto ploču
OLED12864 displej zaslon
Modul ubrzanja
Baterija od 3,7 V (kupljena na mreži, glasnoća je oko 600 mAH)
3 dna (kupljeno na mreži)
Vrlo je prikladno izgraditi ovaj projekt tvrtke Blybk.
Korak 1: Izradite Blynk projekt
Dodajte dvije kontrole:
Prikaz vrijednosti * 1
Sat u stvarnom vremenu * 1
Naziv Prikaza vrijednosti trebao bi biti postavljen na korake, ali bez postavki za svojstva sata u stvarnom vremenu. Odaberite V1 kao ulazni pin kako biste prilagodili raspored kontrola, prikazan na sljedeći način.
Korak 2: Preuzmite programe na FireBeetle Board-ESP32
Kliknite ovdje za preuzimanje izvornog koda na esp32. Izvorni kod sastoji se od datoteka knjižnice i datoteka za 3D ispis. Datoteku knjižnice trebate spremiti u lib arduino. 3D datoteke mogu izravno ispisivati kore.
Ispod je glavni program
#include #include // Potrebno je samo za Arduino 1.6.5 i starije #include "SSD1306.h" // alias za `#include" SSD1306Wire.h "` #include "OLEDDisplayUi.h" #include "images.h" # include #include #include #include #include #define POWER_KEY 1 #define MENU_KEY 2 #define UPLOAD_KEY 3 boolean upload = false; SSD1306 zaslon (0x3c, 18, 0); OLEDDisplayUi ui (& prikaz); Mjerač vremena SimpleTimer; WidgetRTC rtc; int zaslonW = 128; int zaslonH = 64; int clockCenterX = screenW/2; int clockCenterY = ((screenH-16)/2) +16; // gornji žuti dio je 16 px visina int clockRadius = 23; #define DEVICE (0x53) // ADXL345 adresa uređaja #define TO_READ (6) // broj bajtova koje ćemo čitati svaki put (dva bajta za svaku os) bajt baf [TO_READ]; // međuspremnik od 6 bajta za spremanje podataka pročitanih s uređaja char str [100]; // međuspremnik nizova za transformaciju podataka prije slanja na serijski port int regAddress = 0x32; // prvi registar podataka o ubrzanju osi na ADXL345 int xx, yy, zz; // troosni podaci o ubrzanju static int currentValue = 0; statički nepotpisani dugi koraciSum = 0; char auth = "YourAuthToken"; // Vaše WiFi vjerodajnice. // Postavi lozinku na "" za otvorene mreže. char ssid = "Ime vaše mreže"; char pass = "Vaša lozinka"; const char running_Logo_bits PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x03, 0x00, 0x00 0xF8, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0xFC, 0x05, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00 0xFC, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x60, 0xF1, 0x07, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00 0xF8, 0x17, 0x00, 0x00, 0xC0, 0xF8, 0x0F, 0x00, 0x00, 0xE0, 0xFB, 0x17, 0x00, 0x00, 0xC0, 0xFF, 0x13, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0xFE, 0x03, 0x00, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0x00, 0xFA, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0xF0, 0x07, 0x00 0xF4, 0x07, 0x00, 0x00, 0x00, 0xF4, 0x0F, 0x00, 0x00, 0x00, 0xF9, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x80, 0xFE, 0x1x, 0xFF, 0x1F, 0x00, 0x00, 0xA0, 0xFF, 0x5F, 0x00, 0x00, 0xC0, 0x3F, 0x3F, 0x00, 0x0 0, 0xE8, 0x1F, 0x3F, 0x00, 0x00, 0xE8, 0xA7, 0x3E, 0x00, 0x00, 0xF0, 0x03, 0x7C, 0x00, 0x00, 0xE0, 0x05, 0x7C, 0x00, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xC0, 0x01, 0xF0, 0x03, 0x00, 0xC0, 0x03, 0xE8, 0x07, 0x00, 0xC0, 0x03, 0x88, 0x6F, 0x00, 0x80, 0x03, 0x40, 0x1E, 0x00, 0xA0, 0xA0, 0x00 0x00. 0x00, 0xE8, 0x0F, 0x00, 0xE8, 0x00, 0xF0, 0x09, 0x00, 0x60, 0x01, 0xF0, 0x04, 0x00, 0x00, 0x00,}; // pomoćna funkcija za prikaz digitalnog sata: ispisuje vodeći 0 String twoDigits (int znamenke) {if (znamenke <10) {String i = '0'+String (znamenke); povratak i; } else {return niz (znamenke); }} void clockOverlay (OLEDDisplay * zaslon, OLEDDisplayUiState * stanje) {if ((sat () == 0) && (minuta () == 0) && (druga () == 0)) stepsSum = 0; } void analogClockFrame (OLEDDisplay * zaslon, OLEDDisplayUiState * stanje, int16_t x, int16_t y) {display-> drawCircle (clockCenterX + x, clockCenterY + y, 2); // satni otkucaji za (int z = 0; z drawLine (x2 + x, y2 + y, x3 + x, y3 + y);} // prikaz druge ruke float angle = second () * 6; angle = (angle / 57.29577951); // Pretvorimo stupnjeve u radijane int x3 = (clockCenterX + (sin (kut) * (clockRadius - (clockRadius / 5))))); int y3 = (clockCenterY - (cos (kut) * (clockRadius - (clockRadius / 5)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // prikaz minute kut kazaljke = minuta () * 6; kut = (kut / 57.29577951); // Pretvorimo stupnjeve u radijane x3 = (clockCenterX + (sin (kut) * (clockRadius - (clockRadius / 4)))); y3 = (clockCenterY - (cos (kut) * (clockRadius - (clockRadius / 4)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // prikaz kazaljke sata kut = sat () * 30 + int ((minuta () / 12) * 6); angle = (angle / 57.29577951); // Pretvorimo stupnjeve u radijane x3 = (clockCenterX + (sin (kut) * (clockRadius - (clockRadius / 2)))); y3 = (clockCenterY - (cos (kut) * (clockRadius - (clockRa dius / 2)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); } void digitalClockFrame (OLEDDisplay * zaslon, OLEDDisplayUiState * stanje, int16_t x, int16_t y) {Datum niza = Niz (godina ())+"/"+dvije znamenke (mjesec ())+"/"+dvije znamenke (dan ()); String timenow = String (sat ())+":"+dvije znamenke (minute ())+":"+dvije znamenke (druga ()); display-> setTextAlignment (TEXT_ALIGN_CENTER); display-> setFont (ArialMT_Plain_24); display-> drawString (clockCenterX + x, 20, timenow); display-> setFont (ArialMT_Plain_16); display-> drawString (60, 45, datum); } void writeTo (int uređaj, adresa bajta, bajt val) {Wire.beginTransmission (uređaj); // započinjemo prijenos na uređaj Wire.write (adresa); // šalje adresu registra Wire.write (val); // šalje vrijednost za upis Wire.endTransmission (); // završi prijenos} // čita broj bajtova počevši od registra adresa na uređaju u nizu buff void readFrom (int uređaj, adresa bajta, int num, bajt buff ) {Wire.beginTransmission (uređaj); // započinjemo prijenos na uređaj Wire.write (adresa); // šalje adresu za čitanje iz Wire.endTransmission (); // kraj prijenosa Wire.beginTransmission (uređaj); // pokretanje prijenosa na uređaj Wire.requestFrom (uređaj, broj); // zahtijeva 6 bajtova od uređaja int i = 0; while (Wire.available ()) // uređaj može poslati manje od traženog (abnormalno) {buff = Wire.read (); // primiti bajt i ++; } Wire.endTransmission (); // prekid prijenosa} void runningFrame (OLEDDisplay*zaslon, OLEDDisplayUiState*stanje, int16_t x, int16_t y) {float calValue = stepsSum*0,4487; display-> setTextAlignment (TEXT_ALIGN_CENTER); display-> setFont (ArialMT_Plain_24); display-> drawString (clockCenterX, clockCenterY, str); sprintf (str, "%.2fcal", calValue); display-> setTextAlignment (TEXT_ALIGN_CENTER); display-> setFont (ArialMT_Plain_10); display-> drawString (100, 20, str); display-> drawXbm (10, 14, 34, 50, running_Logo_bits); } void uploadFrame (OLEDDisplay * display, OLEDDisplayUiState * stanje, int16_t x, int16_t y) {display-> setFont (ArialMT_Plain_16); display-> drawString (60, 45, "upload data …"); } // Ovaj niz zadržava pokazivače funkcija na sve okvire // okviri su pojedinačni prikazi koji klize u okvirima FrameCallback = {analogClockFrame, digitalClockFrame, runningFrame, uploadFrame}; // koliko okvira ima? int frameCount = 4; // Slojevi se statički iscrtavaju na vrhu okvira, npr. OverlayCallback prekrivanja sata = {clockOverlay}; int preklapanjaBroj = 1; void uploadToBlynk (void) {if (upload == true) {Blynk.virtualWrite (V0, stepsSum); Blynk.virtualWrite (V1, stepsSum); }} void uiInit (void) {ui.setTargetFPS (30); //ui.setActiveSymbol(activeSymbol); //ui.setInactiveSymbol(inactiveSymbol); ui.setIndicatorPosition (TOP); ui.setIndicatorDirection (LEFT_RIGHT); ui.setFrameAnimation (SLIDE_LEFT); ui.setFrames (okviri, frameCount); ui.setOverlays (slojevi, overlaysCount); ui.disableAutoTransition (); ui.switchToFrame (2); ui.init (); display.flipScreenVertical (); } void adxl345Init (void) {writeTo (DEVICE, 0x2D, 0); writeTo (DEVICE, 0x2D, 16); writeTo (DEVICE, 0x2D, 8); } void updateAdxl345 (void) {readFrom (DEVICE, regAddress, TO_READ, buff); // čita podatke o ubrzanju iz ADXL345 xx = (((int) baff [1]) << 8) | buff [0]; yy = (((int) buff [3]) << 8) | buff [2]; zz = (((int) buff [5]) << 8) | buff [4]; if (xx 80) {if (xx <currentValue) {stepsSum ++; } currentValue = xx; } sprintf (str, "%d", stepsSum); } int getKeys (void) {if (digitalRead (D2) == LOW) {delay (5); if (digitalRead (D2) == LOW) {while (digitalRead (D2) == LOW); return POWER_KEY; }} if (digitalRead (D3) == LOW) {delay (5); if (digitalRead (D3) == LOW) {while (digitalRead (D3) == LOW); return MENU_KEY; }} if (digitalRead (D4) == LOW) {delay (5); if (digitalRead (D4) == LOW) {while (digitalRead (D4) == LOW); return UPLOAD_KEY; }} return 0; } void doKeysFunction (void) {static int uiFrameIndex = 2; int ključevi = getKeys (); if (ključevi == POWER_KEY) {statički znak i = 0; if (i) {ui.init (); display.flipScreenVertical (); display.displayOn (); } else {display.displayOff (); } i = ~ i; } if (ključevi == MENU_KEY) {if (upload == false) {uiFrameIndex ++; if (uiFrameIndex == 3) uiFrameIndex = 0; ui.switchToFrame (uiFrameIndex); } else {ui.switchToFrame (3); }} if (ključevi == UPLOAD_KEY) {if (upload == true) {upload = false; ui.switchToFrame (uiFrameIndex); } else {upload = true; ui.switchToFrame (3); }}} void setup () {pinMode (D2, INPUT); pinMode (D3, INPUT); pinMode (D4, INPUT); Blynk.begin (auth, ssid, pass); rtc.begin (); uiInit (); adxl345Init (); timer.setInterval (30, updateAdxl345); timer.setInterval (100, uploadToBlynk); } void loop () {int preostaliTimeBudget = ui.update (); statički int testSum = 0; if ((testSum 0) {odgoda (preostaliTimeBudget);} doKeysFunction (); timer.run ();}
Oprez: Postavke Wi-Fi-ja, putovnicu i AUTHTOKENS trebali biste sami promijeniti.
char auth = "YourAuthToken"; // Vaše WiFi vjerodajnice. // Postavi lozinku na "" za otvorene mreže. char ssid = "Ime vaše mreže"; char pass = "Vaša lozinka";
Korak 3: Povezivanje hardvera
Spojite OLED12864 i modul ubrzanja na I2C, donji dio na D2, D3, D4. Štoviše, dodajte 51k pull-up otpornika na dno kako biste dosegli 3.3V, prikazano na dolje.
Oprez: Pogrešno je spojiti pull-up otpornike na AREF, ispravno je na 3.3V
Slika hardverskog lemljenja, prikazana na sljedeći način:
Nakon lemljenja, sastavljanje hardverskog modula na koru, prikazano na sljedeći način:
Sveobuhvatna slika efekta ~
Preporučeni:
Uradi sam Kako napraviti sat koji izgleda lijepo - StickC - Jednostavno za napraviti: 8 koraka
Uradi sam Kako napraviti sat sa lijepim izgledom - StickC - Jednostavno za napraviti: U ovom ćemo vodiču naučiti kako programirati ESP32 M5Stack StickC s Arduino IDE -om i Visuinom za prikaz vremena na LCD -u te također postaviti vrijeme pomoću tipki StickC
Kako koristiti brojač u dijagramu ljestvice? - Delta WPLSoft: 15 koraka
Kako koristiti brojač u dijagramu ljestvice? | Delta WPLSoft: U ovom vodiču pokazujemo kako se koriste brojači u aplikacijama u stvarnom vremenu kao primjer
Kako napraviti brojač novčića: 3 koraka
Kako napraviti brojač kovanica: Ovaj Instructable opisat će kako stvoriti šalter novčića u kasici -prasici s GreenPAK -om ™. Ovaj šalter štednjake koristit će tri primarne komponente: GreenPAK SLG46531V: GreenPAK služi kao tumač između senzora i zaslona
Kako napraviti brojač s Microbitom?: 9 koraka
Kako napraviti brojač s Microbitom?: Kad smo se ukrcali u zrakoplov, često se susrećemo sa ovakvom situacijom: lijepa stjuardesa koja nosi malu srebrnu kutiju drži je pritisnutu u prolazu. Ona mrmlja: 1,2,3,4,5,6 …… Morate pogoditi-broji ukupan broj
Kako napraviti kalendar djeda i bake & Spomenar (čak i ako ne znate kako spomenar): 8 koraka (sa slikama)
Kako napraviti kalendar djeda i bake & Spomenar (čak i ako ne znate zapisati album): Ovo je vrlo ekonomičan (i cijenjen!) Blagdanski dar za bake i djedove. Ove sam godine napravio 5 kalendara za manje od 7 USD svaki. Materijali: 12 sjajnih fotografija vašeg djeteta, djece, nećaka, nećaka, pasa, mačaka ili druge rodbine12 različitih komada