博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NodeMCU学习(四):与其他设备通信
阅读量:5134 次
发布时间:2019-06-13

本文共 4579 字,大约阅读时间需要 15 分钟。

可以访问我的个人博客

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 ServerIP地址和端口号之后,将其打开(连接)。将程序中的IP地址和端口号换成上面设置好的值,

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

 

图4-2 NodeMCU电路连接图

  NodeMCU程序如下:

1 /*----------------------------------------------------------- 2                        written by helio, 2019 3 WiFiLed.ino - NodeMCU连接到路由器WiFi,将其配置为TCP 4 客户端同时与连接到路由器上的Tcp服务器设备(手机或电脑) 5 建立Tcp连接 6 ------------------------------------------------------------*/ 7  8 const int Led = 16; 9 const char *RemoteIp = "192.168.1.105"; // 设置远程主机Ip地址10 const int RemotePort = 1234; // 设置远程主机端口号11 12 #include "ESP8266WiFi.h"13 14 WiFiClient client; // 创建Tcp客户端15 void setup()16 {17   Serial.begin(115200);18   Serial.println();19 20   WiFi.begin("CEET305", "office305");  // 设置连接到的WiFi名称和密码21   Serial.print("Connecting...");22   23   while (WiFi.status() != WL_CONNECTED)24   {25     delay(500);26     Serial.print(".");27   }28   29   Serial.println();30   Serial.println(WiFi.localIP()); // 打印NodeMCU的IP地址31     32   if (!client.connect(RemoteIp, RemotePort)) // 建立tcp连接33   {34     Serial.println("Connected failed!");35     return;36   }37 38   pinMode(Led, OUTPUT); // 设置GPIO16为输出模式39   digitalWrite(Led, LOW); // 初始时,GPIO16输出低电平 40 }41 42 void loop()43 {44   if (client.available())  45   {    46     char ch = client.read(); // 读取远程网络串口发来的数据47     if (ch == '0')48       digitalWrite(Led, LOW); 49     else if (ch == '1')50       digitalWrite(Led, HIGH);51   }52 }53

WiFiLed.ino函数解析

    实例化一个 WiFiClient 对象,对象名称为clientWiFiClient类是在esp8266库中已经封装好的一个TCP客户端,使用它可以实现TCP客户端的实例化,与TCP服务器的连接、通信、状态判断等功能。随后,通过WiFiClient类的一个成员函数 connect() 设置需要连接的服务器的 IP地址和端口号,并与远程TCP服务器建立连接,通过其返回值判断是否连接成功。连接成功后,即可与服务器进行通信,通过类的成员函数 isavailable() 函数判断是否有消息从服务器端发送过来,并根据消息的内容对NodeMCUGPIO16口的Led灯进行控制。

NodeMCU作为TCP服务器端实现局域网内点亮Led灯(不使用路由器)

  第二种方法是将NodeMCU设置为softAP模式,相当于一种热点模式,设置好其WiFi的名字和密码之后,电脑(TCP客户端)即可通过WiFi连接到其上并与之进行通信。

 

4-3 程序烧录至NodeMCU中之后打开串口监视器

  具体步骤如下,先把Led灯连接到NodeMCUGPIO16口,之后将程序烧录至NodeMCU中之后,在串口监视器中可以看到设置成softAP模式成功,同时可以获知NodeMCUIP地址。同时电脑的WiFi管理中心中也可以看到刚刚设置的WiFi,将电脑连接到此WiFi

  之后,在网络调试助手中,将协议类型设置为TCP Client,同时将IP地址设置为刚刚在串口监视器中得到的IP地址(如图4-3),端口设置为在程序中已经设置好的端口好。完成以上步骤之后,连接到TCP Server,连接上之后马上就会收到来自TCP Server发送来的消息“Hello from NodeMCU”(如图4-4),在TCP Client中发送”0”或者”1”即可控制Server-NodeMCU上的Led灯。

 

 

4-4 设置网络调试助手

Node MCU的程序如下:

1 /*------------------------------------------------------------ 2                     written by helio, 2019 3 SoftApLed.ino - 将NodeMCU设置为soft-AP模式(热点模式 4 )其他设备可以连接到该热点,并将NodeMCU设置为Tcp服务器 5 端,同时将其他设备(手机,电脑)配置为Tcp客户端,并连接 6 到NodeMCU服务器上,向其发送控制消息 7 ------------------------------------------------------------*/ 8  9 #include 
10 const int Led = 16; // 将Led连接到GPIO16端口11 const int LocalPort = 8266; // 设置ModeMCU端口12 13 WiFiServer server(LocalPort);14 void setup()15 {16 Serial.begin(115200);17 Serial.println();18 19 Serial.print("Setting soft_AP..."); 20 if (WiFi.softAP("ESP8266", NULL))21 Serial.print("Ready");22 else 23 Serial.print("Failed"); 24 25 Serial.println();26 server.begin();27 Serial.printf("TcpServerstarted,%s", WiFi.softAPIP().toString().c_str());28 29 pinMode(Led, OUTPUT);30 digitalWrite(Led, LOW);31 }32 33 void loop()34 { 35 WiFiClient client = server.available(); // 等待客户端连接36 if (client)37 {38 client.write("Hello from NodeMCU");39 Serial.println("Client connected");40 while (client.connected()) // 当客户端保持连接时,从客户端读取数据41 { 42 if (client.available()) // 当客户端发送数据时43 {44 char ch = client.read(); 45 if (ch == '0') 46 digitalWrite(Led, LOW);47 else if (ch == '1')48 digitalWrite(Led, HIGH);49 }50 }51 } 52 53 client.stop(); // 断开连接 54 }

SoftApLed.ino 解析

    实例化一个WiFi Serve类的对象server,并设置server的端口号,随后将Node MCU使用函数WiFi.softAP()设置为SoftAP模式,同时通过函数WiFi.softAPIP()获得其IP地址并打印到串口上,在loop循环中,通过WiFiServer类的一个成员函数available()等待客户端的连接,当有客户端连接至NodeMCU之后,通过client.write()函数往客户端发送“Hello from Node MCU”字符串并与客户端保持连接,再通过WiFiClient类的一个成员函数available接收从客户端发来的数据并通过其发送来的数据的不同从而控制NodeMCU上的Led灯。

转载于:https://www.cnblogs.com/Helio/p/10657330.html

你可能感兴趣的文章
Python数据可视化之Pygal(雷达图)
查看>>
Django组件--cookie与session
查看>>
12. javacript高级程序设计-DOM2和DOM3
查看>>
Centos7安装vsftpd (FTP服务器)
查看>>
当前主流读取Excel技术对比
查看>>
js-格式化数字保留两位小数-带千分符
查看>>
【Java】forward & redirect 的差异
查看>>
Java学习笔记--字符串和文件IO
查看>>
【BZOJ1951】古代猪文(CRT,卢卡斯定理)
查看>>
poj 2823 线段树
查看>>
转 Silverlight开发历程—(画刷与着色之线性渐变画刷)
查看>>
SQL语法(3)
查看>>
在js在添版本号
查看>>
Maximum Gap
查看>>
sublime3
查看>>
[转]快速矩阵快速幂
查看>>
CMap的使用(转)
查看>>
Vue, element-ui Module build failed: Error: No PostCSS Config found
查看>>
36-高级特性之自定义类(1)
查看>>
VMware 克隆的相关设置
查看>>