Indholdsfortegnelse:
- Trin 1: Opret et Blynk -projekt
- Trin 2: Download programmer til FireBeetle Board-ESP32
- Trin 3: Hardwareforbindelse
Video: Sådan laver du en trintæller?: 3 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:25
Jeg plejede at præstere godt i mange sportsgrene: gåture, løb, cykle, spille badminton osv.
Jeg elsker at ride for at rejse rundt inden længe. Tja, se på min mave ….
Nå, alligevel beslutter jeg mig for at genstarte for at træne. Hvilket udstyr skal jeg forberede? Udover sportsanlæg, ja! Jeg har brug for et instrument! Jeg tror med det, at jeg kan beholde passende mængde motion. Her bliver instrumentet til. Lad os begynde med en video ~
Instrumentet kan ikke bare registrere trin (og kalorier) i realtid, men vise tid. Det særlige er, at visningsformatet er markør ~ så sejt! Jeg kan virkelig godt lide det!
Du kan uploade dine optegnelser til Internettet
kun med ét klik. Alle poster kan vises af Blynk (en smart-telefonsoftware introduceret før). Det samme som bærbart smartur, instrumentet får tid på nettet (Så du behøver ikke være bange for strøm og tidopdatering).
Hardware i meed:
FireBeetle Board-ESP32
FireBeetle Covers-Proto Board
OLED12864 dispaly skærm
Accelerationsmodul
3,7V batteri (købt online, volumen er omkring 600mAH)
3 flasker (købt online)
Det er meget bekvemt at bygge dette projekt af Blybk.
Trin 1: Opret et Blynk -projekt
Tilføj to kontroller:
Værdi Display * 1
Realtidsur * 1
Navnet på Value Display bør indstilles til trin, men ingen indstilling for egenskaberne for realtidsur. Vælg V1 som input -pin for at justere layoutet af kontroller, vist som nedenfor.
Trin 2: Download programmer til FireBeetle Board-ESP32
Klik her for at downloade kildekoden til esp32. Kildekoden består af biblioteksfiler og 3D -udskrivningsfiler. Du skal gemme biblioteksfilen til lib of arduino. Og 3D -filerne kan udskrive skorper direkte.
Nedenfor er hovedprogrammet
#include #include // Kun nødvendig for Arduino 1.6.5 og tidligere #include "SSD1306.h" // alias for "#include" SSD1306Wire.h "" #include "OLEDDisplayUi.h" #include "images.h" # inkludere #include #include #include #include #define POWER_KEY 1 #define MENU_KEY 2 #define UPLOAD_KEY 3 boolean upload = false; SSD1306 -skærm (0x3c, 18, 0); OLEDDisplayUi ui (& display); SimpleTimer timer; WidgetRTC rtc; int screenW = 128; int screenH = 64; int clockCenterX = screenW/2; int clockCenterY = ((screenH-16)/2) +16; // øverste gule del er 16 px højde int clockRadius = 23; #define DEVICE (0x53) // ADXL345 enhedsadresse #define TO_READ (6) // antal bytes, vi skal læse hver gang (to bytes for hver akse) byte buff [TO_READ]; // 6 bytes buffer til lagring af data læst fra enhedens char str [100]; // strengbuffer for at transformere data, før de sendes til den serielle port int regAddress = 0x32; // første akse-accelerationsdataregister på ADXL345 int xx, yy, zz; // accelerationsdata med tre akser statisk int currentValue = 0; statisk usigneret lange trinSum = 0; char auth = "YourAuthToken"; // Dine WiFi -legitimationsoplysninger. // Indstil adgangskode til "" for åbne netværk. char ssid = "DitNetværksnavn"; char pass = "YourPassword"; 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, 0x00, 0x00 0xF8, 0x17, 0x00, 0x00, 0xC0, 0xF8, 0x0F, 0x00, 0x00, 0xE0, 0xFB, 0x17, 0x00, 0x00, 0xC0, 0xFF, 0x13, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x0, 0xFE, 0x03, 0x00, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0x00, 0xFA, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xF4, 0x07, 0x00, 0x00, 0x00, 0xF4, 0x0F, 0x00, 0x00, 0x00, 0xF9, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 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, 0x0, 0x0, 0x0, 0x0 0x00, 0xC0, 0x01, 0xF0, 0x03, 0x00, 0xC0, 0x03, 0xE8, 0x07, 0x00, 0xC0, 0x03, 0x88, 0x6F, 0x00, 0x80, 0x03, 0x40, 0x1E, 0x0, 0x0, 0x0, 0x00, 0x80, 0x03, 0x00, 0xF8, 0x01, 0x00, 0x07, 0x00, 0xF4, 0x00, 0x00, 0x07, 0x00, 0xE8, 0x00, 0x80, 0x0F, 0x00, 0xE8, 0x0, 0x0, 0x0, 0x0, 0x00, 0xE8, 0x0F, 0x00, 0xE8, 0x00, 0xF0, 0x09, 0x00, 0x60, 0x01, 0xF0, 0x04, 0x00, 0x00, 0x00,}; // hjælpefunktion til digital urvisning: udskriver førende 0 streng toDigits (int cifre) {if (cifre <10) {String i = '0'+streng (cifre); returnere i; } else {return String (cifre); }} void clockOverlay (OLEDDisplay * display, OLEDDisplayUiState * state) {if ((hour () == 0) && (minute () == 0) && (second () == 0)) stepsSum = 0; } void analogClockFrame (OLEDDisplay * display, OLEDDisplayUiState * state, int16_t x, int16_t y) {display-> drawCircle (clockCenterX + x, clockCenterY + y, 2); // timevink for (int z = 0; z drawLine (x2 + x, y2 + y, x3 + x, y3 + y);} // vis brugte flydevinkel = sekund () * 6; vinkel = (vinkel / 57.29577951); // Konverter grader til radianer int x3 = (clockCenterX + (sin (vinkel) * (clockRadius - (clockRadius / 5))))); int y3 = (clockCenterY - (cos (vinkel) * (clockRadius - (clockRadius / 5))))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // display minutviservinkel = minut () * 6; vinkel = (vinkel / 57.29577951); // Konverter grader til radianer x3 = (clockCenterX + (sin (vinkel) * (clockRadius - (clockRadius / 4)))); y3 = (clockCenterY - (cos (vinkel) * (clockRadius - (clockRadius / 4))))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // visning af timevinkel = time () * 30 + int ((minut () / 12) * 6); vinkel = (vinkel / 57.29577951); // Konverter grader til radianer x3 = (clockCenterX + (sin (vinkel) * (clockRadius - (clockRadius / 2)))); y3 = (clockCenterY - (cos (vinkel) * (clockRadius - (clockRa dius / 2))))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); } void digitalClockFrame (OLEDDisplay * display, OLEDDisplayUiState * state, int16_t x, int16_t y) {String date = String (year ())+"/"+twoDigits (month ())+"/"+twoDigits (day ()); String timenow = String (time ())+":"+twoDigits (minut ())+":"+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, dato); } void writeTo (int enhed, byte adresse, byte val) {Wire.beginTransmission (enhed); // start transmission til enhed Wire.write (adresse); // send registeradresse Wire.write (val); // send værdi for at skrive Wire.endTransmission (); // afslut transmission} // læser num bytes fra adresseregister på enhed i til buff array void readFrom (int enhed, byte adresse, int num, byte buff ) {Wire.beginTransmission (enhed); // start transmission til enhed Wire.write (adresse); // sender adresse for at læse fra Wire.endTransmission (); // afslut transmission Wire.beginTransmission (enhed); // start transmission til enhed Wire.requestFrom (enhed, num); // anmode om 6 bytes fra enhed int i = 0; mens (Wire.available ()) // enhed kan sende mindre end ønsket (unormalt) {buff = Wire.read (); // modtage en byte i ++; } Wire.endTransmission (); // end transmission} void runningFrame (OLEDDisplay*display, OLEDDisplayUiState*state, 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 * state, int16_t x, int16_t y) {display-> setFont (ArialMT_Plain_16); display-> drawString (60, 45, "upload data …"); } // Denne matrix holder funktionspegere til alle rammer // rammer er de enkelte visninger, der glider i FrameCallback -rammer = {analogClockFrame, digitalClockFrame, runningFrame, uploadFrame}; // hvor mange rammer er der? int frameCount = 4; // Overlejringer tegnes statisk oven på en ramme f.eks. et ur OverlayCallback overlays = {clockOverlay}; int overlaysCount = 1; void uploadToBlynk (void) {if (upload == true) {Blynk.virtualWrite (V0, stepsSum); Blynk.virtualWrite (V1, trinSum); }} 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 (rammer, frameCount); ui.setOverlays (overlays, overlaysCount); ui.disableAutoTransition (); ui.switchToFrame (2); ui.init (); display.flipScreenVertically (); } void adxl345Init (void) {writeTo (DEVICE, 0x2D, 0); writeTo (ENHED, 0x2D, 16); writeTo (ENHED, 0x2D, 8); } void updateAdxl345 (void) {readFrom (DEVICE, regAddress, TO_READ, buff); // læs accelerationsdata fra ADXL345 xx = (((int) buff [1]) << 8) | buff [0]; åå = (((int) buff [3]) << 8) | buff [2]; zz = (((int) buff [5]) << 8) | buff [4]; hvis (xx 80) {if (xx <currentValue) {stepsSum ++; } nuværende værdi = xx; } sprintf (str, "%d", stepsSum); } int getKeys (void) {if (digitalRead (D2) == LOW) {delay (5); hvis (digitalRead (D2) == LOW) {while (digitalRead (D2) == LOW); returner POWER_KEY; }} if (digitalRead (D3) == LOW) {forsinkelse (5); hvis (digitalRead (D3) == LOW) {while (digitalRead (D3) == LOW); vende tilbage MENU_KEY; }} if (digitalRead (D4) == LOW) {forsinkelse (5); hvis (digitalRead (D4) == LOW) {while (digitalRead (D4) == LOW); returner UPLOAD_KEY; }} returner 0; } void doKeysFunction (void) {static int uiFrameIndex = 2; int nøgler = getKeys (); hvis (nøgler == POWER_KEY) {statisk tegn i = 0; hvis (i) {ui.init (); display.flipScreenVertically (); display.displayOn (); } andet {display.displayOff (); } i = ~ i; } hvis (nøgler == MENU_KEY) {hvis (upload == false) {uiFrameIndex ++; hvis (uiFrameIndex == 3) uiFrameIndex = 0; ui.switchToFrame (uiFrameIndex); } andet {ui.switchToFrame (3); }} hvis (nøgler == UPLOAD_KEY) {hvis (upload == true) {upload = false; ui.switchToFrame (uiFrameIndex); } ellers {upload = true; ui.switchToFrame (3); }}} ugyldig opsætning () {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 stayingTimeBudget = ui.update (); statisk int testSum = 0; if ((testSum 0) {delay (stayingTimeBudget);} doKeysFunction (); timer.run ();}
Forsigtig: Du bør ændre Wi-Fi-indstilling, pas og AUTHTOKENS til dig selv.
char auth = "YourAuthToken"; // Dine WiFi -legitimationsoplysninger. // Indstil adgangskode til "" for åbne netværk. char ssid = "DitNetværksnavn"; char pass = "YourPassword";
Trin 3: Hardwareforbindelse
Tilslut OLED12864 og accelerationsmodul til I2C, bund til D2, D3, D4. Tilføj desuden 51k pull-up modstande til bundene for at nå 3,3V, vist som nedenfor.
Forsigtig: Det er forkert at tilslutte pull-up modstande til AREF, den rigtige er til 3,3V
Hardware -loddebilledet, vist som nedenfor:
Efter loddet, montering af hardwaremodul til skorpe, vist som nedenfor:
Omfattende effektbillede ~
Anbefalede:
Sådan laver du IoT -baseret hjemmeautomatisering med NodeMCU -sensorer Kontrollerelæ: 14 trin (med billeder)
Sådan laver du IoT-baseret hjemmeautomatisering med NodeMCU-sensorer Kontrollerelæ: I dette IoT-baserede projekt har jeg lavet hjemmeautomatisering med Blynk og NodeMCU-kontrolrelæmodul med feedback i realtid. I manuel tilstand kan dette relæmodul styres fra mobil eller smartphone og, manuel switch. I Auto Mode er denne smar
Sådan laver du et hjemmebiograf med genvundne højttalere: 5 trin (med billeder)
Sådan laver du et hjemmebiograf med genvundne højttalere: Hej fyre, I denne instruktion vil jeg instruere dig om, hvordan jeg lavede en simpel hjemmebiograf med høj effekt ved hjælp af genvundne højttalere. Det er meget enkelt at lave, jeg vil forklare det på en mere enkel måde. For mere information besøg Electronics Projects HubLets
Sådan laver du en brugerdefineret printkort ved hjælp af en lasergraver med lav effekt: 8 trin (med billeder)
Sådan laver du et brugerdefineret printkort ved hjælp af en lasergraver med lav effekt: Når det kommer til at lave et hjemmelavet printkort, kan du finde flere metoder online: fra de mest rudimentære, kun ved hjælp af en pen, til de mere sofistikerede ved hjælp af 3D -printere og andet udstyr. Og denne tutorial falder på den sidste sag! I dette projekt vil jeg
Sådan laver du Infinity Mirror Heart med Arduino og RGB Leds: 8 trin (med billeder)
Sådan laver du et uendeligt spejlhjerte med Arduino og RGB -lysdioder: En gang i en fest så jeg og konen et uendeligt spejl, og hun var fascineret af udseendet og blev ved med at sige, at jeg vil have et! En god mand lytter og husker altid, så jeg besluttede at bygge en til hende som en valentinsdag
Sådan laver du en delt skærmvideo med fire trin: 4 trin (med billeder)
Sådan laver du en delt skærmvideo med fire trin: Vi ser ofte en samme person vise sig i en scene to gange i et tv -afspilning. Og så vidt vi ved, har skuespilleren ikke en tvillingebror. Vi har også set, at to sangvideoer er sat på en skærm for at sammenligne deres sangevner. Dette er kraften i spl