所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开

空地联防机器人系统:第四课 TT拓展模块实现UDP通信

总督 总督 2021-01-10 23:51:18

本项目最重要的思想是通过网络通信实现Robomaster TT和Robomaster EP  的空陆联动,本文采用UDP为通信载体,TT在飞行过程中,扩展模块携带的人体红外传感器发现了红外信号后,就通过udp通知控制EP的主机

代码 代码
	                    					#说明:这部分是在Arduino上编写的烧录进TT拓展模块的程序

#include <WiFi.h>
#include <WiFiUdp.h> //引用以使用UDP
#include <RMTT_Libs.h>
#include <Wire.h>

const char *ssid = "****";
const char *password = "****";

WiFiUDP Udp;                      //创建UDP对象
unsigned int localUdpPort = 2333; //本地端口号
unsigned int epUdpPort = 8084; //EP控制端端口号
IPAddress ep_IP(192,168,31,51);

RMTT_RGB tt_rgb;  

struct Button {
    const uint8_t PIN;
    uint32_t numberKeyPresses;
    bool pressed;
};

Button button1 = {26, 0, false};


void IRAM_ATTR isr() {
    button1.numberKeyPresses += 1;
    button1.pressed = true;
    tt_rgb.SetRGB(255, 255, 255);
}
void setup()
{
  Serial.begin(115200);
  Serial.println();

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (!WiFi.isConnected())
  {
    delay(5000);
    Serial.print(".");
  }
  Serial.println("Connected");
  Serial.print("IP Address:");
  Serial.println(WiFi.localIP());
  
  pinMode(button1.PIN, INPUT_PULLUP);
  attachInterrupt(button1.PIN, isr, RISING);

  tt_rgb.Init();
  tt_rgb.SetRGB(255, 0, 0); 
  
 }

void loop()
{
  if (button1.numberKeyPresses>=3) {        
        button1.numberKeyPresses=0;
        tt_rgb.SetRGB(0, 255, 0); 
        Udp.beginPacket(ep_IP, epUdpPort); //准备发送数据
        Udp.print("hello ep from tt");    //复制数据到发送缓存
        Udp.endPacket();            //发送数据      
    }
   delay(1000);  
}
	                    				
代码 代码
	                    					//说明:这部分是ep控制主机端的python程序(部分)

    udpSocket = socket(AF_INET, SOCK_DGRAM)
    udpSocket.bind(("192.168.31.51", 8084))
    print("hello world!")
    try:
        while True:
            receiveData = udpSocket.recvfrom(1024)
            print(">%s:%s" % (str(receiveData[1]), str(receiveData[0])))
            if receiveData: break
            time.sleep(0.5)
    except:
        udpSocket.close()
        print("BYBY!!!")
	                    				
projectImage

程序说明:当拓展模块检测到三次以上中断发生后(为了避免噪声设置三次),向ep控制端发送hello ep from tt的字符串,同时RGB灯变绿色用以示意udp信号以发出。ep控制端接受到udp信号后就跳出监听循环,开始执行后续动作。

注:由于时间紧张,本次没有对udp信号内容进行分析和利用,只判断了是否接受到了udp信号,后续有待改进

Makelog作者原创文章,未经授权禁止转载。
0
0
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
|
[[c.comment_content]]