无线控制机械转盘车

操作说明
装配机械控制与主控板散件,完成后将主控板COM与P4短接此时D2指示灯亮起其次进行手动控制测试确保机械装配正常无误。
MCU主控ESP8266连接电脑通过Arduino编译下载测试示例程序,选择下载时需要注意开发板的选择和下载端口如图1_1,编译通过点下载,然后长按ESP8266 Flash按键再点下RST进入下载模式,等待下载进度条开始时松手完事,此时WIFI模块自动复位开始运行下载的程序下载,表面现象为长亮指示灯,待连路由器成功后指示灯为呼吸状态
此时手机下载控制软件,安装成功后将手机连接到与WIFI模块连接的同一网络下,也就是两者处于局域网络下,打开安卓示例APP,进入设置处开始设置连接IP地址与端口号,连接。
开始操作控制
参考示例程序

include <ESP8266WiFi.h>

define MAX_SRV_CLIENTS 4 //最大同时联接数,即你想要接入的设备数量,8266tcpserver只能接入五个

const char *ssid = "iCloud_TP"; ////这里是我的wifi,你使用时修改为你要连接的wifi ssid
const char *password = "icloud_TP"; //你要连接的wifi密码

IPAddress local_IP(192, 168, 1, 133);//加入路由器时192, 168, 0, 1开始或根据路由分配的起始IP可到路由器中查看
IPAddress gateway(192, 168, 0, 1);//加入路由器时192, 168, 0, 1/手机自建服务器时路由网关192, 168, 43, 1
IPAddress subnet(255, 255, 255, 0);

WiFiServer server(8266);//你要的端口号,随意修改,范围0-65535
WiFiClient serverClients[MAX_SRV_CLIENTS];
int a = 0; //连接状态标识
int i = 0;//用于for循环
void setup()
{
Serial.begin(9600);
delay(10);
pinMode(16, OUTPUT);// D0
digitalWrite(16, 0);
//定义输入引脚

pinMode(5, OUTPUT);//    D1
pinMode(4, OUTPUT);//    D2
pinMode(0, OUTPUT);//    D3

//定义输出引脚
pinMode(2, OUTPUT);//     D4
pinMode(14, OUTPUT);//    D5
pinMode(12, OUTPUT);//    D6
pinMode(13, OUTPUT);//    D7
pinMode(15, OUTPUT);//    D8

digitalWrite(2, HIGH);//输出低电平
digitalWrite(0, LOW);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(14, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
digitalWrite(15, LOW);

WiFi.config(local_IP, gateway, subnet);//192.168.0.200
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED)
{
    delay(500);
}
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())
    {
        digitalWrite(16, 0);//有链接存在,就一直长亮

// if (serverClients[i].available()) //直接转发客户端数据
// {
// while (serverClients[i].available())
// Serial.write(serverClients[i].read());
// }
}
}
//把串口数据发送到客户端
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);
}
}
}
//把收到的客户端数据发送到串口
for (i = 0; i < MAX_SRV_CLIENTS; i++) {
if (serverClients[i] && serverClients[i].connected()) {
while (serverClients[i].available())
{
char data = serverClients[i].read();
Serial.println(data);
switch (data) {
case 'a':
digitalWrite(5, LOW);//输出低电平
digitalWrite(4, LOW);
digitalWrite(14, LOW);
digitalWrite(12, LOW);
digitalWrite(13, HIGH);
digitalWrite(15, LOW);
break;
case 'b':
digitalWrite(5, LOW);//输出低电平
digitalWrite(4, LOW);
digitalWrite(14, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
digitalWrite(15, HIGH);
break;
case 'c':
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(14, LOW);
digitalWrite(12, HIGH);
digitalWrite(13, LOW);
digitalWrite(15, LOW);
break;
case 'd':
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(14, HIGH);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
digitalWrite(15, LOW);
break;
case 'e':
digitalWrite(5, LOW);
digitalWrite(4, HIGH);
digitalWrite(14, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
digitalWrite(15, LOW);
break;
case 'f':
digitalWrite(5, HIGH);
digitalWrite(4, LOW);
digitalWrite(14, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
digitalWrite(15, LOW);
break;
default:
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(14, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
digitalWrite(15, LOW);
break;

        }
  }
}

}

}

//连接情况 用led灯的状态显示
void blink()
{
static long previousMillis = 0;
static int currstate = 0;

if (millis() - previousMillis > 200)  //200ms
{
    previousMillis = millis();
    currstate = 1 - currstate;
    digitalWrite(16, currstate);
}

}

控制软件下载
1、安卓控制端下载:Android

2、安桌通用调试工具:NetAssist

posted @ 2020-04-02 10:29  icloudelectron  阅读(230)  评论(0编辑  收藏  举报