欢迎光临
我们一直在努力

手机通过ESP8266控制Arduino上的LED灯

  1483424197766

通过对ESP8266无线模块在Arduino上的烧写方式的学习,我们知道了,ESP8266可以自动进入透传模式。可以对ESP8266无线模块的设置,来实现我们所需要的功能。现在,我们将通过这一个功能,让手机和ESP8266进行互相通信,并控制Arduino上的LED灯。(原理是让手机和ESP8266无线模块在同一个WIFI网络里,连接同一个路由器)。

所需材料:

ZHONGBEST UNO R3主控板一块:购买链接

ESP8266无线模块:购买链接

LED发光二极管二个:购买链接

220欧姆电阻一个:购买链接

杜邦线若干:购买链接

手机一部(安卓手机)

第一步:查看ESP8266无线模块Arduino烧写方式

ESP8266无线模块Arduino烧写方式:http://zhongbest.com/2017/01/02/esp8266-01%e6%97%a0%e7%ba%bf%e6%a8%a1%e5%9d%97%e7%9a%84arduino%e7%83%a7%e5%86%99%e6%96%b9%e5%bc%8f/

第二步:烧写自动透传代码,并且修改程序中您的WIFI及密码。

==ESP8266无线模块自动透传代码==

//把8266作为TCPcleint,加入手机创建的tcpServer中

  
#include <ESP8266WiFi.h>
  
#define relay1 2
const char *ssid     = "ZHONGBEST";//这里是我的wifi,你使用时修改为你要连接的wifi ssid
const char *password = "zbst1207";//你要连接的wifi密码
const char *host = "192.168.1.108";//修改为手机的的tcpServer服务端的IP地址,即手机在路由器上的ip
WiFiClient client;
const int tcpPort = 8266;//修改为你建立的Server服务端的端口号
  
  
void setup()
{    pinMode(relay1,OUTPUT);
    Serial.begin(115200);
    delay(10);
    Serial.println();
    Serial.println();
    Serial.print("Connecting to ");
    Serial.println(ssid);
  
    WiFi.begin(ssid, password);
  
    while (WiFi.status() != WL_CONNECTED)//WiFi.status() ,这个函数是wifi连接状态,返回wifi链接状态
                                         //这里就不一一赘述它返回的数据了,有兴趣的到ESP8266WiFi.cpp中查看
    {
        delay(500);
        Serial.print(".");
    }//如果没有连通向串口发送.....
  
    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());//WiFi.localIP()返回8266获得的ip地址
}
  
  
void loop()
{
    while (!client.connected())//几个非连接的异常处理
    {
        if (!client.connect(host, tcpPort))
        {
            Serial.println("connection....");
            //client.stop();
            delay(500);
  
        }
    }
while (client.available())//改动的就这里啦,无线读取到的数据转发到到串口
    {
        uint8_t c = client.read();
        Serial.write(c);
    }
 
 
    if (Serial.available())//串口读取到的转发到wifi,因为串口是一位一位的发送所以在这里缓存完再发送
    {
        size_t counti = Serial.available();
        uint8_t sbuf[counti];
        Serial.readBytes(sbuf, counti);
        client.write(sbuf, counti);
 
    }
  
  
}

烧写前,先将程序中的“ssid\password\host\tcpPort”改成自己的。

注意:host为自己手机在WIFI里的IP地址(可以在手机中WIFI中查看。)

AAA_副本

第三步:将烧写好的ESP8266无线模块与Arduino连接。

烧写好的ESP8266无线模块,则是一个自动透传模块。在WIFI网络中相当于一个TCP客户端。

ESP8266 arduino_bb

第四步:在安卓手机上下载一个网络调试助手软件,进行设置。

我使用的是“网络调试助手”,在各大安卓APP市场都有下载。

1、打开手机上已经下载好的“网络调试助手”APP软件。(手机要连接上你的WIFI)。

1483421614323

2、点开后看到如下界面,选择“tcp server”选项(将手机作为服务端)。并点击“配置”。

1483421688422

3、将所示的服务配置窗口内的端口更改为“8266”(你在ESP8266无线模块烧写时代码里填写的端口号)。并点击激活。

1483421766498

4、激活后,会发现,连接在Arduino上的ESP8266无线模块,会自动连接到手机服务端,如图中显示:

1483421791852

5、此时你发送A,串口会反馈:A。这样就完成了基本的通信。

第五步:连接LED灯,并上传Arduino控制代码。

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

上传时,要将ide修改成”arduino uno “ 和改成UNO板子的COM口。

esp8266 arduino_11

==Arduino控制代码==

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);

}

第六步:验证你的实验:手机控制LED灯

在手机中的”网络调试助手“,输入并发送“on”,Arduino上的LED灯常亮,输入并发送”off”,Arduino上的LED灯灭。

1483421817124

1483421841316

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

实验思维扩展:

通过此次小实验,我们成功的实现了,手机控制LED灯,同样的道理,我们可不可以接一个其他模块,修改Arduino控制代码,是否一样能控制。如果连接一个继电器,我们是否可以控制家里的大功率用电器了呢?往后我们要尝试更多的模块,实现更多的功能。

未经允许不得转载:Arduino-Maker » 手机通过ESP8266控制Arduino上的LED灯

分享到:更多 ()

评论 抢沙发

评论前必须登录!

 

中贝斯特线上商城

旗舰店企业店