arduino + esp8266 + websocket-client程序实例

/*
 * 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号电机运行
}

 

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值