ESP8266——手机控制Arduino上的LED灯(局域网AT指令方式)

实验原理

手机通过手机软件,控制已经接上8266的ArduinoLED灯的亮灭。

实验步骤

第一步:通过USB-TTL连接ESP8266设置AT指令,保存透传模式。接线如下:

ESP8266 USB-TTL
VCC 3.3V
GND GND
EN 3.3V
RX TX
TX RX

在这里插入图片描述
通过串口调试助手发送AT指令:

//设置WiFi应用模式为Station
AT+CWMODE_DEF=3
//连接到WiFi路由器,请将SSID替换为路由器名称,Password替换为路由器WiFi密码
AT+CWJAP_DEF="SSID","Password"
//连接单连模式
AT+CIPMUX=0
//设置为透传模式
AT+CIPMODE=1
//进入透传模式,并保存(进入后模块就一直为透传模式,需要退出则取消发送新行,发送+++)
,IP地址为远端设备地址,例:我用手机控制,那么我的手机在路由器WIFI上的IP地址为192.168.0.104
AT+SAVETRANSLINK=1,"你的手机的IP",8080,"TCP"

设置成功后,模块上电自动透传,如果您要退出透传模式。回到AT模式则需要发送命令:+++
反馈:CLOSED即可。(不退出透传,永远无法进入AT模式,指令说明详见AT指令集)。

第二步:将Arduino 上传LED控制程序。(注意板子型号和COM口号不要选错)

int led_pin = 13;
//定义一个10字节的整型数据变量cmd作为命令,这里可以修改为不同的数字。此处设置为10是为了有更好的兼容性。
char cmd[10];
//判断收到的cmd是否有内容
bool valid_cmd = false;

void setup()
{
    
    
//定义连接led的引脚为输出信号
pinMode(led_pin, OUTPUT);
Serial.begin(115200);
}
void loop()
{
    
    
/*以下部分是串口信息处理过程*/
//定义一个整数型变量i
int i;
//如果串口收到有数据
if (Serial.available() > 0)
{
    
    
//变量i最大为10
for (i = 0; i < 10; i++)
{
    
    
//清空缓存,存入cmd变量,并以\0作为结束符
cmd[i] = '\0';
}
//此时i只能取前9位,第10位是结束符\0
for (i = 0; i < 9; i++)
{
    
    
//再次判断串口如果收到有数据,防止数据丢失
if (Serial.available() > 0)
{
    
    
//给变量cmd赋值,取串口收到的前9位字符
cmd[i] = Serial.read();
delay(1);
}
else
{
    
    
//如果串口数据超过9位,后面的字符直接忽略,跳到下一步
break;
}
}
/*以上串口信息处理结束*/

//得到最终变量cmd的有效值
valid_cmd = true;
}

//判断变量cmd的值,开始处理
if (valid_cmd)
{
    
    
//如果变量cmd的前2位的值是on
if (0 == strncmp(cmd, "on", 2))
{
    
    
//则连接led的引脚电压被置高5V,
digitalWrite(led_pin, HIGH);
//串口打印返回值ON,表示ON的操作执行成功
Serial.println("ON");
}
else if (0 == strncmp(cmd, "off", 3)) //否则如果变量cmd的前3位的值是off
{
    
    
//则连接继电器的引脚电压被置低0V,灯的电路被断开,灯灭
digitalWrite(led_pin, LOW);
//串口打印返回值F,表示OFF的操作执行成功
Serial.println("OFF");
}
else //如果以上两个条件都不成立,前2位不是ON,或者前3位不是OFF,即不正确的命令
{
    
    
//仅串口打印返回值X,表示指令错误。
Serial.println("X");
}
//到此,变量cmd的指令被处理完毕
valid_cmd = false;
}
//延迟10毫秒,返回loop主程序继续读取新的串口指令
delay(10);
}

第三步:将ESP8266、LED灯与Arduino连接。

ESP8266 Arduino
Vcc 3.3V
GND GND
EN 3.3V
RX TX
TX RX

第四步:打开手机APP,添加一个TCP SERVER,端口号要保持一致
1、打开网络调试助手,点击TCP SERVER—-配置
在这里插入图片描述
2、当开启服务端后,ESP8266自动连接上了。
在这里插入图片描述
3、在发送框内发送”on”即可点亮Arduino上13管脚的LED灯。
4、在发送框内发送”off”即可熄灭Arduino上13管脚的LED灯。

提醒事项:
1、如果ESP8266没有出现在服务端(手机端),请检查手机和ESP8266是否连接在同一路由器上。请不要使用二级路由器(即路由–路由),不然有可能会造成网络阻隔,导致无法连通。
2、该小实验中:透传模式一定要记得保存,不保存的话,重新上电就没法自动进入透传模式了,建议您可以先去了解一下ESP8266的使用方法后再尝试本实验。
3、IP地址为手机在路由器WIFI上的IP地址,不要填错了。
4、手机上的网络调试助手,发送框发送的为小写的”on”、“off”,反馈为大写的”ON”、”OFF”;反馈”X“表示发送框内前两位不是on,前三位不是off,所以反馈”X“来表示一下,具体看程序内的定义。

猜你喜欢

转载自blog.csdn.net/weixin_44925547/article/details/106974684