diff --git a/examples/micro-ros_publisher_ethernet/platformio.ini b/examples/micro-ros_publisher_ethernet/platformio.ini new file mode 100644 index 00000000..c39632ca --- /dev/null +++ b/examples/micro-ros_publisher_ethernet/platformio.ini @@ -0,0 +1,7 @@ +; [env:portenta_h7_m7] +; platform = ststm32 +; board = portenta_h7_m7 +framework = arduino +board_microros_transport = native_ethernet +lib_deps = + https://github.com/micro-ROS/micro_ros_platformio diff --git a/examples/micro-ros_publisher_ethernet/src/Main.cpp b/examples/micro-ros_publisher_ethernet/src/Main.cpp new file mode 100644 index 00000000..47921eb9 --- /dev/null +++ b/examples/micro-ros_publisher_ethernet/src/Main.cpp @@ -0,0 +1,68 @@ +// based on https://github.com/micro-ROS/micro_ros_arduino/blob/humble/examples/micro-ros_publisher_ethernet/micro-ros_publisher_ethernet.ino + +#include + +#include +#include +#include +#include +#include +#include + +#if !defined(TARGET_PORTENTA_H7_M7) +#error This example is only available for Arduino Portenta +#endif + +rcl_publisher_t publisher; +std_msgs__msg__Int32 msg; +rclc_support_t support; +rcl_allocator_t allocator; +rcl_node_t node; + +#define LED_PIN LEDR + +#define RCCHECK(fn) { rcl_ret_t temp_rc = fn; if((temp_rc != RCL_RET_OK)){error_loop();}} +#define RCSOFTCHECK(fn) { rcl_ret_t temp_rc = fn; if((temp_rc != RCL_RET_OK)){}} + +void error_loop(){ + while(1){ + digitalWrite(LED_PIN, !digitalRead(LED_PIN)); + delay(100); + } +} + +void setup() { + byte arduino_mac[] = { 0xAA, 0xBB, 0xCC, 0xEE, 0xDD, 0xFF }; + + IPAddress arduino_ip(10, 100, 0, 177); + IPAddress agent_ip(10, 100, 0, 111); + set_microros_native_ethernet_transports(arduino_mac, arduino_ip, agent_ip, 9999); + + pinMode(LED_PIN, OUTPUT); + digitalWrite(LED_PIN, HIGH); + + delay(2000); + + allocator = rcl_get_default_allocator(); + + //create init_options + RCCHECK(rclc_support_init(&support, 0, NULL, &allocator)); + + // create node + RCCHECK(rclc_node_init_default(&node, "micro_ros_arduino_ethernet_node", "namespace", &support)); + + // create publisher + RCCHECK(rclc_publisher_init_best_effort( + &publisher, + &node, + ROSIDL_GET_MSG_TYPE_SUPPORT(std_msgs, msg, Int32), + "topic_name")); + + msg.data = 0; +} + +void loop() { + RCSOFTCHECK(rcl_publish(&publisher, &msg, NULL)); + msg.data++; + delay(100); +} diff --git a/platform_code/arduino/native_ethernet/micro_ros_transport.cpp b/platform_code/arduino/native_ethernet/micro_ros_transport.cpp index 2df728cc..699bf24b 100644 --- a/platform_code/arduino/native_ethernet/micro_ros_transport.cpp +++ b/platform_code/arduino/native_ethernet/micro_ros_transport.cpp @@ -2,7 +2,11 @@ #include -#include +#if defined(ARDUINO_PORTENTA_H7_M7) + #include +#else + #include +#endif #include #include diff --git a/platform_code/arduino/native_ethernet/micro_ros_transport.h b/platform_code/arduino/native_ethernet/micro_ros_transport.h index 61a6a44a..8753387a 100644 --- a/platform_code/arduino/native_ethernet/micro_ros_transport.h +++ b/platform_code/arduino/native_ethernet/micro_ros_transport.h @@ -1,4 +1,8 @@ -#include +#if defined(ARDUINO_PORTENTA_H7_M7) + #include +#else + #include +#endif struct micro_ros_agent_locator { IPAddress address;