极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7008|回复: 4

于esp8266的智能家居控制系统-局域网篇1手机控制和透传

[复制链接]
发表于 2016-5-13 16:17:17 | 显示全部楼层 |阅读模式
今天我们使用手机来控制继电器,这里同样是使用调试软件手机和8266接入同一个wifi网络即接同一个路由器,手机放热点也可以。这里我们使用的是手机和8266连接同一个路由器。打开手机上的网络调试助手
11.png
点击配置输入端口号8266,点击激活。ps:端口号可以任意取一个两边对应即可
22.png
打开ide修改下代码,如下:
/*这篇把8266作为TCPcleint,加入手机创建的tcpServer中
来控制一个继电器*/
   
#include <ESP8266WiFi.h>
   
#define relay1 2 //继电器连接在8266的GPIO2上
const char *ssid     = "KMYZ8HL";//这里是我的wifi,你使用时修改为你要连接的wifi ssid
const char *password = "kmyz6051180";//你要连接的wifi密码
const char *host = "192.168.191.4";//修改为手机的的tcpServer服务端的IP地址,即手机在路由器上的ip
WiFiClient client;
const int tcpPort = 8266;//修改为你建立的Server服务端的端口号
   
   
void setup()
{    pinMode(relay1,OUTPUT);//原来的盆友注意了,原来的代码这里漏了句i am so sorry
    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())//available()同ARDUINO,不解释了
    {
        char val = client.read();//read()同arduino
        if(val=='a'){//pc端发送a和b来控制
           digitalWrite(relay1, LOW);
        }
        if(val=='b')
        {
            digitalWrite(relay1, HIGH);
        }
    }
   
   
}
烧写。。。
33.png
发送我们设定的0和1开关继电器

44.png
哈哈,就可以开关继电器啦。
我也发一个有按钮的调试软件,用法一样
55.png
66.png
手机设置为服务端,这里我们使用一个指令控制,改下代码就可以了
先申明一个变量来存状态
boolean ONorOFF=LOW;
在改成
if(val == 1) {
            digitalWrite(2,ONorOFF);
            Serial.print(“ON”);
            ONorOFF = (!ONorOFF);

这样就可以一个指令控制了。ps:路人甲:楼主废话真多

2.透传
8266叫串口wifi模块,so透传肯定不能少,通过这几篇帖子我们学习了,控制gpio,把8266作为透传同理就是把8266串口获取到的数据无线发送出去
改下上面的代码即可

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);
  
    }
这样透传就OK啦,把8266的rx,tx接在其他单片机的tx,rx上,然后其他的怎么写,你懂了
回复

使用道具 举报

发表于 2016-5-13 16:49:17 | 显示全部楼层
这篇文章我在另一个著名坛子里看到过,还是连载那
回复 支持 反对

使用道具 举报

发表于 2016-5-13 18:54:46 | 显示全部楼层
支持有一次
回复 支持 反对

使用道具 举报

发表于 2016-5-14 23:37:58 | 显示全部楼层
不错,学习学习
回复 支持 反对

使用道具 举报

发表于 2016-12-11 07:44:09 来自手机 | 显示全部楼层
app楼主咋做的,能分享下嘛
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2019-6-27 17:06 , Processed in 0.048869 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表