上一篇说了基于AT指令建立UDP透传的方案。除了AT指令外,使用Arduino来对ESP32进行开发也是比较常用及简单的一种方式,本文将如何使用Arduino来建立UDP AP端进行介绍:
#include<WiFi.h> // wifi功能需要的库
WiFiUDP Udp; // 声明UDP对象
IPAddress staticIP(192.168.100.1);
IPAddress gateway(192.168.100.2);
IPAddress subnet(255.255.255.0);
IPAddress dns(192.168.100.2);
const char* wifi_SSID="ESP32_AP";//存储AP的名称信息
const char* wifi_Password="12345678";//存储AP的密码信息
uint16_t udp_port=2233;//存储需要监听的端口号
char receive_data[255];//存储Udp客户端发过来的数据
unsigned long time_flag;
uint8_t send_data[8];
void udp_ap_init(void)
{
Serial.begin(115200);//开启串口,波特率设置为115200
WiFi.softAPConfig(staticIP,gateway,subnet);
WiFi.config(staticIP,gateway,subnet,dns,dns);
WiFi.softAP(wifi_SSID,wifi_Password);
Serial.print("\n开发板IP地址为:");
Serial.print(WiFi.softAPIP());//串口输出模块IP地址
Udp.begin(udp_port);//启动UDP监听这个端口
}
void setup()
{
udp_ap_init();
}
void loop()
{
send_data[0] = 0x01;
send_data[1] = 0x02;
send_data[2] = 0x03;
send_data[3] = 0x04;
send_data[4] = 0x05;
send_data[5] = 0x06;
send_data[6] = 0x07;
send_data[7] = 0x08;
Udp.beginPacket(WiFi.gatewayIP(),udp_port); //准备发送数据
Udp.write((const uint8_t*)senddata,8 ); //复制数据到发送缓存
Udp.endPacket(); //发送数据
if(milllis() - time_flag> 1000)
{
time_flag = millis(); //更新时间点
Serial.print("STA number: ");
Serial.println(WiFi.softApgetStationNum());
}
/*接收发送过来的Udp数据*/
int Data_length = Udp.parsePacket(); //获取接收数据的长度
if(Data_length)
{
int len = Udp.read(receive_data,255); //读取数据,将数据保存在数组 incoming_packet中
if(len > 0) //为了避免获取的数据后面乱码做的判断
{
receive_data[len] = 0;
}
Serial.println();
Serial.print("Received: ");
Serial.println(receive_data);
Serial.print("From IP: ");
Serial.println(Udp.remoteIP());
Serial.print("From port: ");
Serial.println(Udp.remotePort());
Serial.print("STA number: ");
Serial.println(WiFi.softAPgetStationNum());
/*将数据发送出去*/
Udp.beginPacket(Udp.remoteIP(),Udp.remotePort()); //准备发送数据到目标IP和目标端口
Udp.print("receive data:"); //将数据receive data:放入发送的缓冲区
Udp.write((const uint8_t*)send_data,8); //复制数据到发送缓存
Udp.endPacket(); //向目标IP及端口发送数据
}
}