python esp8266 控制led_手机通过ESP8266控制Arduino上的LED灯(局域网AT指令方式)

实验原理:手机通过手机软件,控制已经接上8266的Arduino半载LED灯的亮灭。

实验步骤:

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

接线方式

8266—PL2303

*VCC—-3.3

*GND–GND

*CH_PD–3.3

*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.1.110

AT+SAVETRANSLINK=1,"你的手机的IP",8080,"TCP"

设置成功后,模块上电自动透传,如果您要退出透传模式。回到AT模式则需要发送命令:+++

反馈:CLOSED即可。(不退出透传,永远无法进入AT模式,指令说明详见AT指令集)。

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

int led_pin = 11;

//定义一个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连接。(接线不要接错了)

在Arduino上再连接一个LED灯,我程序中使用的是PIN11引脚。(连接LED灯需要在正极连接一个220欧姆的电阻)。

*VCC—-3.3

*GND–GND

*CH_PD–3.3

*RX–TX

*TX–RX

D11——LED正极

GND—–LED负极

第四步:打开手机APP,添加一个TCP SERVER,端口号要保持一致(检查设置) 软件下载:http://www.appchina.com/app/com.fontlose.tcpudp

1、打开网络调试助手,点击TCP SERVER—-配置

2、当开启服务端后,ESP8266自动连接上了:

3、在发送框内发送”on”即可点亮Arduino板载LED灯。

4、在发送框内发送”off”即可熄灭Arduino板载LED灯。

提醒事项:

1、如果ESP8266没有出现在服务端(手机端),请检查手机和ESP8266是否连接在同一路由器上。请不要使用二级路由器(即路由–路由),不然有可能会造成网络阻隔,导致无法连通。

2、该小实验中:透传模式一定要记得保存,不保存的话,重新上电就没法自动进入透传模式了,建议您可以先去了解一下ESP8266的使用方法后再尝试本实验。

3、IP地址为手机在路由器WIFI上的IP地址,不要填错了。

4、手机上的网络调试助手,发送框发送的为小写的”on”、“off”,反馈为大写的”ON”、”OFF”;反馈”X“表示发送框内前两位不是on,前三位不是off,所以反馈”X“来表示一下,具体看程序内的定义。

视频演示:点传送门直接去视频网站观看

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值