#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);
}
}
}
【3】udp通信控制舵机和LED
最新推荐文章于 2024-08-26 17:46:53 发布