1.1.1、网络调试助手
1.1.2、ipconfig查看本机地址,
或者
ESP32drive 购买链接:某宝购买
USB转TTL,最好能提供较强的3.3V供电能力,比如板载AMS1117-3.3芯片,这样可以不用12V外部供电,
ESP32模块配置为AP模式,电脑连接ESP32,发送指令控制ESP32的板载LED亮灭。
//此代码演示,ESP32做为热点,电脑连接ESP32
//连接热点后,ESP32给电脑分配IP,电脑向指定的IP和端口发送数据,192.168.4.1 , 1234
//网络调试助手向ESP32发送 on ,LED指示灯亮;发送 off ,LED指示灯灭
//wifi库函数用法请参考:https://www.arduino.cc/en/Reference/WiFi
//请阅读教程《SimpleFOC之ESP32(九)—— WIFI、UDP和TCP通信》:https://blog.csdn.net/loop222/article/details/121201638
#include
#define LEDpin 2
#define LEDoff digitalWrite(LEDpin, LOW)
#define LEDon digitalWrite(LEDpin, HIGH)
const char* ssid = "ESP32drive"; //AP名称
const char* pswd = "123456abcd"; //AP密码,至少8位
uint16_t udp_port = 1234; //端口号,ESP32默认IP:192.168.4.1
WiFiUDP udp;
int recv_length;
char recvbuff[255]; //存储接收到的数据
//*******************************************************************************************
void setup() {
pinMode(LEDpin, OUTPUT);
LEDon;
Serial.begin(115200);
Serial.println("AP mode:");
WiFi.mode(WIFI_AP);
WiFi.softAP(ssid,pswd); //建立热点
Serial.print(WiFi.softAPIP()); //串口打印模块IP和端口号 192.168.4.1,1234
Serial.print(",");
Serial.println(udp_port);
udp.begin(udp_port); //启动UDP监听端口,等待电脑发送数据
Serial.println("Ready!");
}
//*******************************************************************************************
void loop() {
int recv_length=udp.parsePacket(); //获取接收的数据的长度
if(recv_length) //如果有数据那么recv_length不为0
{
int len = udp.read(recvbuff, 255); //读取数据到recvbuff中
if (len > 0)
{
if( ( strcmp(recvbuff,"on") )==0 )LEDon; //判断收到的数组为on,LED亮
else if( ( strcmp(recvbuff,"off") )==0 )LEDoff; //off,LED灭
Serial.println(recvbuff); //串口打印网口收到的数据
}
//将接收到的数据发送回去
udp.beginPacket(udp.remoteIP(),udp.remotePort()); //准备发送数据到目标IP和目标端口
udp.print("Receive:");
udp.println(recvbuff); //数据放入发送的缓冲区
udp.endPacket(); //发送
for(int i=0;i<255;i++) //清空接收数组
{recvbuff[i] = 0;}
}
}
//*******************************************************************************************
网络调试助手配置为TCP server模式,ESP32连接电脑,网络调试助手发送指令控制板载LED亮灭。
//此代码演示,ESP32连接路由器,所以需要输入路由器的ID和密码
//连接路由器后,向指定的网址和端口发送数据,所以需要先设置好网络调试助手
//网络调试助手向ESP32发送 on ,LED指示灯亮;发送 off ,LED指示灯灭
//wifi库函数用法请参考:https://www.arduino.cc/en/Reference/WiFi
//请阅读教程《SimpleFOC之ESP32(九)—— WIFI、UDP和TCP通信》:https://blog.csdn.net/loop222/article/details/121201638
#include
#define LEDpin 2
#define LEDoff digitalWrite(LEDpin, LOW)
#define LEDon digitalWrite(LEDpin, HIGH)
const char* ssid = "TP-LINK123"; //路由器的ID和密码
const char* pswd = "123456abcd";
const char * ServerAddress = "192.168.1.106"; //网络调试助手设置的IP和端口,通过ipconfig获取电脑IP
const int ServerPort = 1234; //网络调试助手设置的端口号
WiFiClient client;
//*******************************************************************************************
void setup()
{
pinMode(LEDpin, OUTPUT);
LEDon;
Serial.begin(115200);
delay(10);
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, pswd); //开始连接路由器wifi
while(WiFi.status() != WL_CONNECTED) {
delay(500); //没有连接上,每隔0.5秒打印一个.
Serial.print(".");
}
Serial.println("WIFI connected!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP()); //查看路由器分配给ESP32的IP
Serial.print("ESP Mac Address: ");
Serial.println(WiFi.macAddress());
if(client.connect(ServerAddress,ServerPort)){ //连接TCP server
Serial.println("server connected"); //连上服务器
}
LEDoff;
}
//*******************************************************************************************
void loop(){
if(WiFi.status() != WL_CONNECTED) {
Serial.println("wifi disconnect"); //关闭路由器后打印
WiFi.disconnect(); //断开连接
delay(1000);
}
if(!client.connected()){
Serial.println("server closed"); //关闭服务器后打印
client.stop();
delay(1000);
}
if(client.available() > 0)
{
//百度Arduino String,可以找到string的很多用法
String line = client.readString();
if(line.equalsIgnoreCase("on"))LEDon; //LED亮,判断字符串是否相等,忽略大小写
else if(line.equalsIgnoreCase("off"))LEDoff; //LED灭
Serial.println(line);
line = ""; //清空接收字符串
}
}
//*******************************************************************************************