{"id":330160,"date":"2022-02-27T21:02:12","date_gmt":"2022-02-27T21:02:12","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=330160"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=330160","title":{"rendered":"<span>\u0410\u0440\u0434\u0443\u0438\u043d\u043e \u0422\u0430\u0439\u043c \u0442\u0440\u0435\u043a\u0435\u0440 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u044b\u0432\u0430\u0435\u0442 \u0442\u044f\u0436\u0435\u043b\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0440\u0435\u0436\u043d\u044e\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u041c\u043d\u0435 \u0432 \u044d\u0442\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u043e\u043c\u043e\u0433\u043b\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438 \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0441\u0435\u0431\u0435 <a href=\"https:\/\/hackernoon.com\/building-an-arduino-time-tracker-cube-with-toggls-open-api\" rel=\"noopener noreferrer nofollow\"><u>\u0442\u0430\u0439\u043c \u0442\u0440\u0435\u043a\u0435\u0440 \u043a\u0443\u0431<\/u><\/a>. \u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u043a\u0443\u0431\u0430 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0442\u043e\u0442 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0432\u0438\u0434 \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0417\u0430\u0442\u0435\u043c, \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0448\u0435\u0441\u0442\u0438 \u0441\u0442\u043e\u0440\u043e\u043d \u043a\u0443\u0431\u0430 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438 \u0440\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0422\u0430\u0439\u043c \u0442\u0440\u0435\u043a\u0435\u0440 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440 \u0441 12 \u0441\u0442\u043e\u0440\u043e\u043d\u0430\u043c\u0438. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438 \u0437\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0442\u0430\u0439\u043c \u0442\u0440\u0435\u043a\u0435\u0440 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0435\u0433\u043e API. <br \/>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0442\u0430\u0439\u043c \u0442\u0440\u0435\u043a\u0435\u0440\u0430 \u0434\u0430\u0435\u0442 \u043d\u0430\u043c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0431, \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u0443\u044e \u0438\u043b\u0438 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0442\u0440\u0435\u043a\u0435\u0440\u0430 \u0432 \u043b\u044e\u0431\u043e\u0439 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. \u041d\u0430\u043c \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0434 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e \u043d\u0430\u0448\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0436\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u043e\u0442\u0447\u0435\u0442\u044b \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0410 \u043d\u0430\u0448 \u0442\u0440\u0435\u043a\u0435\u0440 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440 \u0441\u043b\u0443\u0436\u0438\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u043a\u043e \u0432\u0441\u0435\u043c\u0443 \u044d\u0442\u043e\u043c\u0443. <a href=\"https:\/\/github.com\/sultanbekuly\/time_tracker_dodecahedron\" rel=\"noopener noreferrer nofollow\"><u>\u0421\u0441\u044b\u043b\u043a\u0430<\/u><\/a> \u043d\u0430 github \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u043c\u043e\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0433\u0434\u0435 \u043b\u0435\u0436\u0438\u0442 \u0432\u0435\u0441\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u043a\u043e\u0434. \u041d\u0438\u0436\u0435 \u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u043c \u043d\u0430\u043a\u043b\u043e\u043d\u0430, \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043b\u0435\u0436\u0438\u0442 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Toggl Track \u0438 \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0435\u0433\u043e API \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/e65\/368\/c86\/e65368c865945865ff0d1ffaf8c8ec31.jpeg\" alt=\"\" title=\"\" width=\"1280\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e65\/368\/c86\/e65368c865945865ff0d1ffaf8c8ec31.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u0434\u0430\u043d\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u043c\u043e\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/hackernoon.com\/building-an-arduino-time-tracker-cube-with-toggls-open-api\" rel=\"noopener noreferrer nofollow\"><u>\u0442\u0430\u0439\u043c \u0442\u0440\u0435\u043a\u0435\u0440 \u043a\u0443\u0431<\/u><\/a> \u0434\u043b\u044f \u043e\u0431\u0449\u0435\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u043e\u0431\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442:<\/p>\n<ul>\n<li>\n<p>\u0420\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043b\u0435\u0436\u0438\u0442 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440.\u00a0<\/p>\n<\/li>\n<li>\n<p>\u0423\u043c\u043d\u043e\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a Wi-Fi.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0434\u0430\u0442\u0447\u0438\u043a MPU6050, \u0410\u0440\u0434\u0443\u0438\u043d\u043e \u0438 Wi-Fi \u043c\u043e\u0434\u0443\u043b\u044c. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 NodeMCU, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0442\u0440\u043e\u0435\u043d Wi-Fi \u043c\u043e\u0434\u0443\u043b\u044c. \u041d\u043e \u0432\u0441\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u0430 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0410\u0440\u0434\u0443\u0438\u043d\u043e \u0441 ESP8266.\u00a0<\/p>\n<h3>\u0420\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043b\u0435\u0436\u0438\u0442 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440<\/h3>\n<h4>MPU6050<\/h4>\n<p>\u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0430\u0442\u0447\u0438\u043a MPU6050. \u041e\u043d \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 3-\u0445 \u043e\u0441\u0435\u0432\u043e\u0439 \u0433\u0438\u0440\u043e\u0441\u043a\u043e\u043f \u0438 3-\u0445 \u043e\u0441\u0435\u0432\u043e\u0439 \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440 \u0432 \u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0440\u043f\u0443\u0441\u0435. \u041e\u043d \u0438\u043c\u0435\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 I2C, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u0410\u0440\u0434\u0443\u0438\u043d\u043e: A5\u200a\u2014\u200aSCL, A4\u200a\u2014\u200aSDA, 5V\u2014VCC \u0438 GND\u200a\u2014\u200aGND; \u0434\u043b\u044f NodeMCU: D1\u2014 SCL, D2\u200a\u2014\u200aSDA, 3.3V\u2014 VCC \u0438 GND\u200a\u2014\u200aGND.<\/p>\n<h4>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u0430<\/h4>\n<p>\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u043e\u0442\u043a\u0440\u044b\u0432 serial monitor \u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0432 baud rate \u043d\u0430 9600, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u044b\u0440\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0433\u0438\u0440\u043e\u0441\u043a\u043e\u043f\u0430 \u0438 \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u0430.<\/p>\n<pre><code>#include \"Wire.h\" #include \"I2Cdev.h\" #include \"MPU6050.h\" MPU6050 mpu; int16_t ax, ay, az; int16_t gx, gy, gz; void setup() {   Wire.begin();   Serial.begin(9600);   mpu.initialize();   \/\/connection status   Serial.println(mpu.testConnection() ? \"MPU6050 OK\" : \"MPU6050 FAIL\");   delay(1000); } void loop() {   mpu.getMotion6(&amp;ax, &amp;ay, &amp;az, &amp;gx, &amp;gy, &amp;gz);   Serial.print(ax); Serial.print('\\t');   Serial.print(ay); Serial.print('\\t');   Serial.print(az); Serial.print('\\t');   Serial.print(gx); Serial.print('\\t');   Serial.print(gy); Serial.print('\\t');   Serial.println(gz);   delay(50); }<\/code><\/pre>\n<p>\u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u043e\u043a\u0440\u0443\u0442\u0438\u0442\u044c, \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u043c \u0438 \u043f\u043e\u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0437\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438.<\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 -32768 \u0434\u043e 32767. \u0414\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043a\u043e\u0440\u043e\u0447\u0435 (-100 \u2026 100) \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 327. \u0422\u0430\u043a\u0436\u0435, \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043b\u0435\u0436\u0438\u0442 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440, \u043d\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u0430. \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0430\u0434\u0435\u043d\u0438\u044f &#8212; \u0433\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u044e \u0417\u0435\u043c\u043b\u0438.<\/p>\n<pre><code>Serial.print(ax\/327); Serial.print('\\t'); Serial.print(ay\/327); Serial.print('\\t'); Serial.print(az\/327); Serial.print('\\t'); Serial.println(\"\"); delay(50);<\/code><\/pre>\n<h4>\u0414\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440<\/h4>\n<figure class=\"float full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/821\/570\/8b8\/8215708b8bf596291d9ed6fc02645b40.jpeg\" alt=\"\" title=\"\" width=\"960\" height=\"1280\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/821\/570\/8b8\/8215708b8bf596291d9ed6fc02645b40.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c, \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043b\u0435\u0436\u0438\u0442 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440, \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0441\u0430\u043c \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u043d\u0430 \u043a\u0430\u0440\u0442\u043e\u043d\u0435 \u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c <a href=\"https:\/\/pikabu.ru\/story\/kak_sdelat_dodekayedr_iz_kartona_5630417\" rel=\"noopener noreferrer nofollow\"><u>\u0434\u0430\u043d\u043d\u043e\u0435 \u043e\u0440\u0438\u0433\u0430\u043c\u0438<\/u><\/a>.\u00a0<\/p>\n<figure class=\"float full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/10f\/64d\/c97\/10f64dc97cf0bff47b9a721975822098.jpeg\" alt=\"\" title=\"\" width=\"960\" height=\"1280\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/10f\/64d\/c97\/10f64dc97cf0bff47b9a721975822098.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044e \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043b\u0435\u0436\u0438\u0442 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440.<br \/>\u041e\u0431\u0449\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430: \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0441 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f\u043c\u0438 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u043f\u043e \u0442\u0440\u0435\u043c \u043e\u0441\u044f\u043c \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u0430 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440\u0430, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u0432\u0435\u0440\u044f\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f\u043c\u0438 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e \u043b\u0438 \u043b\u0435\u0436\u0438\u0442 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438.<\/p>\n<p>Epsilon &#8212; \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u043f\u0440\u0438 \u0441\u0432\u0435\u0440\u043a\u0435.<\/p>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u0441 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f\u043c\u0438 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u043f\u043e \u0442\u0440\u0435\u043c \u043e\u0441\u044f\u043c \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u0430 (x, y, z) \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440\u0430:<\/p>\n<pre><code>int16_t epsilon = 6; const int side_values[12][3] = {   {-2,    0,  46},   {21,  -38,  21},   {-29, -32,  20},   {-40,  18,  17},   {5,    44,  19},   {43,    7,  21},   {2,     0, -54},   {-42,  -8, -29},   {-4,  -44, -27},   {40,  -19, -25},   {32,   31, -27},   {-19,  38, -27} };<\/code><\/pre>\n<p>\u0421\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c side_values \u0438 \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043b\u0435\u0436\u0438\u0442 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440:<\/p>\n<pre><code>int dodecahedron_side = get_dodecahedron_side(ax\/327, ay\/327, az\/327);  int get_dodecahedron_side(int16_t ax, int16_t ay, int16_t az){    \/\/return the dedocahedron side 0-11, else -2   for(int i=0; i&lt;12; i++){     if((side_values[i][0]-epsilon &lt; ax &amp;&amp; ax &lt; side_values[i][0]+epsilon) &amp;&amp;        (side_values[i][1]-epsilon &lt; ay &amp;&amp; ay &lt; side_values[i][1]+epsilon) &amp;&amp;        (side_values[i][2]-epsilon &lt; az &amp;&amp; az &lt; side_values[i][2]+epsilon)){\/\/44 &lt; 50 &lt; 66         return i;     }    }   return -2; };<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u043e\u0433\u043e, \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e \u043b\u0438 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440 \u043b\u0435\u0436\u0438\u0442 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u043b\u0435\u0436\u0438\u0442 \u043b\u0438 \u043e\u043d \u0442\u0440\u0438 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438. \u041f\u0435\u0440\u0435\u0440\u044b\u0432 \u043c\u0435\u0436\u0434\u0443 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435\u043c 50 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434. \u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0432 3 \u0441\u0435\u043a\u0443\u043d\u0434\u044b (3000 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434) \u043d\u0430 50 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434, \u043f\u043e\u043b\u0443\u0447\u0438\u043c 60.\u00a0<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a, \u0433\u0434\u0435 \u0431\u0443\u0434\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 60 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c -1 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435:<\/p>\n<pre><code>int last_60_measurements[60] = {}; for(int i=0; i&lt;60; i++){ last_60_measurements[i]=-1;}<\/code><\/pre>\n<p>\u0421\u0434\u0432\u0438\u0433\u0430\u0435\u043c \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (dodecahedron_side):<\/p>\n<pre><code>for (int i=0;i&lt;59;i++){     last_60_measurements[i]=last_60_measurements[i+1];\/\/0=1,1=2..   } last_60_measurements[59] = dodecahedron_side;<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u043b\u0438 \u0432\u0441\u0435 60 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430:<\/p>\n<pre><code>if(checkIfCubeStable(last_60_measurements)){   Serial.print(\"Stable position\"); Serial.print('\\t'); }  bool checkIfCubeStable(int measurements[]){   for (int i=0;i&lt;60;i++){     if(i==59){return true;};     if(measurements[i] != measurements[i+1]){return false;};   } }<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0436\u0435, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u043d\u0430\u0447\u0430\u0442\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0430\u0439\u043c\u0435\u0440 \u0437\u0430\u043d\u043e\u0432\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0441\u044f \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0441\u043c\u0435\u043d\u0438\u0442\u0441\u044f \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440\u0430.<\/p>\n<pre><code>int sent_dodecahedron_side = -1;  if(sent_dodecahedron_side!=dodecahedron_side){   Serial.print(\"SEND DATA!\"); Serial.print('\\t');   sent_dodecahedron_side = dodecahedron_side; } <\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0447\u0430\u0442\u044c \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0442\u0440\u0435\u043a\u0435\u0440).<\/p>\n<h3>\u041a\u0440\u0430\u0442\u043a\u043e \u043f\u0440\u043e Toggl Track<\/h3>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9ca\/8d5\/4d0\/9ca8d54d0da4581f6be9dbcc2de429e5.png\" alt=\"\" title=\"\" width=\"800\" height=\"159\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9ca\/8d5\/4d0\/9ca8d54d0da4581f6be9dbcc2de429e5.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u044b \u0432 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0432\u044b \u0443\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u043b\u0438 \u0441\u043b\u044b\u0448\u0430\u0442\u044c \u043e\u00a0 <a href=\"https:\/\/track.toggl.com\/timer\" rel=\"noopener noreferrer nofollow\"><u>Toggl Track<\/u><\/a>. \u042d\u0442\u043e \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u0434\u043b\u044f iOS, Android, macOS, Windows, Linux \u0438 \u0432\u0435\u0431-\u0432\u0435\u0440\u0441\u0438\u0435\u0439. \u041d\u043e \u0441\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0434\u043b\u044f \u043d\u0430\u0441 &#8212; \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u043e\u0442\u043a\u0440\u044b\u0442\u0430\u044f <a href=\"https:\/\/github.com\/toggl\/toggl_api_docs\" rel=\"noopener noreferrer nofollow\"><u>\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043f\u043e \u0435\u0433\u043e API<\/u><\/a>.<\/p>\n<h3>Toggl track API<\/h3>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Toggl track API \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u043c\u0435\u0442\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0437\u043d\u0430\u0442\u044c e-mail \u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u043e\u0442 \u043d\u0435\u0433\u043e. \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0438\u0436\u0435.<\/p>\n<p>\u0412 Toggl track \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 HTTPS POST \u0437\u0430\u043f\u0440\u043e\u0441\u044b.<br \/>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u043e \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b. \u041c\u044b \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438: \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0441 \u0421url (\u0432 macOS \u0438 Windows 10 (\u0432\u0435\u0440\u0441\u0438\u044f 1803 \u0438 \u0432\u044b\u0448\u0435)) \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u0437 <a href=\"https:\/\/reqbin.com\/curl\" rel=\"noopener noreferrer nofollow\"><u>\u0441\u0430\u0439\u0442\u043e\u0432<\/u><\/a> \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Curl \u043a\u043e\u043c\u0430\u043d\u0434 \u043e\u043d\u043b\u0430\u0439\u043d.<\/p>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0443\u0437\u043d\u0430\u0442\u044c workspaces id, \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"bash\">curl -v -u email:password -X GET https:\/\/api.track.toggl.com\/api\/v8\/me<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u0430\u043a\u043e\u0439 \u043e\u0442\u0432\u0435\u0442:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>{   \"since\":1361780172,   \"data\": {     \"id\":123,     \"api_token\":\"1971800d4d82861d8f2c1651fea4d212\",     \"default_wid\":777,     \"email\":\"john.doe@gmail.com\",     \"fullname\":\"John Doe\",     \"jquery_timeofday_format\":\"h:i A\",     \"jquery_date_format\":\"m\/d\/Y\",     \"timeofday_format\":\"h:mm A\",     \"date_format\":\"MM\/DD\/YYYY\",     \"store_start_and_stop_time\":true,     \"beginning_of_week\":1,     \"language\":\"en_US\",     \"duration_format\": \"improved\",     \"image_url\":\"https:\/\/www.toggl.com\/images\/profile.png\",     \"at\": \"2015-02-17T16:58:53+00:00\",     \"created_at\": \"2014-07-31T07:51:17+00:00\",     \"timezone\": \"Europe\/London\",     \"retention\": 9,     \"new_blog_post\":{},     \"projects\": [       {         \"id\":90123,         \"wid\":777,         \"name\":\"Our best project\",         \"billable\":true,         \"active\":true,         \"at\":\"2013-02-12T09:47:57+00:00\",         \"color\":\"5\"       }     ],     \"tags\": [       {         \"id\":238526,         \"wid\":777,         \"name\":\"billed\"       }     ],     \"tasks\": [],     \"workspaces\": [       {         \"id\":777,         \"name\":\"John's WS\",         \"at\":\"2012-11-28T11:56:49+00:00\",         \"default_hourly_rate\": 0,         \"default_currency\": \"USD\",         \"projects_billable_by_default\": true,         \"rounding\": 1,         \"rounding_minutes\": 0,         \"api_token\": \"ea897...\"       }     ],     \"clients\": [] }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0443\u0437\u043d\u0430\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 (\u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0435\u0441\u0442\u044c), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0422\u0430\u043a\u0436\u0435, \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u0442\u0440\u0435\u043a\u0435\u0440 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438 \u0431\u0435\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<pre><code>curl -v -u email:password -X GET https:\/\/api.track.toggl.com\/api\/v8\/workspaces\/WORKSPACE_ID\/projects<\/code><\/pre>\n<p>\u0438 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0437\u0430\u043f\u0443\u0441\u043a \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438:<\/p>\n<pre><code>curl -v -u email:password  -H \"Content-Type: application\/json\"  -d '{\"time_entry\":{\"description\":\"Description goes here\",\"tags\":[],\"pid\":PROJECT_ID,\"created_with\":\"curl\"}}'  -X POST https:\/\/api.track.toggl.com\/api\/v8\/time_entries\/start<\/code><\/pre>\n<p>\u041d\u0430 \u0410\u0440\u0434\u0443\u0438\u043d\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c HTTPS \u043a\u043e\u043c\u0430\u043d\u0434\u044b.\u00a0 \u041d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Curl \u043a\u043e\u043c\u0430\u043d\u0434 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0436\u0430\u0442\u044c \u043d\u0430 HTTP \u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0442\u043e\u0442 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0430 \u0410\u0440\u0434\u0443\u0438\u043d\u043e.<\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \/ \u0417\u0430\u043f\u0443\u0441\u043a \u0442\u0440\u0435\u043a\u0435\u0440\u0430<\/h3>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a:<\/p>\n<pre><code>#include &lt;ESP8266WiFi.h> #include &lt;WiFiClientSecure.h> #include &lt;ESP8266WebServer.h> #include &lt;ESP8266HTTPClient.h><\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u0443 \u043d\u0430\u0441 \u0443\u043c\u043d\u043e\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a Wi-Fi. \u0415\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0439 \u0441\u0435\u0442\u0435\u0439 \u0438 \u043f\u0430\u0440\u043e\u043b\u0435\u0439 \u043e\u0442 \u043d\u0438\u0445. \u0423\u0434\u043e\u0431\u043d\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b, \u043a\u0430\u043a \u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043d\u043e\u0441\u0438\u0442\u0435 \u0441 \u0441\u043e\u0431\u043e\u0439 \u0442\u0430\u0439\u043c \u0442\u0440\u0435\u043a\u0435\u0440. <\/p>\n<pre><code>String ssid_list[] =      {\"Network_Name_1\",  \"Network_Name_2\", \"Network_Name_3\"}; \/\/Wifi Network Name String password_list[] =  {\"Network_Key_1\",   \"Network_Key_2\",  \"Network_Key_3\"};  \/\/Wifi Network Key  void setup() { Wire.begin(); Serial.begin(9600); \/\/smart wifi connection WiFi.mode(WIFI_OFF); delay(1000); WiFi.mode(WIFI_STA); String ssid = \"\"; while (WiFi.status() != WL_CONNECTED) {   for (byte x = 0; x &lt; (sizeof(ssid_list) \/ sizeof(ssid_list[0])); x++) {   ssid = ssid_list[x];   String password = password_list[x];     WiFi.begin(ssid, password);     Serial.println(\"\");     Serial.print(\"Connecting to wifi: \");     Serial.print(ssid);     int i = 0;     while (WiFi.status() != WL_CONNECTED &amp;amp;&amp;amp; i&amp;lt;14) {       \/\/on average, it connects in 7 attempts       delay(500);       i++;       Serial.print(\".\");     }      if(WiFi.status() == WL_CONNECTED){       break;     }   }    }   Serial.print(\"Connected to wifi: \");   Serial.println(ssid); }<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043a\u043e\u0434 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e:<\/p>\n<pre><code>const char *authorization = \"Basic Y2WG...lGsA==\";<\/code><\/pre>\n<p>\u0412 \u0441\u043f\u0438\u0441\u043a\u0435 trackers \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440\u0430.<\/p>\n<pre><code>const char *trackers[12][2] = {{\"Email check\",             \"172635855\"},\/\/0                               {\"Meeting\",                  \"172635927\"},\/\/1                               {\"Programming\",              \"172635927\"},\/\/2                               {\"Reading\",                  \"163047428\"},\/\/3                               {\"Online training courses\",  \"163047428\"},\/\/4                               {\"STOP\",                     \"\\\"\\\"\"     },\/\/5                               {\"Bug fix\",                  \"\\\"\\\"\"     },\/\/6                               {\"UI\",                       \"\\\"\\\"\"     },\/\/7                               {\"Call\",                     \"\\\"\\\"\"     },\/\/8                               {\"Music\",                    \"\\\"\\\"\"     },\/\/9                               {\"Exercise\",                 \"\\\"\\\"\"     },\/\/10                               {\"Relax\",                    \"\\\"\\\"\"     }};\/\/11<\/code><\/pre>\n<p>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043d\u0443\u0436\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435:<\/p>\n<pre><code>const char *host = \"api.track.toggl.com\"; const int httpsPort = 443; String datarx; \/\/Received data as string int httpsClientTimeout = 5000; \/\/in millis<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041c\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c HTTPS POST \u0437\u0430\u043f\u0440\u043e\u0441 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0442\u0432\u0435\u0442. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u201cSerial.print\u201d \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0438 \u043a\u0430\u043a\u043e\u0439 \u043e\u0442\u0432\u0435\u0442 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438.<\/p>\n<pre><code>callhttps_start_time_entry(trackers[sent_dodecahedron_side][0], trackers[sent_dodecahedron_side][1]);  void callhttps_start_time_entry(const char* description, const char* pid){   WiFiClientSecure httpsClient;   httpsClient.setInsecure();      httpsClient.setTimeout(httpsClientTimeout);   delay(1000);   int retry = 0;   while ((!httpsClient.connect(host, httpsPort)) &amp;&amp; (retry &lt; 15)) {     delay(100);     Serial.print(\".\");     retry++;   }   if (retry == 15) {Serial.println(\"Connection failed\");}   else {Serial.println(\"Connected to Server\");}      Serial.println(\"Request_start{\");   String req = String(\"POST \/api\/v8\/time_entries\/start HTTP\/1.1\\r\\n\")         + \"Host: api.track.toggl.com\\r\\n\"         +\"Content-Type: application\/json\\r\\n\"         +\"Authorization: \" + authorization + \"\\r\\n\"         +\"Content-Length: \" + (77 + strlen(description) + strlen(pid)) + \"\\r\\n\\r\\n\"                  +\"{\\\"time_entry\\\":{\\\"description\\\":\\\"\" + description + \"\\\",\\\"tags\\\":[],\\\"pid\\\":\" + pid + \",\\\"created_with\\\":\\\"time_cube\\\"}}\" + \"\\r\\n\\r\\n\";      Serial.println(req);   httpsClient.print(req);   Serial.println(\"}Request_end\");      Serial.println(\"line{\");   while (httpsClient.connected()) {     String line = httpsClient.readStringUntil('\\n');     Serial.print(line);     if (line == \"\\r\") {       break;     }   }   Serial.println(\"}line\");      Serial.println(\"datarx_start{\");   while (httpsClient.available()) {     datarx += httpsClient.readStringUntil('\\n');   }   Serial.println(datarx);   Serial.println(\"}datarx_end\");   datarx = \"\"; }<\/code><\/pre>\n<p>\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0442\u0440\u0435\u043a\u0435\u0440\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0430 \u0448\u0430\u0433\u0430. \u041f\u0435\u0440\u0432\u044b\u0439, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0412\u0442\u043e\u0440\u043e\u0439, \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0442\u0440\u0435\u043a\u0435\u0440\u0430, \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0433\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430:<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>String timeEntry_id = callhttps_stop_time_entry_p1(); callhttps_stop_time_entry_p2(timeEntry_id);  String callhttps_stop_time_entry_p1(){   WiFiClientSecure httpsClient;   httpsClient.setInsecure(); \/\/ this is the magical line that makes everything work      httpsClient.setTimeout(httpsClientTimeout);   delay(1000);   int retry = 0;   while ((!httpsClient.connect(host, httpsPort)) &amp;&amp; (retry &lt; 15)) {     delay(100);     Serial.print(\".\");     retry++;   }   if (retry == 15) {Serial.println(\"Connection failed\");}   else {Serial.println(\"Connected to Server\");}      Serial.println(\"Request_start{\");      \/\/Get the information about running time entry. Especcially we need time entry id.   String req = String(\"GET \/api\/v8\/time_entries\/current HTTP\/1.1\\r\\n\")         +\"Host: api.track.toggl.com\\r\\n\"         +\"Authorization: \" + authorization +\"\\r\\n\\r\\n\";      Serial.println(req);   httpsClient.print(req);   Serial.println(\"}Request_end\");      Serial.println(\"line{\");   while (httpsClient.connected()) {     String line = httpsClient.readStringUntil('\\n');     Serial.print(line);     if (line == \"\\r\") {       break;     }   }   Serial.println(\"}line\");      Serial.println(\"datarx_start{\");   while (httpsClient.available()) {     datarx += httpsClient.readStringUntil('\\n');   }   Serial.println(datarx);   Serial.println(\"}datarx_end\");   String timeEntry_id = datarx.substring(14,24);   datarx = \"\";   Serial.println(\"timeEntry_id:\"+timeEntry_id);      return timeEntry_id; }  void callhttps_stop_time_entry_p2(String timeEntry_id){   WiFiClientSecure httpsClient;   httpsClient.setInsecure(); \/\/ this is the magical line that makes everything work      httpsClient.setTimeout(15000);   delay(1000);   int retry = 0;   while ((!httpsClient.connect(host, httpsPort)) &amp;&amp; (retry &lt; 15)) {     delay(100);     Serial.print(\".\");     retry++;   }   if (retry == 15) {Serial.println(\"Connection failed\");}   else {Serial.println(\"Connected to Server\");}      Serial.println(\"Request_start{\");   \/\/Here we will stop the running time entry by using its id:   String req = String(\"PUT \/api\/v8\/time_entries\/\"+timeEntry_id+\"\/stop HTTP\/1.1\\r\\n\")         +\"Host: api.track.toggl.com\\r\\n\"         +\"Authorization: \" + authorization +\"\\r\\n\"          +\"Content-Length: \" + \"0\" + \"\\r\\n\\r\\n\";    Serial.println(req);   httpsClient.print(req);   Serial.println(\"}Request_end\");      Serial.println(\"line{\");   while (httpsClient.connected()) {     String line = httpsClient.readStringUntil('\\n');     Serial.print(line);     if (line == \"\\r\") {       break;     }   }   Serial.println(\"}line\");      Serial.println(\"datarx_start{\");   while (httpsClient.available()) {     datarx += httpsClient.readStringUntil('\\n');   }   Serial.println(datarx);   Serial.println(\"}datarx_end\");   datarx = \"\"; }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0412 loop \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0442\u0440\u0435\u043a\u0435\u0440\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code>if(trackers[sent_dodecahedron_side][0] != \"STOP\"){   Serial.print(\"callhttps_start_time_entry\"); Serial.print('\\t');   callhttps_start_time_entry(trackers[sent_dodecahedron_side][0], trackers[sent_dodecahedron_side][1]); }else{   Serial.println(\"callhttps_stop_time_entry\");   String timeEntry_id = callhttps_stop_time_entry_p1();   callhttps_stop_time_entry_p2(timeEntry_id); }<\/code><\/pre>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0414\u0430\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043b\u0435\u0436\u0438\u0442 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440, \u043e\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u0434\u043b\u044f \u043b\u044e\u0431\u044b\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0444\u0438\u0433\u0443\u0440. \u041d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0438\u043b\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0441\u043f\u0438\u0441\u043a\u043e\u0432 side_values \u0438 trackers \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0444\u0438\u0433\u0443\u0440\u044b.\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/d96\/53e\/045\/d9653e04599c7ccb47ba882ab6182696.jpeg\" alt=\"https:\/\/www.pinterest.ru\/pin\/538391330439375238\/\" title=\"https:\/\/www.pinterest.ru\/pin\/538391330439375238\/\" width=\"552\" height=\"658\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d96\/53e\/045\/d9653e04599c7ccb47ba882ab6182696.jpeg\" data-blurred=\"true\"\/><figcaption>https:\/\/www.pinterest.ru\/pin\/538391330439375238\/<\/figcaption><\/figure>\n<p>\u0418\u0434\u0435\u0438 \u043f\u043e \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044e \u043f\u0440\u043e\u0435\u043a\u0442\u0430:<\/p>\n<ul>\n<li>\n<p>\u0412\u0435\u0431 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0442\u0440\u0435\u043a\u0435\u0440\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0434\u0435\u043b\u0430\u0442\u044c 3\u0434 \u043c\u043e\u0434\u0435\u043b\u044c \u043a\u0435\u0439\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0434 \u043a\u043e\u043d\u0435\u0446 \u0434\u043d\u044f, \u0443\u0432\u0438\u0434\u0435\u0432 \u0441\u0432\u043e\u0438 \u043d\u0435\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u044f \u043e\u0431\u044b\u0447\u043d\u043e \u0440\u0430\u0441\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u0441\u044f \u0438 \u043a\u043e\u0440\u0438\u043b \u0441\u0435\u0431\u044f \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e \u043d\u0435 \u0431\u044b\u043b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0443\u0434\u0435\u043b\u044f\u043b \u043e\u0442\u0434\u044b\u0445\u0443. \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043d\u0430\u0447\u0430\u043b \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u044f, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u043d\u0430 \u0447\u0442\u043e \u043e\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u043e \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u043b, \u0447\u0442\u043e \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0437\u0430\u043d\u044f\u043b\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0435\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0438\u043b\u0438 \u0431\u044b\u043b\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0430, \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u0431\u044b\u043b \u043f\u0435\u0440\u0435\u0440\u044b\u0432 \u043d\u0430 \u0447\u0430\u0448\u043a\u0443 \u0447\u0430\u044f.<\/p>\n<p>\u0412 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u0442\u0435\u043c, \u043a\u0430\u043a\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u043d\u0435\u0441 \u0432 \u043c\u043e\u044e \u0436\u0438\u0437\u043d\u044c \u0443\u0447\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p>\u0421 \u0442\u0435\u0445 \u043f\u043e\u0440 \u043a\u0430\u043a \u044f \u043d\u0430\u0447\u0430\u043b \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u044f \u0441\u0442\u0430\u043b \u0431\u043e\u043b\u0435\u0435 \u0431\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c. \u042f \u0442\u0440\u0430\u0447\u0443 \u0432\u0440\u0435\u043c\u044f \u0441 \u0443\u043c\u043e\u043c \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e \u0437\u0434\u043e\u0440\u043e\u0432\u044b\u0439 \u0431\u0430\u043b\u0430\u043d\u0441 \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u0438 \u043b\u0438\u0447\u043d\u043e\u0439 \u0436\u0438\u0437\u043d\u044c\u044e. \u041c\u043d\u043e\u0433\u0438\u043c \u0438\u0434\u0435\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0443\u0447\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u2014 \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430. \u0414\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440 \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e\u043c\u043e\u0433 \u043c\u043d\u0435 \u043b\u0435\u0433\u043a\u043e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f.<\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u0442\u0447\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0432 Toggl track. \u0411\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043d\u043e \u0441\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0417\u0430\u043a\u043e\u043d\u0447\u0438\u0432 \u043f\u0440\u043e\u0435\u043a\u0442, \u044f \u043d\u0435 \u0431\u044b\u043b \u0443\u0432\u0435\u0440\u0435\u043d, \u0441\u0442\u043e\u0438\u0442 \u043b\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e, \u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0432, \u0447\u0442\u043e \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b \u043d\u0430 \u043d\u0435\u0433\u043e \u0431\u043e\u043b\u0435\u0435 17 \u0447\u0430\u0441\u043e\u0432 \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u0438 \u0431\u043e\u043b\u0435\u0435 50 \u043d\u0430 \u0442\u0430\u0439\u043c \u0442\u0440\u0435\u043a\u0435\u0440 \u043a\u0443\u0431) \u0442\u043e \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u044d\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u043a\u043e\u043c\u0443-\u0442\u043e, \u0445\u043e\u0442\u044f \u0431\u044b \u0434\u043b\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u043c \u0433\u0440\u0430\u043c\u043e\u0442\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0438 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f.<\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u0430\u0448\u0435 \u0443\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u0438 \u044f \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u0432\u044b \u0442\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u0440\u0435\u043c\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0432\u0430\u0436\u043d\u044b\u0435 \u0434\u043b\u044f \u0432\u0430\u0441 \u0432\u0435\u0449\u0438. \u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u044f \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0443\u0447\u0435\u0442\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/653659\/\"> https:\/\/habr.com\/ru\/post\/653659\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u044b\u0432\u0430\u0435\u0442 \u0442\u044f\u0436\u0435\u043b\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0440\u0435\u0436\u043d\u044e\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u041c\u043d\u0435 \u0432 \u044d\u0442\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u043e\u043c\u043e\u0433\u043b\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438 \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0441\u0435\u0431\u0435 <a href=\"https:\/\/hackernoon.com\/building-an-arduino-time-tracker-cube-with-toggls-open-api\" rel=\"noopener noreferrer nofollow\"><u>\u0442\u0430\u0439\u043c \u0442\u0440\u0435\u043a\u0435\u0440 \u043a\u0443\u0431<\/u><\/a>. \u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u043a\u0443\u0431\u0430 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0442\u043e\u0442 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0432\u0438\u0434 \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0417\u0430\u0442\u0435\u043c, \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0448\u0435\u0441\u0442\u0438 \u0441\u0442\u043e\u0440\u043e\u043d \u043a\u0443\u0431\u0430 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438 \u0440\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0422\u0430\u0439\u043c \u0442\u0440\u0435\u043a\u0435\u0440 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440 \u0441 12 \u0441\u0442\u043e\u0440\u043e\u043d\u0430\u043c\u0438. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438 \u0437\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0442\u0430\u0439\u043c \u0442\u0440\u0435\u043a\u0435\u0440 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0435\u0433\u043e API. <br \/>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0442\u0430\u0439\u043c \u0442\u0440\u0435\u043a\u0435\u0440\u0430 \u0434\u0430\u0435\u0442 \u043d\u0430\u043c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0431, \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u0443\u044e \u0438\u043b\u0438 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0442\u0440\u0435\u043a\u0435\u0440\u0430 \u0432 \u043b\u044e\u0431\u043e\u0439 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. \u041d\u0430\u043c \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0434 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e \u043d\u0430\u0448\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0436\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u043e\u0442\u0447\u0435\u0442\u044b \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0410 \u043d\u0430\u0448 \u0442\u0440\u0435\u043a\u0435\u0440 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440 \u0441\u043b\u0443\u0436\u0438\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u043a\u043e \u0432\u0441\u0435\u043c\u0443 \u044d\u0442\u043e\u043c\u0443. <a href=\"https:\/\/github.com\/sultanbekuly\/time_tracker_dodecahedron\" rel=\"noopener noreferrer nofollow\"><u>\u0421\u0441\u044b\u043b\u043a\u0430<\/u><\/a> \u043d\u0430 github \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u043c\u043e\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0433\u0434\u0435 \u043b\u0435\u0436\u0438\u0442 \u0432\u0435\u0441\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u043a\u043e\u0434. \u041d\u0438\u0436\u0435 \u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u043c \u043d\u0430\u043a\u043b\u043e\u043d\u0430, \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043b\u0435\u0436\u0438\u0442 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Toggl Track \u0438 \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0435\u0433\u043e API \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u0434\u0430\u043d\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u043c\u043e\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/hackernoon.com\/building-an-arduino-time-tracker-cube-with-toggls-open-api\" rel=\"noopener noreferrer nofollow\"><u>\u0442\u0430\u0439\u043c \u0442\u0440\u0435\u043a\u0435\u0440 \u043a\u0443\u0431<\/u><\/a> \u0434\u043b\u044f \u043e\u0431\u0449\u0435\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u043e\u0431\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442:<\/p>\n<ul>\n<li>\n<p>\u0420\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043b\u0435\u0436\u0438\u0442 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440.\u00a0<\/p>\n<\/li>\n<li>\n<p>\u0423\u043c\u043d\u043e\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a Wi-Fi.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0434\u0430\u0442\u0447\u0438\u043a MPU6050, \u0410\u0440\u0434\u0443\u0438\u043d\u043e \u0438 Wi-Fi \u043c\u043e\u0434\u0443\u043b\u044c. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 NodeMCU, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0442\u0440\u043e\u0435\u043d Wi-Fi \u043c\u043e\u0434\u0443\u043b\u044c. \u041d\u043e \u0432\u0441\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u0430 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0410\u0440\u0434\u0443\u0438\u043d\u043e \u0441 ESP8266.\u00a0<\/p>\n<h3>\u0420\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043b\u0435\u0436\u0438\u0442 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440<\/h3>\n<h4>MPU6050<\/h4>\n<p>\u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0430\u0442\u0447\u0438\u043a MPU6050. \u041e\u043d \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 3-\u0445 \u043e\u0441\u0435\u0432\u043e\u0439 \u0433\u0438\u0440\u043e\u0441\u043a\u043e\u043f \u0438 3-\u0445 \u043e\u0441\u0435\u0432\u043e\u0439 \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440 \u0432 \u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0440\u043f\u0443\u0441\u0435. \u041e\u043d \u0438\u043c\u0435\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 I2C, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u0410\u0440\u0434\u0443\u0438\u043d\u043e: A5\u200a\u2014\u200aSCL, A4\u200a\u2014\u200aSDA, 5V\u2014VCC \u0438 GND\u200a\u2014\u200aGND; \u0434\u043b\u044f NodeMCU: D1\u2014 SCL, D2\u200a\u2014\u200aSDA, 3.3V\u2014 VCC \u0438 GND\u200a\u2014\u200aGND.<\/p>\n<h4>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u0430<\/h4>\n<p>\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u043e\u0442\u043a\u0440\u044b\u0432 serial monitor \u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0432 baud rate \u043d\u0430 9600, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u044b\u0440\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0433\u0438\u0440\u043e\u0441\u043a\u043e\u043f\u0430 \u0438 \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u0430.<\/p>\n<pre><code>#include \"Wire.h\" #include \"I2Cdev.h\" #include \"MPU6050.h\" MPU6050 mpu; int16_t ax, ay, az; int16_t gx, gy, gz; void setup() {   Wire.begin();   Serial.begin(9600);   mpu.initialize();   \/\/connection status   Serial.println(mpu.testConnection() ? \"MPU6050 OK\" : \"MPU6050 FAIL\");   delay(1000); } void loop() {   mpu.getMotion6(&amp;ax, &amp;ay, &amp;az, &amp;gx, &amp;gy, &amp;gz);   Serial.print(ax); Serial.print('\\t');   Serial.print(ay); Serial.print('\\t');   Serial.print(az); Serial.print('\\t');   Serial.print(gx); Serial.print('\\t');   Serial.print(gy); Serial.print('\\t');   Serial.println(gz);   delay(50); }<\/code><\/pre>\n<p>\u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u043e\u043a\u0440\u0443\u0442\u0438\u0442\u044c, \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u043c \u0438 \u043f\u043e\u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0437\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438.<\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 -32768 \u0434\u043e 32767. \u0414\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043a\u043e\u0440\u043e\u0447\u0435 (-100 \u2026 100) \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 327. \u0422\u0430\u043a\u0436\u0435, \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043b\u0435\u0436\u0438\u0442 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440, \u043d\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u0430. \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0430\u0434\u0435\u043d\u0438\u044f &#8212; \u0433\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u044e \u0417\u0435\u043c\u043b\u0438.<\/p>\n<pre><code>Serial.print(ax\/327); Serial.print('\\t'); Serial.print(ay\/327); Serial.print('\\t'); Serial.print(az\/327); Serial.print('\\t'); Serial.println(\"\"); delay(50);<\/code><\/pre>\n<h4>\u0414\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440<\/h4>\n<figure class=\"float full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c, \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043b\u0435\u0436\u0438\u0442 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440, \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0441\u0430\u043c \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u043d\u0430 \u043a\u0430\u0440\u0442\u043e\u043d\u0435 \u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c <a href=\"https:\/\/pikabu.ru\/story\/kak_sdelat_dodekayedr_iz_kartona_5630417\" rel=\"noopener noreferrer nofollow\"><u>\u0434\u0430\u043d\u043d\u043e\u0435 \u043e\u0440\u0438\u0433\u0430\u043c\u0438<\/u><\/a>.\u00a0<\/p>\n<figure class=\"float full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044e \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043b\u0435\u0436\u0438\u0442 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440.<br \/>\u041e\u0431\u0449\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430: \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0441 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f\u043c\u0438 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u043f\u043e \u0442\u0440\u0435\u043c \u043e\u0441\u044f\u043c \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u0430 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440\u0430, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u0432\u0435\u0440\u044f\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f\u043c\u0438 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e \u043b\u0438 \u043b\u0435\u0436\u0438\u0442 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438.<\/p>\n<p>Epsilon &#8212; \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u043f\u0440\u0438 \u0441\u0432\u0435\u0440\u043a\u0435.<\/p>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u0441 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f\u043c\u0438 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u043f\u043e \u0442\u0440\u0435\u043c \u043e\u0441\u044f\u043c \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u0430 (x, y, z) \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440\u0430:<\/p>\n<pre><code>int16_t epsilon = 6; const int side_values[12][3] = {   {-2,    0,  46},   {21,  -38,  21},   {-29, -32,  20},   {-40,  18,  17},   {5,    44,  19},   {43,    7,  21},   {2,     0, -54},   {-42,  -8, -29},   {-4,  -44, -27},   {40,  -19, -25},   {32,   31, -27},   {-19,  38, -27} };<\/code><\/pre>\n<p>\u0421\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c side_values \u0438 \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043b\u0435\u0436\u0438\u0442 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440:<\/p>\n<pre><code>int dodecahedron_side = get_dodecahedron_side(ax\/327, ay\/327, az\/327);  int get_dodecahedron_side(int16_t ax, int16_t ay, int16_t az){    \/\/return the dedocahedron side 0-11, else -2   for(int i=0; i&lt;12; i++){     if((side_values[i][0]-epsilon &lt; ax &amp;&amp; ax &lt; side_values[i][0]+epsilon) &amp;&amp;        (side_values[i][1]-epsilon &lt; ay &amp;&amp; ay &lt; side_values[i][1]+epsilon) &amp;&amp;        (side_values[i][2]-epsilon &lt; az &amp;&amp; az &lt; side_values[i][2]+epsilon)){\/\/44 &lt; 50 &lt; 66         return i;     }    }   return -2; };<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u043e\u0433\u043e, \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e \u043b\u0438 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440 \u043b\u0435\u0436\u0438\u0442 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u043b\u0435\u0436\u0438\u0442 \u043b\u0438 \u043e\u043d \u0442\u0440\u0438 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438. \u041f\u0435\u0440\u0435\u0440\u044b\u0432 \u043c\u0435\u0436\u0434\u0443 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435\u043c 50 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434. \u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0432 3 \u0441\u0435\u043a\u0443\u043d\u0434\u044b (3000 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434) \u043d\u0430 50 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434, \u043f\u043e\u043b\u0443\u0447\u0438\u043c 60.\u00a0<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a, \u0433\u0434\u0435 \u0431\u0443\u0434\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 60 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c -1 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435:<\/p>\n<pre><code>int last_60_measurements[60] = {}; for(int i=0; i&lt;60; i++){ last_60_measurements[i]=-1;}<\/code><\/pre>\n<p>\u0421\u0434\u0432\u0438\u0433\u0430\u0435\u043c \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (dodecahedron_side):<\/p>\n<pre><code>for (int i=0;i&lt;59;i++){     last_60_measurements[i]=last_60_measurements[i+1];\/\/0=1,1=2..   } last_60_measurements[59] = dodecahedron_side;<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u043b\u0438 \u0432\u0441\u0435 60 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430:<\/p>\n<pre><code>if(checkIfCubeStable(last_60_measurements)){   Serial.print(\"Stable position\"); Serial.print('\\t'); }  bool checkIfCubeStable(int measurements[]){   for (int i=0;i&lt;60;i++){     if(i==59){return true;};     if(measurements[i] != measurements[i+1]){return false;};   } }<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0436\u0435, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u043d\u0430\u0447\u0430\u0442\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0430\u0439\u043c\u0435\u0440 \u0437\u0430\u043d\u043e\u0432\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0441\u044f \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0441\u043c\u0435\u043d\u0438\u0442\u0441\u044f \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043e\u0434\u0435\u043a\u0430\u044d\u0434\u0440\u0430.<\/p>\n<pre><code>int sent_dodecahedron_side = -1;  if(sent_dodecahedron_side!=dodecahedron_side){   Serial.print(\"SEND DATA!\"); Serial.print('\\t');   sent_dodecahedron_side = dodecahedron_side; } <\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0447\u0430\u0442\u044c \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0442\u0440\u0435\u043a\u0435\u0440).<\/p>\n<h3>\u041a\u0440\u0430\u0442\u043a\u043e \u043f\u0440\u043e Toggl Track<\/h3>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u044b \u0432 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0432\u044b \u0443\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u043b\u0438 \u0441\u043b\u044b\u0448\u0430\u0442\u044c \u043e\u00a0 <a href=\"https:\/\/track.toggl.com\/timer\" rel=\"noopener noreferrer nofollow\"><u>Toggl Track<\/u><\/a>. \u042d\u0442\u043e \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u0434\u043b\u044f iOS, Android, macOS, Windows, Linux \u0438 \u0432\u0435\u0431-\u0432\u0435\u0440\u0441\u0438\u0435\u0439. \u041d\u043e \u0441\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0434\u043b\u044f \u043d\u0430\u0441 &#8212; \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u043e\u0442\u043a\u0440\u044b\u0442\u0430\u044f <a href=\"https:\/\/github.com\/toggl\/toggl_api_docs\" rel=\"noopener noreferrer nofollow\"><u>\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043f\u043e \u0435\u0433\u043e API<\/u><\/a>.<\/p>\n<h3>Toggl track API<\/h3>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Toggl track API \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u043c\u0435\u0442\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0437\u043d\u0430\u0442\u044c e-mail \u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u043e\u0442 \u043d\u0435\u0433\u043e. \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0438\u0436\u0435.<\/p>\n<p>\u0412 Toggl track \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 HTTPS POST \u0437\u0430\u043f\u0440\u043e\u0441\u044b.<br \/>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u043e \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b. \u041c\u044b \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438: \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0441 \u0421url (\u0432 macOS \u0438 Windows 10 (\u0432\u0435\u0440\u0441\u0438\u044f 1803 \u0438 \u0432\u044b\u0448\u0435)) \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u0437 <a href=\"https:\/\/reqbin.com\/curl\" rel=\"noopener noreferrer nofollow\"><u>\u0441\u0430\u0439\u0442\u043e\u0432<\/u><\/a> \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Curl \u043a\u043e\u043c\u0430\u043d\u0434 \u043e\u043d\u043b\u0430\u0439\u043d.<\/p>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0443\u0437\u043d\u0430\u0442\u044c workspaces id, \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"bash\">curl -v -u email:password -X GET https:\/\/api.track.toggl.com\/api\/v8\/me<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u0430\u043a\u043e\u0439 \u043e\u0442\u0432\u0435\u0442:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>{   \"since\":1361780172,   \"data\": {     \"id\":123,     \"api_token\":\"1971800d4d82861d8f2c1651fea4d212\",     \"default_wid\":777,     \"email\":\"john.doe@gmail.com\",     \"fullname\":\"John Doe\",     \"jquery_timeofday_format\":\"h:i A\",     \"jquery_date_format\":\"m\/d\/Y\",     \"timeofday_format\":\"h:mm A\",     \"date_format\":\"MM\/DD\/YYYY\",     \"store_start_and_stop_time\":true,     \"beginning_of_week\":1,     \"language\":\"en_US\",     \"duration_format\": \"improved\",     \"image_url\":\"https:\/\/www.toggl.com\/images\/profile.png\",     \"at\": \"2015-02-17T16:58:53+00:00\",     \"created_at\": \"2014-07-31T07:51:17+00:00\",     \"timezone\": \"Europe\/London\",     \"retention\": 9,     \"new_blog_post\":{},     \"projects\": [       {         \"id\":90123,         \"wid\":777,         \"name\":\"Our best project\",         \"billable\":true,         \"active\":true,         \"at\":\"2013-02-12T09:47:57+00:00\",         \"color\":\"5\"       }     ],     \"tags\": [       {         \"id\":238526,         \"wid\":777,         \"name\":\"billed\"       }     ],     \"tasks\": [],     \"workspaces\": [       {         \"id\":777,         \"name\":\"John's WS\",         \"at\":\"2012-11-28T11:56:49+00:00\",         \"default_hourly_rate\": 0,         \"default_currency\": \"USD\",         \"projects_billable_by_default\": true,         \"rounding\": 1,         \"rounding_minutes\": 0,         \"api_token\": \"ea897...\"       }     ],     \"clients\": [] }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0443\u0437\u043d\u0430\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 (\u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0435\u0441\u0442\u044c), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0422\u0430\u043a\u0436\u0435, \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u0442\u0440\u0435\u043a\u0435\u0440 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438 \u0431\u0435\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<pre><code>curl -v -u email:password -X GET https:\/\/api.track.toggl.com\/api\/v8\/workspaces\/WORKSPACE_ID\/projects<\/code><\/pre>\n<p>\u0438 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0437\u0430\u043f\u0443\u0441\u043a \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438:<\/p>\n<pre><code>curl -v -u email:password  -H \"Content-Type: application\/json\"  -d '{\"time_entry\":{\"description\":\"Description goes here\",\"tags\":[],\"pid\":PROJECT_ID,\"created_with\":\"curl\"}}'  -X POST https:\/\/api.track.toggl.com\/api\/v8\/time_entries\/start<\/code><\/pre>\n<p>\u041d\u0430 \u0410\u0440\u0434\u0443\u0438\u043d\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c HTTPS \u043a\u043e\u043c\u0430\u043d\u0434\u044b.\u00a0 \u041d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Curl \u043a\u043e\u043c\u0430\u043d\u0434 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0436\u0430\u0442\u044c \u043d\u0430 HTTP \u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0442\u043e\u0442 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0430 \u0410\u0440\u0434\u0443\u0438\u043d\u043e.<\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \/ \u0417\u0430\u043f\u0443\u0441\u043a \u0442\u0440\u0435\u043a\u0435\u0440\u0430<\/h3>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a:<\/p>\n<pre><code>#include &lt;ESP8266WiFi.h> #include &lt;WiFiClientSecure.h> #include &lt;ESP8266WebServer.h> #include &lt;ESP8266HTTPClient.h><\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u0443 \u043d\u0430\u0441 \u0443\u043c\u043d\u043e\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a Wi-Fi. \u0415\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0439 \u0441\u0435\u0442\u0435\u0439 \u0438 \u043f\u0430\u0440\u043e\u043b\u0435\u0439 \u043e\u0442 \u043d\u0438\u0445. \u0423\u0434\u043e\u0431\u043d\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b, \u043a\u0430\u043a \u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043d\u043e\u0441\u0438\u0442\u0435 \u0441 \u0441\u043e\u0431\u043e\u0439 \u0442\u0430\u0439\u043c \u0442\u0440\u0435\u043a\u0435\u0440. <\/p>\n<pre><code>String ssid_list[] =      {\"Network_Name_1\",  \"Network_Name_2\", \"Network_Name_3\"}; \/\/Wifi Network Name String password_list[] =  {\"Network_Key_1\",   \"Network_Key_2\",  \"Network_Key_3\"};  \/\/Wifi Network Key  void setup() { Wire.begin(); Serial.begin(9600); \/\/smart wifi connection<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-330160","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/330160","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=330160"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/330160\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=330160"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=330160"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=330160"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}