基于esp8266的智能家居控制系统-局域网篇1手机控制和透传-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: 跑龙套的保

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

  [复制链接]
发表于 2017-6-14 17:06 | 显示全部楼层
本帖最后由 bbqcat 于 2017-6-14 17:12 编辑

灰常好的东西,如果增加一个UDP广播收集客户端IP(客户端IP及服务端IP往往由宽带路由器分配的,都是可变),引导客户端自行进行TCP连接就更贴近实用了,海康威视的数字摄像头就是如此;服务端软件启动就全网广播一个指令,摄像头主动回应后,网络上的相关设备在服务端已经全面列表出来了。Arduino最合适的就是作为客户端存在,服务端与客户端之间还是UDP通信做一些基础数据的交换更贴合一些家庭实际。8266做服务最大连接数少的可怜,交给手机和一些更高级点的设备更合适。
发表于 2017-6-14 17:08 | 显示全部楼层
niwusong 发表于 2015-11-24 13:50
好东西,怎么没有人分享下,有没有8266的连接红外传感器的,或者是温湿度,透传到手机显示的?
...

8266的模拟口好像很少,数据采集要加扩展卡,复制化了
发表于 2017-6-14 17:19 | 显示全部楼层
本帖最后由 bbqcat 于 2017-6-14 17:22 编辑
微笑嘻嘻 发表于 2017-3-8 21:25
楼主你好,我把继电器接在GPIO2上,为什么继电器没有反应 啊

接个LED灯串个电阻先试试,GPIO口的电压只有5伏,电流似乎才50ma能不能驱动某些国货继电器不好说。如果驱动不起来还要加外接电源以及三极管等电流放大电路。需要一些电路基础。
 楼主| 发表于 2017-6-14 18:45 | 显示全部楼层
bbqcat 发表于 2017-6-14 17:06
灰常好的东西,如果增加一个UDP广播收集客户端IP(客户端IP及服务端IP往往由宽带路由器分配的,都是可变) ...

嗯,本来就改这样做,内网发现还是挺好用的,还有更高级的弄个mdns ssdp之类的
发表于 2017-6-16 18:23 | 显示全部楼层
狗尾续貂,在作者辛苦劳动的基础上添加点玩意:(作用嘛就是无视IP,全局域网内广播通信。测试在WESMOS D1完美通过,很奇怪的在ESP-13 MODULE上编译上传成功,就是发不出广播包,定向的能发)#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

const char *ssid = "MyWIFI";//这里是我的wifi,你使用时修改为你要连接的wifi ssid
const char *password = "123123123";//你要连接的wifi密码
const char *UDPhost = "255.255.255.255";//局域网全网UDP广播地址,也可以使用你本地网段后缀为255也行,不过适应能力就弱了
WiFiClient client;
const int udpPort = 4321;//修改为你建立的Server服务端的端口号
unsigned int localPort = 3888;//UDP端口侦听
char packetBuffer[255]; //存放接收到的UDP数据
char  whoamiBuffer[128]="Udp Test01";
char  ReplyBuffer[255] = "I Received packet!";       // 回复广播发送者
WiFiUDP Udp;

void setup()
{
  Serial.begin(115200);
  delay(10);
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");//写几句提示,哈哈
  Serial.println(ssid);
  WiFi.begin(ssid, password);//连接WIFI热点

  while (WiFi.status() != WL_CONNECTED)//WiFi.status() ,这个函数是wifi连接状态,返回wifi链接状态
  {
    delay(500);
    Serial.print(".");//如果没有连通向串口发送.....
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());//WiFi.localIP()返回8266获得的本机ip地址
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");//整几个高大上的数字,比如信号强度啥米的,呵呵

  // 开始UDP端口侦听
  Udp.begin(localPort);

  //先把自己是谁广播出去
  Udp.beginPacket(UDPhost, udpPort);
  Udp.write(whoamiBuffer);
  Udp.endPacket();
  Serial.println(UDPhost);
}
void loop()
{

  //UDP广播数据到达处理
  int packetSize = Udp.parsePacket();
  if (packetSize) {
    Serial.print("Received packet of size ");
    Serial.println(packetSize);
    Serial.print("From ");
    IPAddress remoteIp = Udp.remoteIP();//获取远程广播包发送IP
    Serial.print(remoteIp);
    Serial.print(", port ");
    Serial.println(Udp.remotePort());

  // 将到达的数据包读入packetBufffer
    int len = Udp.read(packetBuffer, 255);
    if (len > 0) {
      packetBuffer[len] = 0;
    }
    Serial.println("Contents:");
    Serial.println(packetBuffer);

    // 回复信息给广播发送IP
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
//    strcat(ReplyBuffer,Udp.remoteIP());
    Udp.write(Udp.remoteIP());
    Udp.write(ReplyBuffer);
    Udp.endPacket();
  }
}
lunt01.jpg

 楼主| 发表于 2017-6-17 10:36 | 显示全部楼层
bbqcat 发表于 2017-6-16 18:23
狗尾续貂,在作者辛苦劳动的基础上添加点玩意:(作用嘛就是无视IP,全局域网内广播通信。测试在WESMOS D1 ...

66666666,有时候广播不出去其实问题在广播地址上,很多网络环境下不能发广播到255.255.255.255,一般发送到本ip段下的广播地址差不多都可以了,比如本机ip是192.168.1.2,就发送到192.168.1.255这个广播地址
发表于 2017-6-24 22:31 | 显示全部楼层
非常不错,准备学习,先留名,不懂得再问版主
发表于 2017-7-24 10:44 | 显示全部楼层
感觉不错,就是库呢?
发表于 2017-7-25 03:38 | 显示全部楼层
请教一下,要如何tcp发送字符串呢.通过write函数好像只能发送char类型的数据
 楼主| 发表于 2017-7-25 09:00 | 显示全部楼层
淡定酱 发表于 2017-7-25 03:38
请教一下,要如何tcp发送字符串呢.通过write函数好像只能发送char类型的数据

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

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 02:28 , Processed in 0.101488 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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