{"product_id":"2-axis-analog-joystick-module-with-push-button-ky-023-compatible-arduino-esp32-stm32","title":"2-Axis Analog Joystick Module with Push Button | KY-023 Compatible | Arduino, ESP32 \u0026 STM32","description":"\u003cbody\u003e\n\u003cmeta class=\"page-width\" name=\"viewport\"\u003e\n\u003cstyle\u003e\nbody {letter-spacing: 0.06rem;\n    line-height: calc(1 + 0.8 \/ var(--font-body-scale));\n    font-family: var(--font-body-family);\n    font-style: var(--font-body-style);\n    font-weight: var(--font-body-weight);}\n\n\/* Style the tab *\/\n.tab {\n  overflow: hidden;\n  border: 1px solid #ccc;\n  background-color: #cae3ff;\n  border-radius: 10px;\n}\n\n\/* Style the buttons inside the tab *\/\n.tab button {\n  background-color: inherit;\n  float: left;\n  border: none;\n  outline: none;\n  cursor: pointer;\n  padding: 14px 16px;\n  transition: 0.3s;\n  font-size: 17px;\n}\n\n\/* Change background color of buttons on hover *\/\n.tab button:hover {\n  background-color: #ddd;\n}\n\n\/* Create an active\/current tablink class *\/\n.tab button.active {\n  background-color: #ccc;\n  font-weight: bold;\n}\n\n\/* Style the tab content *\/\n.tabcontent {\n  padding: 6px 12px;\n  border-top: none;\n  border-radius: 10px;\n}\n\n.accordion {\n  background-color: #cae3ff;\n  color: #444;\n  cursor: pointer;\n  padding: 18px;\n  width: 100%;\n  border: none;\n  text-align: left;\n  outline: none;\n  font-size: 15px;\n  transition: 0.4s;\n}\n\n.active, .accordion:hover {\n  background-color: #ccc;\n}\n\n.accordion:after {\n  content: '\\002B';\n  color: #777;\n  font-weight: bold;\n  float: right;\n  margin-left: 5px;\n}\n\n.panel {\n  padding: 0 18px;\n  background-color: white;\n  max-height: 0;\n  overflow: hidden;\n  transition: max-height 0.2s ease-out;\n}\n\n\n\u003c\/style\u003e\n\u003cdiv class=\"tab\"\u003e\n\u003cbutton class=\"tablinks\" id=\"defaultOpen\" onclick=\"opentab(event, 'Description')\"\u003eDescription\u003c\/button\u003e \n\u003cbutton class=\"tablinks\" onclick=\"opentab(event, 'Specifications')\"\u003eSpecifications\u003c\/button\u003e\n\u003cbutton class=\"tablinks\" onclick=\"opentab(event, 'Box Content')\"\u003eBox Content\u003c\/button\u003e\n\u003cbutton class=\"tablinks\" onclick=\"opentab(event, 'Downloads')\"\u003eDownloads\u003c\/button\u003e \n\u003cbutton class=\"tablinks\" onclick=\"opentab(event, 'More Info')\"\u003eMore Info\u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"tabcontent product-info-border_description\" id=\"Description\"\u003e\n\n\u003cp\u003eThe 2-Axis Analog Joystick Module is a compact input device designed for Arduino, STM32, ESP32, Raspberry Pi, and other microcontroller platforms. It provides two analog outputs for X and Y axis movement along with a built-in push button, making it ideal for robotics, gaming controllers, menu navigation, and interactive embedded applications.\u003c\/p\u003e\n\n\u003cp\u003eThe module uses two high-quality 10K potentiometers to detect horizontal and vertical movement, producing analog voltage outputs that can be read using the ADC channels of a microcontroller. Pressing the joystick activates the integrated tactile switch, providing a digital button input without requiring any additional hardware.\u003c\/p\u003e\n\n\u003cp\u003eDesigned for easy prototyping, the module operates from both 3.3V and 5V supplies and features a standard 5-pin interface for quick connection to development boards. Its compact PCB and mounting holes make it suitable for breadboards as well as permanent embedded projects.\u003c\/p\u003e\n\n\u003cp\u003eThe joystick module is fully compatible with Arduino IDE, STM32CubeIDE, PlatformIO, ESP-IDF, MicroPython, and other popular embedded development environments. It can be interfaced using simple ADC readings and a digital GPIO input, making it an excellent choice for beginners as well as professional developers.\u003c\/p\u003e\n\n\u003ch2\u003eFeatures:\u003c\/h2\u003e\n\n\u003cul\u003e\n\n\u003cli\u003eDual-axis analog joystick with X and Y position outputs\u003c\/li\u003e\n\n\u003cli\u003eIntegrated push-button switch for digital input\u003c\/li\u003e\n\n\u003cli\u003eCompatible with both 3.3V and 5V systems\u003c\/li\u003e\n\n\u003cli\u003eHigh-quality 10K potentiometers for smooth and accurate movement detection\u003c\/li\u003e\n\n\u003cli\u003eProvides two analog outputs and one digital switch output\u003c\/li\u003e\n\n\u003cli\u003eStandard 2.54mm pin spacing for easy breadboard compatibility\u003c\/li\u003e\n\n\u003cli\u003eCompact PCB with mounting holes for secure installation\u003c\/li\u003e\n\n\u003cli\u003eSimple interface requiring only two ADC channels and one GPIO pin\u003c\/li\u003e\n\n\u003cli\u003eLow power consumption suitable for battery-powered projects\u003c\/li\u003e\n\n\u003cli\u003eCompatible with Arduino, STM32, ESP32, Raspberry Pi, AVR, PIC and other microcontrollers\u003c\/li\u003e\n\n\u003c\/ul\u003e\n\n\u003ch2\u003eApplications:\u003c\/h2\u003e\n\n\u003cul\u003e\n\n\u003cli\u003eRobot and robotic arm control\u003c\/li\u003e\n\n\u003cli\u003eRemote-controlled vehicles\u003c\/li\u003e\n\n\u003cli\u003eGame controllers and DIY gaming consoles\u003c\/li\u003e\n\n\u003cli\u003eCamera pan and tilt control systems\u003c\/li\u003e\n\n\u003cli\u003eMenu navigation for embedded displays\u003c\/li\u003e\n\n\u003cli\u003eServo motor control\u003c\/li\u003e\n\n\u003cli\u003eHuman-machine interface (HMI) projects\u003c\/li\u003e\n\n\u003cli\u003eEducational and STEM learning projects\u003c\/li\u003e\n\n\u003c\/ul\u003e\n\n\u003cp\u003e \u003c\/p\u003e\n\n\u003c\/div\u003e\n\n\u003cdiv id=\"Specifications\" class=\"tabcontent tabcontent product-info-border_description\"\u003e\n\n\u003cstyle\u003e\ntable {\n  font-family: var(--font-body-family);\n  font-style: var(--font-body-style);\n  font-weight: var(--font-body-weight);\n  border-collapse: collapse;\n  width: 100%;\n}\n\ntd, th {\n  border: 1px solid #dddddd;\n  text-align: center;\n  padding: 8px;\n}\n\ntr:nth-child(odd) {\n  background-color: #cae3ff;\n}\n\n.tdbold { font-weight: Bold; }\n\n\u003c\/style\u003e\n\n\n\n\u003ctable\u003e\n\n\u003ctbody\u003e\n\n\u003ctr\u003e\n\u003ctd class=\"tdbold\"\u003eProduct Type\u003c\/td\u003e\n\u003ctd class=\"tdbold\"\u003e2-Axis Analog Joystick Module\u003c\/td\u003e\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\u003ctd class=\"tdbold\"\u003eOperating Voltage\u003c\/td\u003e\n\u003ctd class=\"tdbold\"\u003e3.3V – 5V DC\u003c\/td\u003e\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\u003ctd class=\"tdbold\"\u003eOperating Current\u003c\/td\u003e\n\u003ctd class=\"tdbold\"\u003eTypically \u0026lt; 10mA\u003c\/td\u003e\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\u003ctd class=\"tdbold\"\u003eX-Axis Output\u003c\/td\u003e\n\u003ctd class=\"tdbold\"\u003eAnalog Voltage (VRx)\u003c\/td\u003e\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\u003ctd class=\"tdbold\"\u003eY-Axis Output\u003c\/td\u003e\n\u003ctd class=\"tdbold\"\u003eAnalog Voltage (VRy)\u003c\/td\u003e\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\u003ctd class=\"tdbold\"\u003eSwitch Output\u003c\/td\u003e\n\u003ctd class=\"tdbold\"\u003eDigital Push Button (SW)\u003c\/td\u003e\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\u003ctd class=\"tdbold\"\u003ePotentiometer Value\u003c\/td\u003e\n\u003ctd class=\"tdbold\"\u003e2 × 10KΩ\u003c\/td\u003e\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\u003ctd class=\"tdbold\"\u003eInterface\u003c\/td\u003e\n\u003ctd class=\"tdbold\"\u003e5-Pin Header (VCC, GND, VRx, VRy, SW)\u003c\/td\u003e\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\u003ctd class=\"tdbold\"\u003eOutput Type\u003c\/td\u003e\n\u003ctd class=\"tdbold\"\u003e2 Analog Outputs + 1 Digital Output\u003c\/td\u003e\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\u003ctd class=\"tdbold\"\u003eCompatible Logic Levels\u003c\/td\u003e\n\u003ctd class=\"tdbold\"\u003e3.3V and 5V\u003c\/td\u003e\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\u003ctd class=\"tdbold\"\u003eCompatible Boards\u003c\/td\u003e\n\u003ctd class=\"tdbold\"\u003eArduino, STM32, ESP32, ESP8266, Raspberry Pi, AVR, PIC and other microcontrollers\u003c\/td\u003e\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\u003ctd class=\"tdbold\"\u003eMounting\u003c\/td\u003e\n\u003ctd class=\"tdbold\"\u003ePCB Mounting Holes\u003c\/td\u003e\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\u003ctd class=\"tdbold\"\u003eProduct Dimensions\u003c\/td\u003e\n\u003ctd class=\"tdbold\"\u003eApproximately 34 × 26 × 32 mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\n\u003ctr\u003e\n\u003ctd class=\"tdbold\"\u003eProduct Weight\u003c\/td\u003e\n\u003ctd class=\"tdbold\"\u003eApproximately 12 grams\u003c\/td\u003e\n\u003c\/tr\u003e\n\n\u003c\/tbody\u003e\n\n\u003c\/table\u003e\n\n\u003c\/div\u003e\n\n\u003cdiv class=\"tabcontent tabcontent product-info-border_description\" id=\"Downloads\"\u003e\n\n\u003cbutton class=\"accordion\"\u003e\u003cspan style=\"text-decoration: underline; font-size: 25px; font-weight: bold;\"\u003eTutorials\u003c\/span\u003e\u003c\/button\u003e\n\n\u003cdiv class=\"panel\"\u003e\n\n\u003ch3\u003e\u003ca href=\"https:\/\/controllerstech.com\/stm32-adc-single-channel-polling\/\" target=\"_blank\"\u003eRead Analog Joystick using STM32 ADC\u003c\/a\u003e\u003c\/h3\u003e\n\n\u003ch3\u003e\u003ca href=\"https:\/\/controllerstech.com\/esp32-8-how-to-use-adc-part1\/\" target=\"_blank\"\u003eRead Analog Inputs using ESP32 ADC\u003c\/a\u003e\u003c\/h3\u003e\n\n\u003ch3\u003e\u003ca href=\"https:\/\/controllerstech.com\/arduino-pwm-analogwrite-tutorial\/\" target=\"_blank\"\u003eArduino Analog Input Tutorial\u003c\/a\u003e\u003c\/h3\u003e\n\n\u003c\/div\u003e\n\n\u003cp\u003e \u003c\/p\u003e\n\n\u003cscript\u003e\n\nvar acc = document.getElementsByClassName(\"accordion\");\nvar i;\n\nfor (i = 0; i \u003c acc.length; i++) {\n  acc[i].addEventListener(\"click\", function() {\n    this.classList.toggle(\"active\");\n    var panel = this.nextElementSibling;\n    if (panel.style.maxHeight) {\n      panel.style.maxHeight = null;\n    } else {\n      panel.style.maxHeight = panel.scrollHeight + \"px\";\n    }\n  });\n}\n\n\u003c\/script\u003e\n\n\u003c\/div\u003e\n\n\u003cdiv class=\"tabcontent product-info-border_description\" id=\"More Info\"\u003e\n\n\u003cp\u003e\u003cstrong\u003eCountry of Origin :\u003c\/strong\u003e China\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eOperating Voltage:\u003c\/strong\u003e 3.3V - 5V DC\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eHSN Code:\u003c\/strong\u003e 84733099\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong style=\"background-color:red;color:white;\"\u003eNote:\u003c\/strong\u003e The joystick cap is pre-installed on the module and ready to use.\u003c\/p\u003e\n\n\u003c\/div\u003e\n\n\u003cdiv class=\"tabcontent product-info-border_description\" id=\"Box Content\"\u003e\n\n\u003ch3\u003e\u003cstrong\u003e\n\u003cul\u003e\n\u003cli\u003e1 × 2-Axis Analog Joystick Module\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/strong\u003e\u003c\/h3\u003e\n\n\u003c\/div\u003e\n\n\u003cscript\u003e\nfunction opentab(evt, name) {\n  var i, tabcontent, tablinks;\n  tabcontent = document.getElementsByClassName(\"tabcontent\");\n  for (i = 0; i \u003c tabcontent.length; i++) {\n    tabcontent[i].style.display = \"none\";\n  }\n  tablinks = document.getElementsByClassName(\"tablinks\");\n  for (i = 0; i \u003c tablinks.length; i++) {\n    tablinks[i].className = tablinks[i].className.replace(\" active\", \"\");\n  }\n  document.getElementById(name).style.display = \"block\";\n  evt.currentTarget.className += \" active\";\n}\ndocument.getElementById(\"defaultOpen\").click();\n\u003c\/script\u003e\n\u003c\/body\u003e","brand":"ControllersTech®","offers":[{"title":"Default Title","offer_id":52666318225695,"sku":"CT-0200","price":40.0,"currency_code":"INR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0798\/6901\/8399\/files\/HTB1X8JDNFXXXXXlXFXX760XFXXX6.png?v=1783613888","url":"https:\/\/shop.controllerstech.com\/products\/2-axis-analog-joystick-module-with-push-button-ky-023-compatible-arduino-esp32-stm32","provider":"ControllersTech®","version":"1.0","type":"link"}