【3】udp通信控制舵机和LED

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <Servo.h>  //添加了舵机控制程序
Servo myservo;  // 定义舵机对象,最多八个
int pos = 0;    // 定义舵机转动位置
int deng=12;     //对应led等的D6口
/*****************AP设置项 *****************/
const char *APssid="UDP" ;          //AP名字
const char *APpassword="12345678";  //AP密码
/****************UDP设置项 *****************/
unsigned int read_Port = 10000;     //监听端口
unsigned int send_Port = 20000;     //发送端口
char readdata[512];                 //数据缓存
WiFiUDP Udp;                        //定义udp

void setup() {
  Serial.begin(115200);
  Serial.println("");
  WiFi.mode(WIFI_AP);               //设置为AP模式
  WiFi.softAP(APssid, APpassword);  //配置AP参数,启动AP
  Udp.begin(read_Port);             //UDP设置监听指定端口
  myservo.attach(14);  // 设置舵机控制针脚(D5引脚)
  pinMode(deng,OUTPUT);  //初始化io口为输出模式
}

void loop() {
  /*********AP如果有设备连接,开启接收处理数据机制 **********/  
  if(WiFi.softAPgetStationNum()){
      Udp_Handler(Read_Udp());
      //Serial.println("收到了哦");
      LED(); //因为这里是设置在了if判断,它时刻连接,所以灯一直闪烁
      //driver();
  }
}
/*自定义函数
*将接收的数据,以String类型返回,方便分析处理
*/
String Read_Udp(){
  String data="";
  int packetSize = Udp.parsePacket();
  if (packetSize) {
    memset(readdata,0x00,sizeof(readdata));
    Udp.read(readdata, 511);
    Udp.flush();
    for(int i=0;i<packetSize;i++){
      data +=readdata[i];
    }
    Serial.println(data);    
  }
  return data;
}
/************自定义函数,对接收数据分析处理************/
void Udp_Handler(String data){
  if(data!=""){
    if(data=="1"){
      myPrint("00000",1); 
      Serial.println("收到了哦");  
      digitalWrite(deng,0);
      delay(3000);
      driver(); 
    }  
    else
    {
      myPrint("11111",0);
      Serial.println("收到的数据好像不对哦");
      digitalWrite(deng,1);
      delay(1500);
    }
          
  }  
}
/*自定义函数
*封装数据发送功能,方便调用
*第一个参数,使用String类型作为发送内容
*第二个参数,a为真,指定发送,对发送方返回数据,a为假,广播发送,群发信息
*/
void myPrint(String data,bool a){
  if(a){
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
    Udp.print("123");
    Serial.println("udp已经收到");
  }
  else{
    //Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
    Udp.beginPacket("udp还没有收到101", send_Port);
    Udp.print("101");
    Serial.println("udp还没有收到101");
  }  
  Udp.print(data);
  Udp.print("789");
  Serial.println("你好呀");
  Udp.endPacket();
}

void LED(){        //点亮LED
  digitalWrite(deng,1);
}

void driver()     //驱动电机
{
  for(int i=0;i<3;i++){
    // 0到180旋转舵机,每次延时15毫秒
    for(pos = 0; pos < 180; pos += 1)  
   {  
      myservo.write(pos);  
      delay(15);
    }
    // 180到0旋转舵机,每次延时15毫秒
    for(pos = 180; pos>=1; pos-=1)
    {                              
      myservo.write(pos);
      delay(15);
    }
  }
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值