【局域网通信】NodeMCU之间的通信(二)

TCP连接

TCP是计算机网络中运输层协议,是应用层协议http协议的支撑协议。两台远程主机之间可以通过TCP/UDP协议进行通信并交换信息,前提是,相互通信的两台主机之间必须知道彼此的IP地址和端口号。

NodeMCU作为TCP客户端实现局域网内点亮Led灯(通过路由器中转)

NodeMCU可以被配置为一个TCP客户端(如图4-1),同时将一台网络设备(如电脑)配置为TCP服务器端,将NodeMCU连接到已经配置好的TCP服务器端上后,两者即可进行通信。

通信方法有两种,方法一是将NodeMCU设置为Soft AP模式,让电脑之间连接到它的WiFi上之后再与它进行通信。方法二是将NodeMCU和电脑同时连接到一个WiFi上,这样做的好处是与NodeMCU通信的设备数量不会受到较大的限制,因为将NodeMCU设置为SoftAP模式时,最大可以连接到其上的设备数为8个。

在这里插入图片描述
图4-1 打开网络调试助手,并将其设置为TCP Server

首先使用方法二使两者连接到一起并进行通信,打开网络调试助手,将其协议类型设置为TCP Server,更改本地端口号为任意值,在本次实验中被设置为1234。记住TCP Server的IP地址和端口号之后,将其打开(连接)。将程序中的IP地址和端口号换成上面设置好的值,

并把NodeMCU的D0端口连接上一个Led(如图4-2),将程序烧录到Node MCU中。完成之后在网络调试助手中发送“0”或者“1”就会改变Led的状态。

在这里插入图片描述
图4-2 NodeMCU电路连接图

 /*-----------------------------------------------------------
                        written by dongeast, 2021
 WiFiLed.ino - NodeMCU连接到路由器WiFi,将其配置为TCP
 客户端同时与连接到路由器上的Tcp服务器设备(手机或电脑)
 建立Tcp连接
 ------------------------------------------------------------*/
 
 const int Led = 16;
 const char *RemoteIp = "192.168.1.105"; // 设置远程主机Ip地址
 const int RemotePort = 1234; // 设置远程主机端口号
 
 #include "ESP8266WiFi.h"
 
 WiFiClient client; // 创建Tcp客户端
 void setup()
 {
   Serial.begin(115200);
   Serial.println();
 
   WiFi.begin("CEET305", "office305");  // 设置连接到的WiFi名称和密码
   Serial.print("Connecting...");
   
   while (WiFi.status() != WL_CONNECTED)
   {
     delay(500);
     Serial.print(".");
   }
   
   Serial.println();
   Serial.println(WiFi.localIP()); // 打印NodeMCU的IP地址
     
   if (!client.connect(RemoteIp, RemotePort)) // 建立tcp连接
   {
     Serial.println("Connected failed!");
     return;
   }
 
   pinMode(Led, OUTPUT); // 设置GPIO16为输出模式
   digitalWrite(Led, LOW); // 初始时,GPIO16输出低电平 
 }
 
 void loop()
 {
   if (client.available())  
   {    
     char ch = client.read(); // 读取远程网络串口发来的数据
     if (ch == '0')
       digitalWrite(Led, LOW); 
     else if (ch == '1')
       digitalWrite(Led, HIGH);
   }
 }
/*------------------------------------------------------------
 2                     written by dongeast, 2021
 3 SoftApLed.ino - 将NodeMCU设置为soft-AP模式(热点模式
 4 )其他设备可以连接到该热点,并将NodeMCU设置为Tcp服务器
 5 端,同时将其他设备(手机,电脑)配置为Tcp客户端,并连接
 6 到NodeMCU服务器上,向其发送控制消息
 ------------------------------------------------------------*/
 
 #include <ESP8266WiFi.h>
 const int Led = 16;          // 将Led连接到GPIO16端口
 const int LocalPort = 8266; // 设置ModeMCU端口
 
 WiFiServer server(LocalPort);
 void setup()
 {
   Serial.begin(115200);
   Serial.println();
 
   Serial.print("Setting soft_AP..."); 
   if (WiFi.softAP("ESP8266", NULL))
     Serial.print("Ready");
   else 
     Serial.print("Failed");  
 
   Serial.println();
   server.begin();
   Serial.printf("TcpServerstarted,%s", WiFi.softAPIP().toString().c_str());
   
   pinMode(Led, OUTPUT);
   digitalWrite(Led, LOW);
 }
 
 void loop()
 {  
   WiFiClient client = server.available(); // 等待客户端连接
   if (client)
   {
     client.write("Hello from NodeMCU");
     Serial.println("Client connected");
     while (client.connected())  // 当客户端保持连接时,从客户端读取数据
     {      
       if (client.available()) // 当客户端发送数据时
       {
         char ch = client.read();        
         if (ch == '0')  
           digitalWrite(Led, LOW);
         else if (ch == '1')
           digitalWrite(Led, HIGH);
       }
     }
   } 
 
   client.stop();  // 断开连接  
 }

这样两个NodeMCU之间就可以实现相互通信!

完整源码请在微信公众号“修电脑的杂货店”后台回复“代码”获取!!!

对这篇内容对你有帮助,或者对本文章内容有兴趣的同学可以加入官方QQ群详细交流探讨,互相学习共同进步,源码和具体操作流程,也会放到群里,如果有不懂得细节,群里也会有人回答。快加入我们的大家庭QQ群号:559369389 欢迎新成员的到来!

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值