NodeMcu ESP8266 无需任何基础 制作wifi小车
简介
使用arduino编译(代码简单)
所需工具:
- Arduino (需要安装esp8266的库 楼下会贴下载链接)
- 小车套件(两个小电机的就行)
- NodeMcu esp8266开发板
- L298N (电机驱动板)
- 电源模块(NodeMcu 引脚输出电压只有3.3v ,不足以使L298N工作,5V就可以 亲测)
- 杜邦线 若干
硬件连线
代码
#include <ESP8266WiFi.h>
#define MAX_SRV_CLIENTS 3 //最大同时联接数,即你想要接入的设备数量,8266tcpserver只能接入五个,哎
char str[20];
uint16_t i=0;
const char *ssid = "wifi"; 这里是我的wifi,你使用时修改为你要连接的wifi ssid
const char *password = "aaaaaasdf"; //你要连接的wifi密码
WiFiServer server(8899);//服务器端口号,随意修改,范围0-65535
WiFiClient serverClients[MAX_SRV_CLIENTS];
void setup()
{
Serial.begin(115200);
delay(10);
// 板载LED灯
pinMode(16,OUTPUT);
// 右电机引脚
pinMode(D1,OUTPUT); //连接L298N_IN1 引脚
pinMode(D2,OUTPUT); //连接L298N_IN2 引脚
// 左电机引脚
pinMode(D5,OUTPUT); //连接L298N_IN3 引脚
pinMode(D6,OUTPUT); //连接L298N_IN4 引脚
// 设置默认不动
digitalWrite(D1, LOW);
digitalWrite(D2, LOW);
digitalWrite(D5, LOW);
digitalWrite(D6, LOW);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
server.setNoDelay(true); //加上后才正常些
}
void loop()
{
blink();
uint8_t i;
if (server.hasClient())
{
for (i = 0; i < MAX_SRV_CLIENTS; i++)
{
if (!serverClients[i ] || !serverClients[i ].connected())
{
if (serverClients[i ]) serverClients[i ].stop();//未联接,就释放
serverClients[i ] = server.available();//分配新的
continue;
}
}
WiFiClient serverClient = server.available();
serverClient.stop();
}
for (i = 0; i < MAX_SRV_CLIENTS; i++)
{
if (serverClients[i ] && serverClients[i ].connected())
{
if (serverClients[i ].available())
{
while (serverClients[i ].available())
{
char temp = serverClients[i ].read(); // 接收到1时前进,2后退,3左转,4右转
switch(temp)
{
case '1': //go 前进
{
digitalWrite(D1, LOW);
digitalWrite(D2, HIGH);
digitalWrite(D5, HIGH);
digitalWrite(D6, LOW);
}
break;
case '2': //back 后退
{
digitalWrite(D1, HIGH);
digitalWrite(D2, LOW);
digitalWrite(D5, LOW);
digitalWrite(D6, HIGH);
}
break;
case '3': // left 左转
{
digitalWrite(D1, LOW);
digitalWrite(D2, HIGH);
digitalWrite(D5, LOW);
digitalWrite(D6, LOW);
}
break;
case '4': //right 右转
{
digitalWrite(D1, LOW);
digitalWrite(D2, LOW);
digitalWrite(D5, HIGH);
digitalWrite(D6, LOW);
}
break;
case '5': // 停止
{
digitalWrite(D1, LOW);
digitalWrite(D2, LOW);
digitalWrite(D5, LOW);
digitalWrite(D6, LOW);
}
break;
default: // 停止
digitalWrite(D1, LOW);
digitalWrite(D2, LOW);
digitalWrite(D5, LOW);
digitalWrite(D6, LOW);
break;
}
Serial.print(temp);
Serial.print(" ");
}
}
}
}
if (Serial.available())
{
size_t len = Serial.available();
uint8_t sbuf[len];
Serial.readBytes(sbuf, len);
//push UART data to all connected telnet clients
for (i = 0; i < MAX_SRV_CLIENTS; i++)
{
if (serverClients[i ] && serverClients[i ].connected())
{
serverClients[i ].write(sbuf, len); //向所有客户端发送数据
delay(1);
}
}
}
}
void blink()
{
static long previousMillis = 0;
static int currstate = 0;
if (millis() - previousMillis > 200) //200ms
{
previousMillis = millis();
currstate = 1 - currstate;
digitalWrite(16, currstate);
}
}
在手机上下载 TCP 调试APP
- 打开TCP client 输入板子的IP地址(ip地址在连接wifi时会在串口打印出来,一般不会变) ,代码中设置的端口
- 发送1前进 2后退 3左转 4右转,在APP上设置对应的按钮即可操控小车
下载
链接:https://pan.baidu.com/s/1UdnopH8uKiEhApJqvd6tNQ
提取码:7x5z