一.ESP8266介绍
ESP8266是由中国乐鑫科技(Espressif Systems)推出的一款高度集成的Wi-Fi模块,采用Tensilica L106 32位微处理器,主频支持80 MHz或160 MHz(超频)。它集成了完整的Wi-Fi网络功能和TCP/IP协议栈,支持802.11 b/g/n协议,适用于物联网(IoT)设备开发。
引脚图:
二.Arduino+ESP8266连接方式:
Arduino和ESP8266的引脚连接如下图所示:
使用Arduino的输出电源给ESP8266供电。
三.ESP8266 TCP客户端源代码:
/**
**TCP client
*顺序:连接wifi-连接tcp server
**最后接收tcp server的信号
**/
#include<ESP8266WiFi.h>
#include<WiFiClient.h>
int led = LED_BUILTIN;//2代表GPIO2(D4) 控制板上的LED 或者是 LED_BUILTIN
const char* staSID = "***";//需要连接的路由器名
const char* staPASSWD = "***";//需要连接的路由器密码
WiFiClient client;
const char *serverIP = "***";//TCP Server IP
const int serverPort = 1200;//TCP Server port
bool isConnect = 0;
void setup() {
// put your setup code here, to run once:
pinMode(led,OUTPUT);
digitalWrite(led,1);//熄灭LED
WiFi.mode(WIFI_STA);//设置为STA模式
WiFi.begin(staSID,staPASSWD);//配置连接信息 开始连接
Serial.begin(9600);
connectWiFi();//未连接到路由器,闪烁LED,直到连接成功,点亮LED
connectTCPServer();
}
void loop() {
// put your main code here, to run repeatedly:
if(WiFi.status() != WL_CONNECTED)
{
WiFi.disconnect();//清除之前的连接信息
WiFi.begin(staSID,staPASSWD);
connectWiFi();
}
else
{
if(!client.connected())
{
//未连接到TCP Server
connectTCPServer();
return;
}
else
{
//连接TCP Server成功
if(isConnect == 0)
{
client.println("hello server");
isConnect = 1;
}
}
}
tcpHandle(readTCPData());
}
//读取TCP数据
String readTCPData()
{
String data = "";
while(client.available() > 0)
{
data += char(client.read());
delay(2);
}
return data;
}
//处理接收的数据
void tcpHandle(String data)
{
if(data != "")
{
//Serial.print("收到服务器信息:");
//Serial.println(data);
if(data == "open")
{
digitalWrite(led,0);
client.println("open led");
Serial.print("open");
}
else if(data == "close")
{
digitalWrite(led,1);
client.println("close led");
Serial.print("close");
}
else if(data == "f")
{
//前进
client.println("f");
Serial.print("U");
}
else if(data == "b")
{
//后退
client.println("b");
Serial.print("D");
}
else if(data == "l")
{
//左转
client.println("l");
Serial.print("L");
}
else if(data == "r")
{
//右转
client.println("r");
Serial.print("R");
}
else if(data == "s")
{
//停止
client.println("s");
Serial.print("S");
}
}
}
void connectWiFi()
{
Serial.println("开始连接网络");
while(WiFi.status() != WL_CONNECTED)
{
Serial.print("-");
delay(500);
}
Serial.println("连接网络成功");
}
void connectTCPServer()
{
Serial.println("开始连接TCP Server");
client.connect(serverIP,serverPort);
delay(1000);
}
四.Arduino源代码
Arduino通过串口接收ESP8266接收的远程TCP Server的指令,并控制小车前进、后退、左转、右转、停止。
源代码参考本专题文章《基于Arduino的蓝牙遥控智能小车》
五.TCP Server
将TCP Server 的IP和端口,放入ESP8266TCP客户端源代码中,如下图所示:
六:运行效果:
通过TCP Server按键控制模块控制远程小车运动的完整过程:
wifi遥控智能车-剪辑版
wifi遥控智能车
TCP Server 控制软件可关注下方微信公众号《电子设计研习社》,并回复"TCP"获取下载地址。