I'm writing a micro-ROS subscriber for the sensor_msgs/msg/Joy message type, running on an ESP32 board. I'm trying to display characters on the serial monitor of the Arduino IDE in response to the Dualshock4 input, but nothing is displayed. micro-ROS-Agent is functioning and the joy topic is subscribed. [![enter image description here][1]][1] Is there a solution? Thank you. The following is the source code written to ESP32. #include <Arduino.h> #include <micro_ros_arduino.h> #include <stdio.h> #include <rcl/rcl.h> #include <rcl/error_handling.h> #include <rclc/rclc.h> #include <rclc/executor.h> #include <sensor_msgs/msg/joy.h> #if !defined(ESP32) && !defined(TARGET_PORTENTA_H7_M7) && !defined(ARDUINO_NANO_RP2040_CONNECT) #error This example is only avaible for Arduino Portenta, Arduino Nano RP2040 Connect and ESP32 Dev module #endif rcl_subscription_t sub_joy; sensor_msgs__msg__Joy msg_joy; rclc_executor_t executor; #define LED_PIN 13 void error_loop(){ while(1){ digitalWrite(LED_PIN, !digitalRead(LED_PIN)); delay(100); } } void joy_callback(const void *msgin){ const sensor_msgs__msg__Joy *msg = (const sensor_msgs__msg__Joy *)msgin; if (msg->axes.data[6] > 0) { Serial.println("Left Pressed."); } else if (msg->axes.data[6] < 0) { Serial.println("Right Pressed."); } if (msg->axes.data[7] > 0) { Serial.println("Up Pressed."); } else if (msg->axes.data[7] < 0) { Serial.println("Down Pressed."); } if (msg->buttons.data[0] == 1) { Serial.println("Button X Pressed."); } if (msg->buttons.data[1] == 1) { Serial.println("Button O Pressed."); } if (msg->buttons.data[2] == 1) { Serial.println("Button ^ Pressed."); } if (msg->buttons.data[3] == 1) { Serial.println("Button [] Pressed."); } if (msg->buttons.data[4] == 1) { Serial.println("Button L1 Pressed."); } if (msg->buttons.data[5] == 1) { Serial.println("Button R1 Pressed."); } if (msg->buttons.data[6] == 1) { Serial.println("Button L2 Pressed."); } if (msg->buttons.data[7] == 1) { Serial.println("Button R2 Pressed."); } } void setup(){ Serial.begin(115200); set_microros_wifi_transports("SSID", "PASSWORD", "IP", 8888); pinMode(LED_PIN, OUTPUT); delay(2000); // Initialize micro-ROS allocator rcl_allocator_t allocator = rcl_get_default_allocator(); // Initialize and modify options size_t domain_id = 0; rcl_init_options_t init_options = rcl_get_zero_initialized_init_options(); rcl_init_options_init(&init_options, allocator); rcl_init_options_set_domain_id(&init_options, domain_id); // Initialize rclc support object with custom options rclc_support_t support; rclc_support_init_with_options(&support, 0, NULL, &init_options, &allocator); // Create node object rcl_node_t node; const char * node_name = "esp32"; // Init node with configured support object (Node namespace is empty now.) rclc_node_init_default(&node, node_name, "", &support); // Create subscriber const rmw_qos_profile_t * qos_profile_sub = &rmw_qos_profile_sensor_data; // Set Subscriber QoS rclc_subscription_init( &sub_joy, &node, ROSIDL_GET_MSG_TYPE_SUPPORT(sensor_msgs, msg, Joy), "joy", qos_profile_sub); // Set executor int callback_size = 1; executor = rclc_executor_get_zero_initialized_executor(); rclc_executor_init(&executor, &support.context, callback_size, &allocator); rclc_executor_add_subscription(&executor, &sub_joy, &msg_joy, &joy_callback, ON_NEW_DATA); Serial.println("setup() Finished."); } void loop(){ rclc_executor_spin_some(&executor, RCL_MS_TO_NS(100)); } Update date: Oct 3rd,2024 After I press the reset button on the ESP32, it shows continuous messages on the agent. However, nothing's changed. [![enter image description here][2]][2] [1]: https://i.sstatic.net/wzwD8KY8.png [2]: https://i.sstatic.net/A9jRNU8J.png