用户
 找回密码
 立即注册

QQ登录

只需一步,快速开始

点击进入授权页面

只需一步,快速开始

  • QQ空间
  • 回复
  • 收藏
  • TA的每日心情
    开心
    2017-2-26 10:18
  • 签到天数: 259 天

    [LV.8]以坛为家I

    沧海笑1122 版主 2017-5-30 21:27 楼主
    本帖最后由 沧海笑1122 于 2017-5-30 21:29 编辑

    【麦步手表+ESP8266玩小车控制】本帖转自麦步社区(原帖)
    【麦步手表是什么】
    是一块国产智能手表,墨水屏,超长待机,通过蓝牙与手机连接。并且提供http方式与单片机通信并且传递数据。手表搭载三轴传感器。并且有四个按键作为用户对话。
    手表1.PNG
    【整体想法】
        本身这个玩具的想法来自于麦步手表的一篇评测文。用麦步手表+ARDUINO UNO(及以太网卡)控制LED灯。
        既然是以太网卡可以,那么我想,esp8266当然也可以。既然是LED可以(写数字口嘛),那么我想,小车控制也可以(数字口通过电机驱动板嘛)。。。所以就有了这个小玩具。
    结构示意图.PNG
    基本思路:在esp8266上建立一个简单的httpserver,通过wifi---手机---BLE---maibu手表,将手表按键的控制参数传至esp8266,从而控制小车。

        看看定妆照。
    小车.jpg
    【小车端代码基于esp8266,一些设计想法镶嵌在注释里面,希望对大家有所帮助吧】
    /*CODE FROM:https://github.com/beadone/webserver_esp-12 * 修改内容:用于maibu 手表控制小车 * date:2017-05-22 * by:沧海笑1122 */ #include <ESP8266WiFi.h> //wifi设置 const char* ssid     = "your ssid"; const char* password = "yourpsw "; //小车驱动设置 /* int redPin = 15;  //GPIO15 int greenPin = 12;  //GPIO12 int bluePin = 13;  //GPIO13 */ int DEFAULT_SPEED = 200 ;//默认速度,max=255 int inA = D8; int inB = D6; int pwmA = D7; int pwmB = D5; //小车反馈字头 int carzt;//反馈到客户端的小车字头 WiFiServer server(80); void setup() { Serial.begin(115200); delay(10); //小车控制pin设置    pinMode(inA, OUTPUT);    pinMode(inB, OUTPUT);    pinMode(pwmA, OUTPUT);    pinMode(pwmB, OUTPUT); /* pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); */ // Connect to WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); // Start the server server.begin(); Serial.println("Server started"); // Print the IP address Serial.print("Use this URL to connect: "); Serial.print("http://"); Serial.print(WiFi.localIP()); Serial.println("/"); } void loop() { int carzt=0; // Check if a client has connected WiFiClient client = server.available(); if (!client) { return; } // Wait until the client sends some data Serial.println("new client"); while(!client.available()){ delay(1); } // Read the first line of the request   String req = client.readStringUntil('\r');   Serial.println(req); client.flush(); // Match the request if (req.indexOf("/F") != -1) { goForward(); carzt = 1; //小车前进 } if (req.indexOf("/B") != -1) { goBackward(); carzt = 2; //小车后退 } if (req.indexOf("/S") != -1) { stop(); carzt = 0; //小车停止 } // Return the response client.println("HTTP/1.1 200 OK"); client.println("Content-Type: application/json"); client.println(); client.println("{");             //  int sensorReading = analogRead(1); client.print("\"car"); client.print("\": "); client.print(carzt); client.println("\n}"); // break; delay(1); Serial.println("Client disonnected"); Serial.println(""); } void goForward()//小车前进 {     digitalWrite(inA,HIGH);     digitalWrite(inB,HIGH);     analogWrite(pwmA,DEFAULT_SPEED);     analogWrite(pwmB,DEFAULT_SPEED);       } void goBackward()//小车后退 {     digitalWrite(inA,LOW);     digitalWrite(inB,LOW);     analogWrite(pwmA,DEFAULT_SPEED);     analogWrite(pwmB,DEFAULT_SPEED); } void stop()//小车停止 {      /*disable the enble pin, to stop the motor. */     digitalWrite(inA,LOW);     digitalWrite(inB,LOW);     analogWrite(pwmA,0);     analogWrite(pwmB,0);   }

    视频参考:


    【小结】
         使用智能手表+wifi网络+手机(作为服务器)与单片机通信,以驱动小车平台。是一种有趣的玩法。可惜目前只有四个键,所以小车转向的问题留待下一步研究。
         本来有设想,将手表的三轴数据送下来,解析后控制小车转向,因为我在测试蓝宙altar平台时做过一个体感遥控器,有一定的技术积累。可惜看了手册后,遇到了与其他师兄同样的问题,手表发出web请求的最小间隔是5秒,这样我的想法可能就没法实现了。只好换一种思路来考虑。
        本文是抛砖引玉的玩具,在试验过程中原先考虑用esp32来驱动小车,可惜开了几路gpio后就出现崩溃,可能还需要对esp32进行进一步学习和了解。相比之下esp8266的资料就丰富得多,所以建立一个http server后,很方便地用手表---手机---路由器来访问esp8266,传送各个控制命令,从而驱动小车前进、后退和停止。

    【感谢】
    感谢麦步社区版主Automan师兄,提供了麦步控制led的全部代码,这个小玩具就是建立在师兄们的代码上。
    感谢孝肃师兄。
    端午安康。
    沧海抱拳。
    report0530.rar (3.7 KB, 下载次数: 35)

    打赏作者鼓励一下!
    esp8266的几口可以输出pwm?
    还在初学阶段,感觉好强大啊
    发新帖
    发表评论
    高级模式  
    您需要登录后才可以回帖 登录 | 立即注册  
    关闭

    推荐主题 上一条 /2 下一条