{"id":5058,"date":"2026-08-30T04:40:32","date_gmt":"2026-08-29T19:40:32","guid":{"rendered":"https:\/\/donguri3.net\/server-tech\/raspberry-pi-zero-w-mbot-bluetooth-analog-controller-2\/"},"modified":"2026-08-30T04:40:34","modified_gmt":"2026-08-29T19:40:34","slug":"raspberry-pi-zero-w-mbot-bluetooth-analog-controller","status":"publish","type":"post","link":"https:\/\/donguri3.net\/en\/diy-repair\/electronics-microcontroller\/raspberry-pi-zero-w-mbot-bluetooth-analog-controller\/","title":{"rendered":"[With Technical Conformity Mark] Utilizing a Ultra-Cheap Bluetooth Analog Stick Controller"},"content":{"rendered":"<p>When trying to operate an mBot obtained through parallel import, it turned out that the Bluetooth module lacked the Technical Conformity Mark (Giteki), potentially violating Japan&#8217;s Radio Act. Therefore, we attempted to build a DIY &#8220;mBot-like&#8221; robot based on the Raspberry Pi Zero W, controlled by a Bluetooth controller bearing the Technical Conformity Mark. This article introduces the background and troubleshooting methods.<\/p>\n<h2>The Technical Conformity Mark Issue with the Purchased mBot<\/h2>\n<ul>\n<li>The parallel-imported mBot unit lacked the Technical Conformity Mark on its Bluetooth module.<\/li>\n<li>Using wireless equipment within Japan requires the Technical Standards Conformity Certification (Giteki).<\/li>\n<li>Continuing to use it as-is would violate the Radio Act, so we considered safer alternatives.<\/li>\n<\/ul>\n<h2>Building a DIY &#8220;mBot-like&#8221; Robot with Raspberry Pi Zero W<\/h2>\n<ul>\n<li>Since the Raspberry Pi Zero W comes with domestically certified Technical Conformity Marks, wireless communication can be used with peace of mind.<\/li>\n<li>We built a base system using Python + GPIO for motor control and accepting commands via Bluetooth.<\/li>\n<\/ul>\n<h2>Selecting a Bluetooth Controller<\/h2>\n<ul>\n<li>Looking for a controller with an analog stick that has the Technical Conformity Mark, we focused on ELECOM&#8217;s VR Remote Control.<\/li>\n<li>Despite being in the lowest price range, it is equipped with a D-pad, A\/B\/X\/Y buttons, and an analog stick, offering excellent cost performance.<\/li>\n<li>While Bluetooth controllers for gaming generally cost around 3,000 yen, the ELECOM VR Remote Control with an analog stick available for about 1,000 yen is a great deal.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/amzn.to\/3S3ZCV7\">ELECOM VR Remote Controller for Android Smartphones\/Tablets Bluetooth Smartphone [Android 5.0 or later] JC-XR05BK Black<\/a><\/p>\n<h2>Connection Verification of the ELECOM VR Remote Control<\/h2>\n<h3>Behavior During Initial Pairing<\/h3>\n<ul>\n<li>Performing pairing via bluetoothctl generated the following device nodes:\n<ul>\n<li>\/dev\/input\/event1<\/li>\n<li>\/dev\/input\/event2<\/li>\n<li>\/dev\/input\/event3<\/li>\n<div>\/dev\/input\/js0<\/div>\n<li>\/dev\/input\/mouse0<\/li>\n<\/ul>\n<\/li>\n<li>Among these, the analog stick axis values could be obtained from \/dev\/input\/event2, allowing us to map them and freely operate the robot.<\/li>\n<\/ul>\n<h3>Issues Upon Reboot and Automatic Reconnection<\/h3>\n<ul>\n<li>After turning the remote off and on again, allowing it to automatically reconnect resulted in only \/dev\/input\/event1 being generated.<\/li>\n<li>Consequently, no analog stick input could be obtained at all.<\/li>\n<\/ul>\n<h2>Cause and Temporary Countermeasure<\/h2>\n<ul>\n<li>We confirmed that Bluetooth profile caches affect reconnection, preventing the necessary HID nodes from being restored.<\/li>\n<li>Troubleshooting steps:\n<ol>\n<li>Remove the target device using bluetoothctl before automatic reconnection.<\/li>\n<li>Delete the entire cache directory:\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">sudo rm -rf \/var\/lib\/bluetooth\/&amp;lt;RPI\u5074\u306eMAC&amp;gt;\/cache\/&amp;lt;ELECOM\u5074\u306eMAC&amp;gt;<\/pre>\n<\/li>\n<li>Pair again using bluetoothctl.<\/li>\n<\/ol>\n<\/li>\n<li>This outputs \/dev\/input\/event2 just like the first time, restoring analog stick control.<\/li>\n<\/ul>\n<h2>Future Challenges<\/h2>\n<ul>\n<li>We are exploring a mechanism to eliminate the need for cache deletion even during automatic reconnection.<\/li>\n<li>We plan to verify whether reviewing udev rules and Bluetooth profile settings can bring up event2 without re-pairing.<\/li>\n<\/ul>\n<h2>Conclusion<\/h2>\n<p>As an alternative to the parallel-imported mBot without the Technical Conformity Mark, combining a Raspberry Pi Zero W with the Technical Conformity Mark and the ELECOM VR Remote Control allowed us to safely and inexpensively operate a DIY robot. Meanwhile, the issue of HID node restoration during automatic reconnection is bypassed by deleting the cache. Moving forward, we will work on improving reconnection reliability to aim for a more user-friendly system.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>When trying to operate an mBot obtained through parallel import, it turned out that the Bluetooth module lacke [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":1571,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"en_US","_original_post":"https:\/\/donguri3.net\/?p=1482","footnotes":""},"categories":[1163],"tags":[566,47,565,278],"class_list":["post-5058","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-electronics-microcontroller","tag-mbot","tag-python","tag-raspberry-pi-zero-w","tag-278","en-US"],"_links":{"self":[{"href":"https:\/\/donguri3.net\/wp-json\/wp\/v2\/posts\/5058","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/donguri3.net\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/donguri3.net\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/donguri3.net\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/donguri3.net\/wp-json\/wp\/v2\/comments?post=5058"}],"version-history":[{"count":1,"href":"https:\/\/donguri3.net\/wp-json\/wp\/v2\/posts\/5058\/revisions"}],"predecessor-version":[{"id":5061,"href":"https:\/\/donguri3.net\/wp-json\/wp\/v2\/posts\/5058\/revisions\/5061"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/donguri3.net\/wp-json\/wp\/v2\/media\/1571"}],"wp:attachment":[{"href":"https:\/\/donguri3.net\/wp-json\/wp\/v2\/media?parent=5058"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/donguri3.net\/wp-json\/wp\/v2\/categories?post=5058"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/donguri3.net\/wp-json\/wp\/v2\/tags?post=5058"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}