NodeMcu ESP8266 无需任何基础 制作wifi小车

NodeMcu ESP8266 无需任何基础 制作wifi小车

简介

使用arduino编译(代码简单)

所需工具:

  1. Arduino (需要安装esp8266的库 楼下会贴下载链接)
  2. 小车套件(两个小电机的就行)
  3. NodeMcu esp8266开发板
  4. L298N (电机驱动板)
  5. 电源模块(NodeMcu 引脚输出电压只有3.3v ,不足以使L298N工作,5V就可以 亲测)
  6. 杜邦线 若干

硬件连线

在这里插入图片描述

代码

#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

  1. 打开TCP client 输入板子的IP地址(ip地址在连接wifi时会在串口打印出来,一般不会变) ,代码中设置的端口
  2. 发送1前进 2后退 3左转 4右转,在APP上设置对应的按钮即可操控小车

下载

链接:https://pan.baidu.com/s/1UdnopH8uKiEhApJqvd6tNQ
提取码:7x5z

  • 6
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值