{"id":20147370,"url":"https://github.com/gdsports/imu-wifi","last_synced_at":"2025-04-09T19:40:22.562Z","repository":{"id":62682115,"uuid":"102531512","full_name":"gdsports/imu-wifi","owner":"gdsports","description":"Send IMU orientation data over WiFi","archived":false,"fork":false,"pushed_at":"2018-06-15T04:24:23.000Z","size":53,"stargazers_count":24,"open_issues_count":0,"forks_count":6,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-23T21:35:44.644Z","etag":null,"topics":["arduino","bno055","esp8266","imu","mpu6050","p5js","processing"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gdsports.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-09-05T21:28:45.000Z","updated_at":"2025-01-09T01:10:39.000Z","dependencies_parsed_at":"2022-11-04T12:17:53.257Z","dependency_job_id":null,"html_url":"https://github.com/gdsports/imu-wifi","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gdsports%2Fimu-wifi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gdsports%2Fimu-wifi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gdsports%2Fimu-wifi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gdsports%2Fimu-wifi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gdsports","download_url":"https://codeload.github.com/gdsports/imu-wifi/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248100156,"owners_count":21047748,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arduino","bno055","esp8266","imu","mpu6050","p5js","processing"],"created_at":"2024-11-13T22:28:45.758Z","updated_at":"2025-04-09T19:40:22.547Z","avatar_url":"https://github.com/gdsports.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WiFi IMU to 3D display\n\n![3D airplane](./images/3dairplane.jpg)\n\nThis project is a wireless variation on the MPU6050 DMP Teapot demo. See the\nfollowing links for more details.\n\nhttps://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050/examples/MPU6050_DMP6\nhttp://www.geekmomprojects.com/mpu-6050-dmp-data-from-i2cdevlib/\n\nThe differences are 1) the BNO055 is used instead of the MPU6050 and 2) the\nArduino AVR board is replaced with an ESP8266 WiFi board running on battery so\nthe IMU is tether free.\n\nTwo different methods are covered. The first uses a program running on the\nESP8266 that sends IMU quaternion data in Open Sound Control (OSC) messages\nover UDP WiFi. The messages are received on a computer running Processing that\nrenders a 3D airplane.\n\nThe second uses a program running on the ESP8266 that is an HTTP server and web\nsocket server. When an HTTP client connects, the initial web page includes a\n[p5.js](https://p5js.org/) program which renders a 3D airplane. The ESP8266\nsends Euler angles over the web socket to the client. The advantages with this\nmethod are 1) more than one client can be connected at the same time, and 2) no\nsoftware is installed on the clients. The client can be any browser with WebGL\nrunning on any OS including IOS, Android, Win, Mac, and Linux. The ESP8266\nsupports web sockets so node.js and socket.io are not used.\n\nThe disadvantage is quaterion support is not available on p5.js so full 360\ndegree rotations do not work.\n\n## Hardware\n\n* Adafruit Huzzah ESP8266 Feather with battery\n* Adafruit BNO055 9DOF Fusion IMU breakout board\n\n## IMU to Processing using OSC messages\n\n### Arduino sketch for ESP8266\n\nThe ESP8266 sketch sends quaternion orientation data from the BNO055 using Open\nSound Control (OSC) over UDP WiFi. IMU calibration is supported. The web user\ninterface is still TBD and uses web sockets but IMU data is not sent via web\nsockets.\n\nIMU calibration is supported but it requires monitoring console output. In the\nfuture, calibration will be control via the web user interface.\n\n```\nimuosc/imuosc.ino               // Main program\n       bno055_calibrate.h       // Calibration functions\n       bno055_calibrate.ino\n       index_html.h             // index.html stored in array of char\n       sketch_js.h              // javascript stored in array of char\n```\n\n### Processing Teapot sketch (actually an airplane)\n\nThis program is a modified version of the MPUTeapot.pde demo included with the\n[i2cdevlib](https://www.i2cdevlib.com/) project. The serial port code has been\nreplaced with OSC over UDP WiFi. Although it was designed to work with the\nMPU6050 IMU, it works with quaternion data from any IMU. The sketch was tested\nusing [Processing 3.3.5](https://processing.org).\n\n`osc3d/osc3d.pde                 // Main program`\n\n## IMU to p5.js over web sockets\n\nThe main program consists of the HTTP server and web socket server. In addition\nprogram collects Euler angles from the BNO055 IMU then sends the angles over a\nweb socket to the HTTP client. The p5.js sketch in sketch_js.h runs on the\nbrowser and shows the 3D airplane.\n\nIMU calibration is supported but it requires monitoring console output. In the\nfuture, calibration will be control via the web user interface.\n\n```\nimup5/imup5.ino                 // Main program\n      bno055_calibrate.h        // Calibration functions\n      bno055_calibrate.ino\n      index_html.h              // index.html stored in array of char\n      sketch_js.h               // javascript stored in array of char\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgdsports%2Fimu-wifi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgdsports%2Fimu-wifi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgdsports%2Fimu-wifi/lists"}