在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被熄滅了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章