Mục lục:
- Bước 1: Tạo một dự án Blynk
- Bước 2: Tải chương trình xuống FireBeetle Board-ESP32
- Bước 3: Kết nối phần cứng
Video: Làm thế nào để tạo bộ đếm bước?: 3 bước (có hình ảnh)
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:30
Tôi đã từng chơi tốt nhiều môn thể thao: đi bộ, chạy, đạp xe, chơi cầu lông, v.v.
Tôi thích cưỡi ngựa để đi du lịch khắp nơi trước đó. Chà, hãy nhìn cái bụng đẫy đà của tôi ……
Dù sao thì, tôi quyết định khởi động lại để tập thể dục. Tôi cần chuẩn bị những thiết bị gì? Bên cạnh cơ sở thể thao, có! Tôi cần một nhạc cụ! Tôi tin rằng với nó, tôi có thể duy trì lượng tập thể dục phù hợp. Đây là nhạc cụ ra đời. Hãy bắt đầu với một video ~
Công cụ này không chỉ có thể ghi lại các bước (và lượng calo) theo thời gian thực mà còn hiển thị thời gian. Điều đặc biệt là định dạng hiển thị là con trỏ ~ quá tuyệt! Tôi thực sự, thực sự thích nó!
Bạn có thể tải hồ sơ của mình lên Internet
chỉ bằng một cú nhấp chuột. Tất cả các bản ghi có thể được hiển thị bằng Blynk (một phần mềm điện thoại thông minh đã được giới thiệu trước đây). Giống như đồng hồ thông minh có thể đeo được, công cụ này có thời gian phù hợp (Vì vậy, bạn không cần phải lo lắng về nguồn điện và thời gian cập nhật).
Phần cứng trong meed:
Bảng FireBeetle-ESP32
Bảng che phủ FireBeetle-Proto
Màn hình hiển thị OLED12864
Mô-đun tăng tốc
Pin 3.7V (mua trực tuyến, âm lượng khoảng 600mAH)
3 đáy (mua trực tuyến)
Rất thuận tiện để xây dựng dự án này bởi Blybk.
Bước 1: Tạo một dự án Blynk
Thêm hai điều khiển:
Hiển thị giá trị * 1
Đồng hồ thời gian thực * 1
Tên của Hiển thị giá trị phải được đặt thành các bước, nhưng không có cài đặt nào cho các thuộc tính của Đồng hồ thời gian thực. Chọn V1 làm chân đầu vào để điều chỉnh bố cục của các điều khiển, được hiển thị như bên dưới.
Bước 2: Tải chương trình xuống FireBeetle Board-ESP32
Bấm vào đây để tải mã nguồn về esp32. Mã nguồn bao gồm các tệp thư viện và tệp in 3D. Bạn nên lưu tệp thư viện vào lib của arduino. Và các tệp 3D có thể in trực tiếp lớp vỏ.
Dưới đây là chương trình chính
#include #include // Chỉ cần thiết cho Arduino 1.6.5 trở về trước #include "SSD1306.h" // bí danh cho `#include" SSD1306Wire.h "` #include "OLEDDisplayUi.h" #include "images.h" # bao gồm #include #include #include #include #define POWER_KEY 1 #define MENU_KEY 2 #define UPLOAD_KEY 3 boolean upload = false; Màn hình SSD1306 (0x3c, 18, 0); OLEDDisplayUi ui (& display); Bộ đếm thời gian SimpleTimer; WidgetRTC rtc; int screenW = 128; int screenH = 64; int clockCenterX = screenW / 2; int clockCenterY = ((screenH-16) / 2) +16; // phần trên cùng màu vàng có chiều cao 16 px int clockRadius = 23; #define DEVICE (0x53) // địa chỉ thiết bị ADXL345 #define TO_READ (6) // số byte chúng ta sẽ đọc mỗi lần (hai byte cho mỗi trục) byte buff [TO_READ]; // Bộ đệm 6 byte để lưu dữ liệu đọc từ thiết bị char str [100]; // bộ đệm chuỗi để biến đổi dữ liệu trước khi gửi đến cổng nối tiếp int regAddress = 0x32; // thanh ghi dữ liệu trục-gia tốc-đầu tiên trên ADXL345 int xx, yy, zz; // dữ liệu gia tốc ba trục static int currentValue = 0; static unsigned long stepSum = 0; char auth = "YourAuthToken"; // Thông tin đăng nhập WiFi của bạn. // Đặt mật khẩu thành "" cho các mạng mở. char ssid = "YourNetworkName"; 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, 0, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0xFC, 0x05, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 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, 0xFF, 0x03, 0x00, 0xFF, 0x03, 0x00 0xFE, 0x03, 0x00, 0x00, 0x00, 0xF9, 0x03, 0x00, 0x00, 0x00, 0xFA, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0xF4, 0x07, 0x00, 0x00, 0x00, 0xF4, 0x0F, 0x00, 0x00, 0x00, 0xF9, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x80, 0xFE, 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, 0x00, 005xE0 0x00, 0xC0, 0x01, 0xF0, 0x03, 0x00, 0xC0, 0x03, 0xE8, 0x07, 0x00, 0xC0, 0x03, 0x88, 0x6F, 0x00, 0x80, 0x03, 0xC0, 0x03, 0xE8, 0x07, 0x00, 0xC0, 0x03, 0x88, 0x6F, 0x00, 0x80, 0x03, 0x40, 0x1E, 0x00, 0xA0 0x00, 0x80, 0x03, 0x00, 0xF8, 0x01, 0x00, 0x07, 0x00, 0xF4, 0x00, 0x00, 0x07, 0x00, 0xE8, 0x00, 0x80, 0x0F, 0x00, 0xE8, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00 0x00, 0xE8, 0x0F, 0x00, 0xE8, 0x00, 0xF0, 0x09, 0x00, 0x60, 0x01, 0xF0, 0x04, 0x00, 0x00, 0x00,}; // chức năng tiện ích cho hiển thị đồng hồ kỹ thuật số: in ra hàng đầu 0 String twoDigits (intumbers) {if (architects <10) {String i = '0' + String (chữ số); trả lại tôi; } else {return String (các chữ số); }} void clockOverlay (OLEDDisplay * display, OLEDDisplayUiState * state) {if ((giờ () == 0) && (phút () == 0) && (giây () == 0)) bướcSum = 0; } void analogClockFrame (OLEDDisplay * state, OLEDDisplayUiState * state, int16_t x, int16_t y) {display-> drawCircle (clockCenterX + x, clockCenterY + y, 2); // tích tắc giờ cho (int z = 0; z drawLine (x2 + x, y2 + y, x3 + x, y3 + y);} // hiển thị kim giây float angle = second () * 6; angle = (angle / 57.29577951); // Chuyển đổi độ sang radian int x3 = (clockCenterX + (sin (angle) * (clockRadius - (clockRadius / 5)))); int y3 = (clockCenterY - (cos (angle) * (clockRadius - (clockRadius / 5)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // hiển thị góc kim phút = phút () * 6; angle = (angle / 57.29577951); // Chuyển đổi độ sang radian x3 = (clockCenterX + (sin (angle) * (clockRadius - (clockRadius / 4)))); y3 = (clockCenterY - (cos (angle) * (clockRadius - (clockRadius / 4)))); display-> drawLine (clockCenterX + x, clockCenterY + y, x3 + x, y3 + y); // hiển thị góc kim giờ = giờ () * 30 + int ((phút () / 12) * 6); angle = (angle / 57.29577951); // Chuyển đổi độ sang radian x3 = (clockCenterX + (sin (angle) * (clockRadius - (clockRadius / 2)))); y3 = (clockCenterY - (cos (angle) * (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 (giờ ()) + ":" + twoDigits (phút ()) + ":" + twoDigits (giây ()); 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, ngày tháng); } void writeTo (int device, byte address, byte val) {Wire.beginTransmission (device); // bắt đầu truyền tới thiết bị Wire.write (address); // gửi địa chỉ thanh ghi Wire.write (val); // gửi giá trị để ghi Wire.endTransmission (); // kết thúc truyền} // đọc num byte bắt đầu từ thanh ghi địa chỉ trên thiết bị vào mảng buff void readFrom (int device, byte address, int num, byte buff ) {Wire.beginTransmission (device); // bắt đầu truyền tới thiết bị Wire.write (address); // gửi địa chỉ để đọc từ Wire.endTransmission (); // kết thúc truyền dẫn Wire.beginTransmission (thiết bị); // bắt đầu truyền tới thiết bị Wire.requestFrom (device, num); // yêu cầu 6 byte từ thiết bị int i = 0; while (Wire.available ()) // thiết bị có thể gửi ít hơn yêu cầu (bất thường) {buff = Wire.read (); // nhận một byte i ++; } Wire.endTransmission (); // kết thúc truyền dẫn} 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, "tải lên dữ liệu…"); } // Mảng này giữ con trỏ hàm đến tất cả các khung // các khung là các khung nhìn đơn trượt trong các khung FrameCallback = {analogClockFrame, digitalClockFrame, runningFrame, uploadFrame}; // có bao nhiêu khung hình? int frameCount = 4; // Các lớp phủ được vẽ tĩnh trên đầu khung, ví dụ. một lớp phủ đồng hồ OverlayCallback = {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 (frame, frameCount); ui.setOverlays (lớp phủ, lớp phủCount); ui.disableAutoTransition (); ui.switchToFrame (2); ui.init (); display.flipScreenVerently (); } void adxl345Init (void) {writeTo (DEVICE, 0x2D, 0); writeTo (THIẾT BỊ, 0x2D, 16); writeTo (DEVICE, 0x2D, 8); } void updateAdxl345 (void) {readFrom (DEVICE, regAddress, TO_READ, buff); // đọc dữ liệu tăng tốc từ ADXL345 xx = (((int) buff [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); trả lại POWER_KEY; }} if (digitalRead (D3) == LOW) {delay (5); if (digitalRead (D3) == LOW) {while (digitalRead (D3) == LOW); trả về MENU_KEY; }} if (digitalRead (D4) == LOW) {delay (5); if (digitalRead (D4) == LOW) {while (digitalRead (D4) == LOW); trả về UPLOAD_KEY; }} trả về 0; } void doKeysFunction (void) {static int uiFrameIndex = 2; int các khóa = getKeys (); if (các phím == POWER_KEY) {static char i = 0; if (i) {ui.init (); display.flipScreenVerently (); display.displayOn (); } else {display.displayOff (); } i = ~ i; } if (các khóa == MENU_KEY) {if (tải lên == false) {uiFrameIndex ++; if (uiFrameIndex == 3) uiFrameIndex = 0; ui.switchToFrame (uiFrameIndex); } else {ui.switchToFrame (3); }} if (key == 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 còn lạiTimeBudget = ui.update (); static int testSum = 0; if ((testSum 0) {delay (còn lạiTimeBudget);} doKeysFunction (); timer.run ();}
Thận trọng: Bạn nên sửa đổi cài đặt Wi-Fi, hộ chiếu và AUTHTOKENS cho chính mình.
char auth = "YourAuthToken"; // Thông tin đăng nhập WiFi của bạn. // Đặt mật khẩu thành "" cho các mạng mở. char ssid = "YourNetworkName"; char pass = "YourPassword";
Bước 3: Kết nối phần cứng
Kết nối OLED12864 và mô-đun tăng tốc với I2C, đáy với D2, D3, D4. Hơn nữa, thêm điện trở kéo lên 51k vào đáy để đạt 3,3V, được hiển thị như bên dưới.
Thận trọng: Sai khi kết nối điện trở kéo lên với AREF, điện trở đúng là 3,3V
Hình ảnh hàn phần cứng, được hiển thị như dưới đây:
Sau khi hàn, lắp ráp mô-đun phần cứng vào lớp vỏ, được hiển thị như dưới đây:
Hình ảnh hiệu ứng toàn diện ~
Đề xuất:
Làm thế nào để tạo ra một chiếc điện thoại có thể không dây! (Bộ đàm Arduino): 7 bước (có hình ảnh)
Làm thế nào để tạo ra một chiếc điện thoại có thể không dây! (Arduino Walkie Talkie): Mới hôm trước, tôi đang thực hiện một cuộc điện thoại rất quan trọng thì điện thoại chuối của tôi ngừng hoạt động! Tôi đã rất thất vọng. Đó là lần cuối cùng tôi bỏ lỡ cuộc gọi vì chiếc điện thoại ngu ngốc đó! (Theo nhận thức sâu sắc, tôi có thể đã hơi quá tức giận khi
Làm thế nào để tải nhạc từ trang web ALMOST BẤT KỲ (Haha) (Miễn là bạn có thể nghe được thì bạn có thể nhận được nó Được thôi nếu nó được nhúng vào Flash mà bạn có thể không có khả năng) EDITED !!!!! Thông tin thêm: 4 bước
Làm thế nào để tải nhạc từ trang web ALMOST BẤT KỲ (Haha) (Miễn là bạn có thể nghe nó thì bạn có thể nhận được nó … Được thôi nếu nó được nhúng vào Flash mà bạn có thể không có khả năng) EDITED !!!!! Thông tin bổ sung: nếu bạn đã từng truy cập vào một trang web và nó phát một bài hát mà bạn thích và muốn nó thì đây là hướng dẫn cho bạn, không phải lỗi của tôi nếu bạn làm hỏng thứ gì đó (chỉ có cách là nếu bạn bắt đầu xóa nội dung mà không có lý do ) tôi đã có thể tải nhạc cho
Làm thế nào để tạo một gương chiếu sáng một bên tự động làm mờ: 8 bước (có hình ảnh)
Cách tạo Gương chiếu sáng một bên Tự động làm mờ: Đây là lần đầu tiên tôi có thể hướng dẫn và tôi khá tự hào về nó! Tôi đã dành rất nhiều thời gian trên trang web này, tôi nghĩ rằng sẽ rất công bằng khi tôi gửi một dự án thú vị. Dự án này khá linh hoạt, hãy chú ý đến 'CÓ THỜI GIAN KHÔNG?' những phần có thể cho phép bạn cải thiện
Làm cho máy ảnh của bạn thành "chế độ chụp đêm quân sự", thêm hiệu ứng ban đêm hoặc tạo chế độ chụp ảnh ban đêm trên bất kỳ máy ảnh nào !!!: 3 bước
Đặt Máy ảnh của bạn thành "Chế độ chụp đêm quân sự", Thêm Hiệu ứng Ban đêm hoặc Tạo Chế độ Cảnh báo Ban đêm trên Bất kỳ Máy ảnh nào !!!: *** Điều này đã được đưa vào CUỘC THI KỸ THUẬT SỐ DAYS PHOTO , Hãy bình chọn cho tôi ** * Nếu bạn cần bất kỳ trợ giúp nào, vui lòng gửi email: [email protected] Tôi nói tiếng Anh, Pháp, Nhật, Tây Ban Nha và tôi biết các ngôn ngữ khác nếu bạn
Làm thế nào để tạo ra một máy đếm nhịp điện tử: 8 bước (có hình ảnh)
Cách tạo Máy đo nhịp điện tử: Trong Tài liệu hướng dẫn này, chúng tôi sẽ chế tạo Máy đo nhịp điện tử bằng cách sử dụng các linh kiện điện tử đơn giản có trong bất kỳ cửa hàng Điện tử nào và các công cụ mà bạn khảo sát đã có. Trước khi chúng ta bắt đầu làm một, hãy trả lời một số câu hỏi cơ bản như: 1. M