赞
踩
1.手机控制
通过上一篇我们使用了电脑tcp调试软件来控制继电器,今天我们使用手机来控制继电器,这里同样是使用手机调试软件和ESP8266接入同一个wifi网络即接同一个路由器,手机开热点也可以。这里我们使用的是手机和ESP8266连接同一个路由器。
打开手机上的网络调试助手
点击配置输入端口号8266,点击激活。ps:端口号可以任意取一个,两边对应即可
打开arduino ide修改下代码,如下
- /*这篇把8266作为TCPcleint,加入手机创建的tcpServer中来控制一个继电器*/
-
- #include <ESP8266WiFi.h>
-
- #define relayPin 2 //继电器连接在8266的GPIO2上
- const char *ssid = "TP_LINK_6960";//这里是我的wifi,你使用时修改为你要连接的wifi ssid
- const char *password = "123456789";//你要连接的wifi密码
- const char *host = "192.168.191.4";//修改为手机的的tcpServer服务端的IP地址,即手机在路由器上的ip
- WiFiClient client;
- const int tcpPort = 8266;//修改为你建立的Server服务端的端口号
-
- void setup()
- {
- pinMode(relayPin,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())//available()同ARDUINO,不解释了
- {
- char val = client.read();//read()同arduino
- if(val=='a'){//pc端发送a和b来控制
- digitalWrite(relayPin, LOW);
- }
- if(val=='b')
- {
- digitalWrite(relayPin, HIGH);
- }
- }
- }
编译烧写固件
给ESP8266上电,打开手机调试软件可以看到已经有一个设备加入网络了
发送我们设定的0和1开关继电器
哈哈,就可以开关继电器啦。
我也发一个有按钮的调试软件,用法一样
手机设置为服务端,这里我们使用一个指令控制,改下代码就可以了
先申明一个变量来存状态
boolean ONorOFF=LOW;
在改成
if(val == 1) {
digitalWrite(2,ONorOFF);
Serial.print("ON");
ONorOFF = (!ONorOFF);
这样就可以一个指令控制了。
2.透传
ESP8266叫串口wifi模块,那么透传肯定不能少,把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上。
3.全局广播,无视IP
直接上源码:(有的ESP8266模块只能定向发送)
- #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();
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。