Added simple node fore i2c comunication
This commit is contained in:
@ -37,6 +37,7 @@ set(SOURCES
|
||||
|
||||
|
||||
add_executable(mg_bt_executor ${SOURCES})
|
||||
add_executable(mg_i2cnode i2cmodule/i2cnode.cpp)
|
||||
|
||||
target_include_directories(
|
||||
mg_bt_executor
|
||||
@ -46,9 +47,11 @@ target_include_directories(
|
||||
)
|
||||
|
||||
ament_target_dependencies(mg_bt_executor ${PACKAGE_DEPS})
|
||||
ament_target_dependencies(mg_i2cnode rclcpp mg_msgs)
|
||||
|
||||
install( TARGETS
|
||||
mg_bt_executor
|
||||
mg_i2cnode
|
||||
DESTINATION lib/${PROJECT_NAME}
|
||||
)
|
||||
|
||||
|
||||
35
mg_bt/i2cmodule/i2cnode.cpp
Normal file
35
mg_bt/i2cmodule/i2cnode.cpp
Normal file
@ -0,0 +1,35 @@
|
||||
#include "rclcpp/rclcpp.hpp"
|
||||
#include "mg_msgs/srv/i2c.hpp"
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <linux/i2c-dev.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <i2c/smbus.h>
|
||||
|
||||
class MgI2c : public rclcpp::Node {
|
||||
using I2cSrv = mg_msgs::srv::I2c;
|
||||
|
||||
public:
|
||||
MgI2c(const std::string& name) : rclcpp::Node(name), i2c_fd_(open("/dev/i2c-1", O_RDWR)) { // NOLINT
|
||||
auto cb
|
||||
= [this](I2cSrv::Request::ConstSharedPtr req, I2cSrv::Response::SharedPtr resp) { send_req(req, resp); };
|
||||
i2c_srv_ = create_service<I2cSrv>("/i2c", cb);
|
||||
}
|
||||
|
||||
void send_req(I2cSrv::Request::ConstSharedPtr req, I2cSrv::Response::SharedPtr resp) const {
|
||||
ioctl(i2c_fd_, I2C_SLAVE, req->addr); // NOLINT
|
||||
int ch = i2c_smbus_read_byte_data(i2c_fd_, req->data);
|
||||
resp->resp.push_back(ch);
|
||||
RCLCPP_INFO(get_logger(), "Recieved %d", resp->resp.front());
|
||||
}
|
||||
|
||||
private:
|
||||
rclcpp::Service<mg_msgs::srv::I2c>::SharedPtr i2c_srv_;
|
||||
int i2c_fd_;
|
||||
};
|
||||
|
||||
int main(int argc, const char* const* argv) {
|
||||
rclcpp::init(argc, argv);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -14,6 +14,7 @@
|
||||
<depend>behaviortree_ros2</depend>
|
||||
<depend>btcpp_ros2_interfaces</depend>
|
||||
<depend>mg_msgs</depend>
|
||||
<depend>libi2c-dev</depend>
|
||||
|
||||
<test_depend>ament_lint_auto</test_depend>
|
||||
<test_depend>ament_lint_common</test_depend>
|
||||
|
||||
@ -19,6 +19,7 @@ rosidl_generate_interfaces(${PROJECT_NAME}
|
||||
"action/Rotate.action"
|
||||
"srv/CalcPath.srv"
|
||||
"srv/SendDouble.srv"
|
||||
"srv/I2c.srv"
|
||||
)
|
||||
|
||||
ament_package()
|
||||
4
mg_msgs/srv/I2c.srv
Normal file
4
mg_msgs/srv/I2c.srv
Normal file
@ -0,0 +1,4 @@
|
||||
uint8 addr
|
||||
uint8 data
|
||||
---
|
||||
uint8[] resp
|
||||
Reference in New Issue
Block a user