/*
* WebSocketClient.ino
*
* Created on: 24.05.2015
*
*/
#include <Arduino.h>
//步进电机库
#include <AccelStepper.h>
#include <MultiStepper.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <WebSocketsClient.h>
#include <Hash.h>
ESP8266WiFiMulti WiFiMulti;
WebSocketsClient webSocket;
#define USE_SERIAL Serial
//
//#define WIFINAME "WIFI账号"
//#define WIFIPW "WIFI密码"
// 电机步进方式定义
#define FULLSTEP 4 //全步进参数
#define HALFSTEP 8 //半步进参数
// 定义步进电机引脚
#define motor1Pin1 14 // 一号28BYJ48连接的ULN2003电机驱动板引脚 in1
#define motor1Pin2 13 // 一号28BYJ48连接的ULN2003电机驱动板引脚 in2
#define motor1Pin3 12 // 一号28BYJ48连接的ULN2003电机驱动板引脚 in3
#define motor1Pin4 2 // 一号28BYJ48连接的ULN2003电机驱动板引脚 in4
#define motor2Pin1 4 // 二号28BYJ48连接的ULN2003电机驱动板引脚 in1
#define motor2Pin2 5 // 二号28BYJ48连接的ULN2003电机驱动板引脚 in2
#define motor2Pin3 16 // 二号28BYJ48连接的ULN2003电机驱动板引脚 in3
#define motor2Pin4 15 // 二号28BYJ48连接的ULN2003电机驱动板引脚 in4
// 定义两个步进电机对象
// 1号电机设置为半步进运行,2号电机设置为全步进运行
AccelStepper stepper1(FULLSTEP, motor1Pin1, motor1Pin3, motor1Pin2, motor1Pin4);
AccelStepper stepper2(FULLSTEP, motor2Pin1, motor2Pin3, motor2Pin2, motor2Pin4);
//几个全局变量
char my_str00,my_str01,my_str03;
int my_str02,my_str04;
void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) {
switch(type) {
case WStype_DISCONNECTED:
USE_SERIAL.printf("[WSc] Disconnected!\n");
break;
case WStype_CONNECTED: {
USE_SERIAL.printf("[WSc] Connected to url: %s\n", payload);
// send message to server when Connected
webSocket.sendTXT("Connected");
}
break;
case WStype_TEXT:
USE_SERIAL.printf("[WSc] get text: %s\n", payload);
// my_str[] = payload;
my_str00 = payload[0];
my_str01 = payload[1];
my_str02 = (int)(payload[2] - '0');
my_str03 = payload[3];
my_str04 = (int)(payload[4] - '0');
// send message to server
// webSocket.sendTXT("message here");
break;
case WStype_BIN:
USE_SERIAL.printf("[WSc] get binary length: %u\n", length);
hexdump(payload, length);
// send data to server
// webSocket.sendBIN(payload, length);
break;
case WStype_PING:
// pong will be send automatically
USE_SERIAL.printf("[WSc] get ping\n");
break;
case WStype_PONG:
// answer to a ping we send
USE_SERIAL.printf("[WSc] get pong\n");
break;
}
}
void setup() {
stepper1.setMaxSpeed(250.0); // 1号电机最大速度500
stepper1.setAcceleration(25.0); // 1号电机加速度50.0
stepper2.setMaxSpeed(250.0); // 2号电机最大速度500
stepper2.setAcceleration(25.0); // 2号电机加速度50.0
// USE_SERIAL.begin(921600);
USE_SERIAL.begin(115200);
//Serial.setDebugOutput(true);
USE_SERIAL.setDebugOutput(true);
USE_SERIAL.println();
USE_SERIAL.println();
USE_SERIAL.println();
for(uint8_t t = 4; t > 0; t--) {
USE_SERIAL.printf("[SETUP] BOOT WAIT %d...\n", t);
USE_SERIAL.flush();
delay(1000);
}
WiFiMulti.addAP("HX","hXXXXXXX");
//WiFi.disconnect();
while(WiFiMulti.run() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected!连接成功");
// server address, port and URL
webSocket.begin("192.168.0.100", 8282);
// event handler
webSocket.onEvent(webSocketEvent);
// use HTTP Basic Authorization this is optional remove if not needed
// webSocket.setAuthorization("user", "Password");
// try ever 5000 again if connection has failed
webSocket.setReconnectInterval(500);
// start heartbeat (optional)
// ping server every 15000 ms
// expect pong from server within 3000 ms
// consider connection disconnected if pong is not received 2 times
webSocket.enableHeartbeat(15000, 3000, 2);
}
void loop() {
webSocket.loop();
if (my_str00=='#'){
USE_SERIAL.printf("启动____");
if (my_str01=='C'){
int c = 70*my_str02;
// 1号垂直电机转动
stepper1.moveTo(c);
}
if (my_str03=='R'){
int r = 102*my_str04;
// 2号水平电机转动
stepper2.moveTo(r);
}
}
// if (my_str02=='e'){
// USE_SERIAL.printf("启动电机");
scanf("%d",&my_str03);
// int r = 70*my_str04;
// int c = 102*my_str02;
// USE_SERIAL.printf("两数相乘的结果: %d\n",c);
// if ( stepper1.currentPosition() == 0 && stepper2.currentPosition() == 0 ){
// // 1号电机转动半周
// stepper1.moveTo(r);
// // 2号电机转动一周
// stepper2.moveTo(c);
//
// } else if ( stepper1.currentPosition() == 768 && stepper2.currentPosition() == 1536 ){
// // 1号电机转动半周
// stepper1.moveTo(0);
// // 2号电机转动一周
// stepper2.moveTo(0);
// }
// }
stepper1.run(); // 1号电机运行
stepper2.run(); // 2号电机运行
}