本文主要是介绍eps32和ros2之稳稳点亮一个LED灯(IO4),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- esp32与ros2的开关灯
源码:
#include <ros2arduino.h>#include <WiFi.h>
#include <WiFiUdp.h>
#include <WiFiClient.h>
//#include <WebServer.h>
//#include <ESPmDNS.h>#define SSID "***"
#define SSID_PW "***"
#define AGENT_IP "***"
#define AGENT_PORT *** //AGENT port number#define LED 4
#define PUBLISH_FREQUENCY 1 //hzchar ledflag=2;void publishString(std_msgs::String* msg, void* arg)
{(void)(arg);static int cnt = 0;if(ledflag==2){sprintf(msg->data, "欢乐的esp32和ros2 %d", cnt++);}else if(ledflag==0){sprintf(msg->data, "欢乐的esp32灯灭了 %d", cnt++);}else if(ledflag==1){sprintf(msg->data, "欢乐的esp32灯亮了 %d", cnt++);}
}class StringPub : public ros2::Node
{
public:StringPub(): Node("esp32_pub_node"){ros2::Publisher<std_msgs::String>* publisher_ = this->createPublisher<std_msgs::String>("esp32_chatter");this->createWallFreq(PUBLISH_FREQUENCY, (ros2::CallbackFunc)publishString, nullptr, publisher_);}
};WiFiUDP udp;WiFiServer server(80);void setup()
{pinMode(LED, OUTPUT);WiFi.begin(SSID, SSID_PW);while(WiFi.status() != WL_CONNECTED);server.begin();ros2::init(&udp, AGENT_IP, AGENT_PORT);}void loop()
{static StringPub StringNode;ros2::spin(&StringNode);WiFiClient client = server.available(); // listen for incoming clientsif (client) { // if you get a client,String currentLine = ""; // make a String to hold incoming data from the clientwhile (client.connected()) { // loop while the client's connectedif (client.available()) { // if there's bytes to read from the client,char c = client.read(); // read a byte, thenif (c == '\n') { // if the byte is a newline character// if the current line is blank, you got two newline characters in a row.// that's the end of the client HTTP request, so send a response:if (currentLine.length() == 0) {// HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)// and a content-type so the client knows what's coming, then a blank line:client.println("HTTP/1.1 200 OK");client.println("Content-type:text/html");client.println();// the content of the HTTP response follows the header:client.print("Click <a href=\"/H\">here</a> to turn the LED on pin 4 on. cslg<br>");client.print("Click <a href=\"/L\">here</a> to turn the LED on pin 4 off. cslg<br>");//client.print("Click <a href=\"/Blink\">here</a> to turn the LED on pin 2 off. cslg<br>");// The HTTP response ends with another blank line:client.println();// break out of the while loop:break;} else { // if you got a newline, then clear currentLine:currentLine = "";}} else if (c != '\r') { // if you got anything else but a carriage return character,currentLine += c; // add it to the end of the currentLine}// Check to see if the client request was "GET /H" or "GET /L":if (currentLine.endsWith("GET /H")) {digitalWrite(LED, LOW); // GET /H turns the LED on// sprintf(msg->data, "灯亮了");ledflag=1;}if (currentLine.endsWith("GET /L")) {digitalWrite(LED, HIGH); // GET /L turns the LED off// sprintf(msg->data, "灯灭了");ledflag=0;}}}// close the connection:client.stop();}
}
***需要自己依据网络情况配置。
默认灯亮,显示欢乐esp32和ros2。
点击off,效果如下:
点击on
显示1s一次,有滞后,再关闭。
多次测试后:
稳定工作10分钟,问题不大。最多测试1小时。
-后续,esp32做成ros2机器人遥控器-
这篇关于eps32和ros2之稳稳点亮一个LED灯(IO4)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!