具体步骤
一、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秒,则响应无延时