【无标题】esp32upd控制双舵机

信号线连接16 17脚
地址192.168.4.1
端口号一个6070
一个6068

#include <Arduino.h>
#include <WiFi.h>
#include "OneButton.h"
#define PIN_INPUT 0
OneButton button(PIN_INPUT, true);
int freq = 50;      // 频率(20ms周期)
int channel = 8;    // 通道(高速通道(0 ~ 7)由80MHz时钟驱动,低速通道(8 ~ 15)由 1MHz 时钟驱动。)
int channel1 = 9;    // 通道(高速通道(0 ~ 7)由80MHz时钟驱动,低速通道(8 ~ 15)由 1MHz 时钟驱动。)
int resolution = 8; // 分辨率
const int led = 16;
const int led1 = 17;
extern  IPAddress tcpserverIP(255,255,255,255); //目标地址
extern uint16_t tcpserverPort =6025; 
   
uint16_t udp_port=6068;  //存储需要监听的端口号
uint16_t udp_port1=6070;  //存储需要监听的端口号

extern int Data_length = 0;
extern int Data_length1 = 0;
int d=0;
WiFiUDP Udp;//声明UDP对象

WiFiUDP Udp1;//声明UDP对象
char incomingPacket[255];  //存储Udp客户端发过来的数据
char incomingPacket1[255];  //存储Udp客户端发过来的数据


const char* wifi_SSID="esp32";  //存储AP的名称信息
const char* wifi_Password="123456789";  //存储AP的密码信息

void wifiinit()
{
  Serial.begin(115200);
  Serial.println();
  //设置ESP32工作模式为无线终端模式
  WiFi.mode(WIFI_STA);
  WiFi.begin(wifi_SSID, wifi_Password);
  delay(500);
  int a =8 ;
  while (WiFi.status() != WL_CONNECTED)
  {
   
  }
  Serial.println("WiFi connected!");  
}





void udpreceive()
{
  Data_length=Udp.parsePacket();  //获取接收的数据的长度
  Data_length1=Udp1.parsePacket();  //获取接收的数据的长度
  if(Data_length)  //如果有数据那么Data_length不为0,无数据Data_length为0
  {
   
    int len = Udp.read(incomingPacket, 255);  //读取数据,将数据保存在数组incomingPacket中

    Serial.println(incomingPacket);  
    int c=atoi(incomingPacket);
    ledcWrite(channel, calculatePWM(c)); // 输出PWM
     
    if (len > 0)  //为了避免获取的数据后面乱码做的判断
    {
      incomingPacket[len] = 0;
    }
   }
     if(Data_length1)  //如果有数据那么Data_length不为0,无数据Data_length为0
  {
   
    int len1 = Udp1.read(incomingPacket1, 255);  //读取数据,将数据保存在数组incomingPacket中
    Serial.println(incomingPacket1); 
    int d=atoi(incomingPacket1);
    ledcWrite(channel1, calculatePWM(d)); // 输出PWM 
    if (len1 > 0)  //为了避免获取的数据后面乱码做的判断
    {
      incomingPacket1[len1] = 0;
    }
   }
      
}
void udpsend(IPAddress udpIP,uint16_t udpport)
{
  
  //if(Data_length)  //如果有数据那么Data_length不为0,无数据Data_length为0
  //{
  
      /*将接受到的数据发送回去*/
    Udp.beginPacket(tcpserverIP,tcpserverPort);  //准备发送数据到目标IP和目标端口
      Serial.print("\n发送者地址:");

         Serial.print("\n发送者地址端口:");
 
    Udp.print("receive data:");  //将数据receive data:放入发送的缓冲区
    Udp.println("156448");  //将接收到的数据放入发送的缓冲区
    Udp.endPacket();  //向目标IP目标端口发送数据
  //} 
}



 
int calculatePWM(int degree)
{ //0-180度
 //20ms周期,高电平0.5-2.5ms,对应0-180度角度
  const float deadZone = 6.4;//对应0.5ms(0.5ms/(20ms/256)) 舵机转动角度与占空比的关系:(角度/90+0.5)*1023/20
  const float max = 32;//对应2.5ms
  if (degree < 0)
    degree = 0;
  if (degree > 180)
    degree = 180;
  return (int)(((max - deadZone) / 180) * degree + deadZone);
}

void pwmcontrol()
{
    

    int c=atoi(incomingPacket);
    ledcWrite(channel, calculatePWM(c)); // 输出PWM
        
    int d=atoi(incomingPacket1);
    ledcWrite(channel1, calculatePWM(d)); // 输出PWM

    

}
 
void setup()
{

// put your setup code here, to run once:
  Serial.begin(115200);  //开启串口,波特率为115200
//  
  WiFi.softAP(wifi_SSID,wifi_Password);  //打开ESP32热点


  Serial.print(WiFi.softAPIP());  //串口输出模块IP地址
  Udp.begin(udp_port);//启动UDP监听这个端口  
  Udp1.begin(udp_port1);//启动UDP监听这个端口  
  ledcSetup(channel, freq, resolution); // 设置通道
  ledcAttachPin(led, channel);          // 将通道与对应的引脚连接
  ledcSetup(channel1, freq, resolution); // 设置通道
  ledcAttachPin(led1, channel1);          // 将通道与对应的引脚连接
  button.attachClick(pwmcontrol);
  
}
 
void loop()
{
  
   udpreceive();

udpsend(tcpserverIP,tcpserverPort);
//  delay(10);
//

// button.tick(); 

  
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值