Sadržaj:
- Korak 1: Kreirajte 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 izmjena: 2024-01-30 08:04
Nekada sam se dobro snašao u mnogim sportovima: hodanje, trčanje, vožnja bicikla, igranje badmintona itd.
Volim jahanje da bih uskoro putovao. Pa, pogledaj moj trbušni trbuh …….
Pa, u svakom slučaju, odlučujem ponovno početi vježbati. Koju opremu treba pripremiti? Osim sportskog objekta, da! Treba mi 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! Zaista, zaista mi se sviđa!
Svoje zapise možete postaviti na Internet
samo jednim klikom. Sve zapise može prikazati Blynk (softver za pametne telefone predstavljen ranije). 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 ekran
Modul ubrzanja
Baterija od 3,7 V (kupljena na mreži, volumen je oko 600 mAH)
3 dna (kupljeno na mreži)
Vrlo je zgodno izgraditi ovaj Blybkov projekt.
Korak 1: Kreirajte Blynk projekt
Dodajte dvije kontrole:
Prikaz vrijednosti * 1
Sat u stvarnom vremenu * 1
Naziv prikaza vrijednosti treba postaviti na korake, ali bez postavki za svojstva sata realnog vremena. Odaberite V1 kao ulazni pin za prilagođavanje izgleda kontrola, prikazanog na donjoj slici.
Korak 2: Preuzmite programe na FireBeetle Board-ESP32
Kliknite ovdje za preuzimanje izvornog koda na esp32. Izvorni kod se sastoji od datoteka biblioteke i datoteka za 3D štampanje. Trebate spremiti datoteku knjižnice u lib of arduino. 3D datoteke mogu direktno štampati kore.
Ispod je glavni program
#include #include // Potrebno 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 ekran (0x3c, 18, 0); OLEDDisplayUi ui (& prikaz); SimpleTimer timer; WidgetRTC rtc; int screenW = 128; int screenH = 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) bajf bajtova [TO_READ]; // međuspremnik od 6 bajtova za spremanje podataka pročitanih s uređaja char str [100]; // međuspremnik stringova 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ši WiFi akreditivi. // Postavite 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, 0x60, 0xF1, 0x07, 0x00, 0x00, 0x60 0xF8, 0x17, 0x00, 0x00, 0xC0, 0xF8, 0x0F, 0x00, 0x00, 0xE0, 0xFB, 0x17, 0x00, 0x00, 0xC0, 0xFF, 0x13, 0x00, 0x00, 0x00, 0xFF, 0x02, 0x00 0xFE, 0x03, 0x00, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0x00, 0xFA, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 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, 0x1F, 0x1, 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, 0x00 0x00, 0xC0, 0x01, 0xF0, 0x03, 0x00, 0xC0, 0x03, 0xE8, 0x07, 0x00, 0xC0, 0x03, 0x88, 0x6F, 0x00, 0x80, 0x03, 0x40, 0x1E, 0x00, 0xA0, 0xAx, 0x00, 0x80, 0x03, 0x00, 0xF8, 0x01, 0x00, 0x07, 0x00, 0xF4, 0x00, 0x00, 0x07, 0x00, 0xE8, 0x00, 0x80, 0x0F, 0x00, 0xE8, 0x00, 0x90, 0x0, 0x 0, 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); return i; } else {return String (cifre); }} void clockOverlay (OLEDDisplay * prikaz, OLEDDisplayUiState * stanje) {if ((sat () == 0) && (minuta () == 0) && (druga () == 0)) koraciSum = 0; } void analogClockFrame (OLEDDisplay * display, 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 stepene u radijane int x3 = (clockCenterX + (sin (ugao) * (clockRadius - (clockRadius / 5))))); int y3 = (clockCenterY - (cos (ugao)) * (clockRadius - (clockRadius / 5)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // prikaz minute kazaljke ugao = minute () * 6; ugao = (ugao / 57.29577951); // Pretvorimo stepene 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 ugla kazaljke sata = sat () * 30 + int ((minuta () / 12) * 6); angle = (angle / 57.29577951); // Pretvorimo stepene 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 * display, OLEDDisplayUiState * stanje, int16_t x, int16_t y) {String date = String (godina ())+"/"+dvije cifre (mjesec ())+"/"+dvije cifre (dan ()); String timenow = String (hour ())+":"+twoDigits (minute ())+":"+twoDigits (second ()); 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šava prenos} // čita broj bajtova počevši od registra adresa na uređaju u nizu baffova void readFrom (int uređaj, adresa bajta, int broj, bajt buff ) {Wire.beginTransmission (uređaj); // započinjemo prijenos na uređaj Wire.write (adresa); // šalje adresu za čitanje iz Wire.endTransmission (); // prekid prijenosa Wire.beginTransmission (uređaj); // započinjemo prijenos 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 zahtijevanog (abnormalno) {buff = Wire.read (); // primimo bajt i ++; } Wire.endTransmission (); // prekid prijenosa} void runningFrame (OLEDDisplay*prikaz, 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 prekrivači sata = {clockOverlay}; int overlaysCount = 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 (prekrivanja, 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) baff [3]) << 8) | buff [2]; zz = (((int) baff [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, pasoš i AUTHTOKENS trebali biste sami promijeniti.
char auth = "YourAuthToken"; // Vaši WiFi akreditivi. // Postavite 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. Osim toga, dodajte 51k pull-up otpornika na dno kako biste dosegli 3.3V, prikazano na donjoj slici.
Oprez: Pogrešno je spojiti pull-up otpornike na AREF, ispravno je na 3.3V
Slika hardverskog lemljenja, prikazana na sljedećoj slici:
Nakon lemljenja, sastavljanje hardverskog modula na koru, prikazano na sljedeći način:
Sveobuhvatna slika efekta ~
Preporučuje se:
Uradi sam Kako napraviti sat koji izgleda lijepo - StickC - Jednostavno za napraviti: 8 koraka
Uradi sam Kako napraviti sat sa lijepim izgledom - StickC - Lako 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 podesiti vrijeme pomoću tipki StickC
Kako koristiti brojač u dijagramu ljestvi? - Delta WPLSoft: 15 koraka
Kako koristiti brojač u dijagramu ljestvi? | 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č novčića: Ova instrukcija će opisati kako stvoriti šalter novčića u kasici -kasici sa GreenPAK -om ™. Ovaj šalter kasica koristiće tri primarne komponente: GreenPAK SLG46531V: GreenPAK služi kao tumač između senzora i zaslona
Kako napraviti brojač pomoću Microbita?: 9 koraka
Kako napraviti brojač s Microbit -om?: Kad smo se ukrcali u avion, č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-ona broji ukupan broj
Kako napraviti kalendar djeda i baka & Spomenar (čak i ako ne znate kako napraviti spomenar): 8 koraka (sa slikama)
Kako napraviti kalendar djeda i baka & Spomenar (čak i ako ne znate kako se bilježiti): Ovo je vrlo ekonomičan (i cijenjen!) Praznični poklon za bake i djedove. Ove sam godine napravio 5 kalendara za manje od 7 dolara svaki. Materijali: 12 sjajnih fotografija vašeg djeteta, djece, nećaka, nećaka, pasa, mačaka ili druge rodbine12 različitih komada