実際のところ
2番ピンのHIGH/LOWを見て、それを10秒ごとに送る
環境構築
microROSをRaspberry Pi Picoでつかってみる その2:通信環境を構築 - Bye Bye Moore
micro_ros_raspberrypi_pico_sdkの環境をそのまま活用。
以下、ディレクトリはmicro_ros_raspberrypi_pico_sdkにいる状態で実行します。
pico_micro_ros_example.c
MakeFileを弄るのを横着して、大元のファイルを上書きにて実施
#include <rcl/rcl.h> #include <std_msgs/msg/int8.h> #include "pico/stdlib.h" #define GPIO_PIN 2 void main(void) { // Initialize micro-ROS rcl_init_options_t init_options = rcl_get_zero_initialized_init_options(); RCCHECK(rcl_init_options_init(&init_options, rclc_get_default_allocator())) rcl_context_t context = rcl_get_zero_initialized_context(); RCCHECK(rcl_context_init(&context, &init_options, rclc_get_default_allocator())) rcl_node_t node = rcl_get_zero_initialized_node(); rcl_node_options_t node_ops = rcl_node_get_default_options(); RCCHECK(rcl_node_init(&node, "pico_node", "", &context, &node_ops)) // Initialize publisher rcl_publisher_t publisher = rcl_get_zero_initialized_publisher(); rcl_publisher_options_t publisher_ops = rcl_publisher_get_default_options(); const rosidl_message_type_support_t * type_support = ROSIDL_GET_MSG_TYPE_SUPPORT(std_msgs, msg, Int8); RCCHECK(rcl_publisher_init(&publisher, &node, type_support, "/pico_gpio", &publisher_ops)) // Initialize GPIO gpio_init(GPIO_PIN); gpio_set_dir(GPIO_PIN, GPIO_IN); while (1) { std_msgs__msg__Int8 msg; msg.data = gpio_get(GPIO_PIN); rcl_publish(&publisher, &msg, NULL); sleep_ms(10000); // Sleep for 10 seconds } }
ビルド
横着のお陰でやる事も同じ。素晴らしい。
cd micro_ros_raspberrypi_pico_sdk mkdir build cd build cmake .. make