在Arduino平台上使用ESP8266:订阅ROS消息,通过tcp无线控制IO

在本教程之前,请先确认是否安装好arduino的IDE和加载了ROS的库文件;

安装IDE的参考文章

https://blog.csdn.net/zengqz123/article/details/82712648

加载ROS库的参考文章

http://wiki.ros.org/rosserial_arduino/Tutorials/Arduino%20IDE%20Setup

在ROS库里面有很多的例程是基于串口的GPIO控制,但是esp8266不仅仅支持串口通讯,还能使用TCP进行通讯。因此我在例程上进行修改,通过TCP的连接方式对IO进行控制(无线控制)。

#include <ESP8266WiFi.h>
#include <ros.h>
#include <std_msgs/Empty.h>


const char* ssid     = "qingzhaonizuishuai";
const char* password = "qingzhaonizuishuai123";
// Set the rosserial socket server IP address
IPAddress server(192,168,0,157);
// Set the rosserial socket server port
const uint16_t serverPort = 11411;

ros::NodeHandle  nh;、

void messageCb( const std_msgs::Empty& toggle_msg){
  digitalWrite(13, HIGH-digitalRead(13));   // blink the led
}

ros::Subscriber<std_msgs::Empty> sub("toggle_led", &messageCb );
void setup()
{
  pinMode(13, OUTPUT);
  // Use ESP8266 serial to monitor the process
  Serial.begin(115200);
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  // Connect the ESP8266 the the wifi AP
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  // Set the connection to rosserial socket server
  nh.getHardware()->setConnection(server, serverPort);
  nh.initNode();

  // Another way to get IP
  Serial.print("IP = ");
  Serial.println(nh.getHardware()->getLocalIP());
  nh.subscribe(sub);
}

void loop()
{
  if (nh.connected()) {
    Serial.println("Connected");
  } else {
    Serial.println("Not Connected");
  }
  nh.spinOnce();
  delay(1);
}

注意要修改的地方!!!!我开始没注意到,修改了很久也没成功通讯。

第一要把ssid和password修改成你的wifi账号密码

第二要把IPAddress,修改成运行roscore主机的IP地址

const char* ssid     = "qingzhaonizuishuai";
const char* password = "qingzhaonizuishuai123";
// Set the rosserial socket server IP address
IPAddress server(192,168,0,157);

将程序烧写进esp8266芯片后,把LED灯正负极连接到ESP8266的D7和GND。

主机运行以下命令连接eps8266:

rosrun rosserial_python serial_node.py tcp

 

当出现以下信息时说明连接成功:

主机运行以下命令,发布点亮LED信息:

rostopic pub toggle_led std_msgs/Empty --once

等待三秒后,LED被点亮了!

再一次运行当前命令,LED被熄灭了!

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值