当前位置: 首页 > 工具软件 > Node GH > 使用案例 >

ESP8266-NodeMCU远程通信

佘修为
2023-12-01

具体步骤
一、Arduino IDE的安装
二、Arduino IDE的配置
三、了解网络通信的基本原理
四、TCP工具包的下载安装
五、编写、烧写程序
六、测试

一、Arduino IDE的安装
1、下载地址
window用户 百度网盘 :
https://pan.baidu.com/s/1Oj-geuFCsf6ubsvtSv1A0w
提取码:beia(此地址转太极创客的网站中提供的下载地址)

苹果电脑Mac OSX 百度网盘https://pan.baidu.com/s/15REzzseXXW6Sc8frxxkbew
提取码:gh7t(此地址转太极创客的网站中提供的下载地址)
2、安装过程一路按照提示进行即可,若遇到是否捐费,则选择否。

二、Arduino IDE的配置
此部分可以参照b战上面的视频或太极创客的视频进行配置,有视频可能效果会更好。

三、了解网络通信的基本原理
这个实验需要了解的网络通信原理不是很多。这里只要知道某个设备要在网络上与另一个设备通信,就必须要知道那个设备的访问路径,即设备的IP地址。在局域网中,我们可以通过直接访问设备的IP地址,但要实现远程通信,必须借助物联网平台,通过在物联网平台上建立一个服务器,使得esp8266能够通过IP地址连接这个服务器,手机端的tcplp工具包作为客户端通过相同的IP和端口连接到服务器。于是物联网平台为ESP8266和手机tcplp
建立了在互联网上的通信纽带。当手机发送数据给物联网平台,物联网平台会将数据发送给其他客户端设备。

此部分可以参考太极创客esp8266的b战视频。

四、TCP工具包的下载安装
建议tcplp工具包,到手机应用商店直接下载即可。

五、编写、烧写程序

以下是代码部分:
(部分代码出自太极创客提供的代码)

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <string.h>
#define pin D3
ESP8266WiFiMulti wifiMulti;           // 建立ESP8266WiFiMulti对象

const char* server_IP = "115.29.109.104"; // Doit.am远程信息转发服务器的IP,打开 
                                            // 这个网址http://tcp.doit.am/  便可获得IP和端口
const int server_Port = 6539;              //端口80
 
void setup(){


  pinMode(LED_BUILTIN, OUTPUT); //上拉模式
  digitalWrite(LED_BUILTIN, HIGH);//初始高电平
  Serial.begin(9600);      //启动串口通讯    
  Serial.println("");
    
  wifiMulti.addAP("His Majesty", "12345678"); // 将需要连接的一系列WiFi ID和密码输入这里
  wifiMulti.addAP("FLX", "tgkugnflx"); // ESP8266-NodeMCU再启动后会扫描当前网络
  wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3"); // 环境查找是否有这里列出的WiFi ID。如果有
  Serial.println("Connecting ..."); 
 
  // 尝试进行wifi连接。
  int i = 0;  
  while (wifiMulti.run() != WL_CONNECTED) { 
    delay(1000);
    Serial.print(i++); Serial.print(' ');
  }
  
  // WiFi连接成功后将通过串口监视器输出连接成功信息 
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(WiFi.SSID());              // WiFi名称
  Serial.print("IP address:\t");
  Serial.println(WiFi.localIP());           // IP
}
 
void loop(){
  if(wifiMulti.run() != WL_CONNECTED) //防止wifi断了
  {
    setup();
  }
  receive_data();
}

void receive_data()
{
   int  status_1;
   int  status_2;
  // 建立WiFi客户端对象,对象名称client
  WiFiClient client;    
  // 通过串口输出连接服务器名称以便查阅连接服务器的网址                      
  Serial.print("Connecting to "); 
  Serial.print(server_IP); 
  if (client.connect(server_IP, server_Port))
  { 
    Serial.println(" Success server!");        // 连接成功后串口输出“Success”信息
   //client.connected()是client客户端连接服务器,成功返回Ture; client.available()是有数据发送给client客户端,有返回Ture
    while (client.connected() || client.available())
    { 
      if (client.available())
      {
        status_1 = client.parseInt();   //服务器发送给client客户端数据,数据会存放在client对象中。
                                      // client.parseInt()函数是从客户端的数据中提取int数据,因为手机端发送给服务器的是字符串
       
        Serial.print(status_1);Serial.print(" :");
      
      
             if(status_1 == 0)                         //根据status的值开关灯,0开灯,1关灯
             {
                 digitalWrite(LED_BUILTIN,LOW);
                 Serial.println("open the led success!");
             }
        
             if(status_1 == 1)
             {
                 digitalWrite(LED_BUILTIN,HIGH);
                 Serial.println("close the led success!");
             }
             status_2 = client.parseInt();//清除缓存   不知道为什么手机TCP发送一个数据后,ESP8266会接受到2个数据。多出来的数据是0,
      }
    }
  }
    else
    {    // 如果连接不成功则通过串口输出“连接失败”信息
                  Serial.println(" connection failed!");
                   client.stop();
    }
  
}

六、测试
让ESP8266开发板链接wifi,手机端使用移动数据,保证两个网络不在同一个局域网内,打开手机tcplp工具包,选择TCP客户端模式,输入Doit.am所建立好的服务器的IP和端口号。发送0 - > 低电平点灯 ; 1 -> 高电平熄灯;

实践:广州 < – > 珠海 每次发送0、1数据间隔6秒,则响应无延时

 类似资料: